Keycloak on ROSA 基准测试关键结果
这总结了 2024 年 5 月使用 Keycloak 25 候选发布版本执行的基准测试运行。以此作为起点来计算 Keycloak 环境的需求。使用它们在您的环境中执行负载测试。
目前,刷新令牌的 CPU 使用率收集是手动执行的,预计在不久的将来实现自动化 (keycloak/keycloak-benchmark#517)。 |
设置
-
OpenShift 4.15.x 部署在 AWS 上,通过 ROSA,在 AWS 同一区域的两个 AWS 可用区中。
-
Machinepool 具有
c7g.2xlarge
实例。 -
Keycloak 25 候选发布版本,通过 Operator 部署,并在每个站点中以 active/passive 设置部署 3 个 Pod,以及连接两个站点的 Infinispan。
-
默认用户密码哈希,使用 Argon2 和 5 次哈希迭代,最小内存大小为 7 MiB 根据 OWASP 推荐。
-
数据库已使用 100,000 个用户和 100,000 个客户端进行种子填充。
-
Infinispan 缓存默认为 10,000 个条目,因此并非所有客户端和用户都适合缓存,某些请求将需要从数据库中获取数据。
-
所有会话都在分布式缓存中,按照默认设置,每个条目有两个所有者,允许一个 Pod 发生故障而不会丢失数据。
-
数据库 Amazon Aurora PostgreSQL 在多可用区设置中,写入器实例位于主站点的可用区中。
结果
有关最新版本的 Keycloak 文档中的结果、计算示例、观察结果和建议,请参阅 concepts-memory-and-cpu-sizing。有关即将发布的版本的更新信息,请访问 GitHub 存储库的主分支。
执行的测试
每个测试运行 10 分钟。
-
设置 ROSA 集群为默认值。
-
部署 Keycloak 和监控
cd provision/openshift task task monitoring
-
创建数据集
task dataset-import -- -a create-realms -u 100000 # wait for first task to complete task dataset-import -- -a create-clients -c 100000 -n realm-0
-
准备环境以通过 Ansible 运行基准测试
有关详细信息,请参阅 通过 Ansible 和 EC2 运行基准测试。
此处使用的env.yml
的内容cluster_size: 5 instance_type: t4g.small instance_volume_size: 30 kcb_zip: ../benchmark/target/keycloak-benchmark-999.0.0-SNAPSHOT.zip kcb_heap_size: 1G
-
创建负载运行器
cd ../../ansible ./aws_ec2.sh start <region of ROSA cluster>
-
运行不同的负载测试
-
测试用于创建会话的内存
./benchmark.sh eu-west-1 \ --scenario=keycloak.scenario.authentication.AuthorizationCode \ --server-url=${KEYCLOAK_URL} \ --realm-name=realm-0 \ --users-per-sec=<number of users per second> \ --ramp-up=20 \ --logout-percentage=0 \ --measurement=600 \ --users-per-realm=100000 \ --log-http-on-failure
-
测试用户登录的 CPU 使用率
./benchmark.sh eu-west-1 \ --scenario=keycloak.scenario.authentication.AuthorizationCode \ --server-url=${KEYCLOAK_URL} \ --realm-name=realm-0 \ --users-per-sec=<number of users per second> \ --ramp-up=20 \ --logout-percentage=100 \ --measurement=600 \ --users-per-realm=100000 \ --log-http-on-failure
-
测试登录和刷新令牌的 CPU 使用率,比例为每次登录 10 次刷新。使用之前的测试推导出仅登录的 CPU 使用率,以获得令牌刷新的 CPU 使用率。
./benchmark.sh eu-west-1 \ --scenario=keycloak.scenario.authentication.AuthorizationCode \ --server-url=${KEYCLOAK_URL} \ --realm-name=realm-0 \ --users-per-sec=<number of users per second> \ --ramp-up=20 \ --logout-percentage=100 \ --refresh-token-count=10 \ --measurement=600 \ --users-per-realm=100000 \ --log-http-on-failure
-
测试客户端凭据授予的 CPU 使用率
./benchmark.sh eu-west-1 \ --scenario=keycloak.scenario.authentication.ClientSecret \ --server-url=${KEYCLOAK_URL} \ --realm-name=realm-0 \ --users-per-sec=<number of clients per second> \ --ramp-up=20 \ --logout-percentage=100 \ --measurement=600 \ --users-per-realm=100000 \ --log-http-on-failure
-