限制
minikube 驱动
对于 Linux,可扩展的解决方案需要 kvm2 驱动程序(已测试 15 个 Keycloak 副本)。当添加超过 8 GB 的 RAM 时,可以实现更多实例。
目前,Linux 上的 Podman 驱动程序仅支持最多 5 个 Keycloak 实例,原因是打开文件数量的限制,这实际上是线程数量的限制。之后,容器将抱怨它们无法启动更多进程。
minikube 运行时
在更大的机器上测试 cri-o 运行时时,启动 Pod 并通过 Kubernetes API 和 Web 浏览器访问它们是不稳定的。Pod 的存活探针时不时失败,并且 Pod 重新启动。经过一些分析,原因仍然不清楚,可能与打开文件数量的限制有关。
Jaeger 和追踪采样
为每个追踪收集的数据量很大,可能导致 Jaeger Pod 快速出现内存不足的情况。为了尽量减少收集的数据量,OTEL_TRACES_SAMPLER_ARG 的值设置为 0.01,以便仅追踪百分之一的请求。追踪默认情况下是禁用的,可以在 Keycloak 的 Helm chart 的 values.yaml 文件中启用。
作为替代的追踪解决方案,曾考虑过 Tempo。虽然通过 OTEL 成功提交了追踪,并且按追踪 ID 搜索也能按预期工作,但是搜索追踪(目前是 beta 版本)不会返回某些追踪(例如删除用户)。因此,目前使用 Jaeger 追踪。
用于 JFR 记录的 Cryostat
Helm chart 的内容最初由 Cryostat operator 创建。在分析 2.0 版本中 operator 创建的资源时,没有发现支持添加 cryostat-deployment 所需环境变量的方法。因此,现在已将其提取并作为 Helm chart 放置在此处。
Cryostat 实例需要在与其连接的 JVM 相同的命名空间中运行。因此,它是 Keycloak 部署的一部分,而不是单独的 Helm chart。
创建的分析是常规分析,而不是异步分析。因此,该分析将受到安全点偏差问题的影响。有关详细信息,请参阅 Java async profiler
该项目是一个低开销的 Java 采样分析器,它不受安全点偏差问题的影响。它具有特定于 HotSpot 的 API,用于收集堆栈跟踪和跟踪内存分配。该分析器适用于 OpenJDK、Oracle JDK 和其他基于 HotSpot JVM 的 Java 运行时。
目前,在另有证明之前,不使用异步分析应该足够好。