ROSA 上 Keycloak 基准测试关键结果
这总结了 2024 年 5 月使用 Keycloak 25 发布候选版本进行的基准测试运行。将其用作计算 Keycloak 环境需求的起点。使用它们在您的环境中执行负载测试。
收集用于刷新令牌的 CPU 使用情况目前是手动执行的,预计在不久的将来会实现自动化 (keycloak/keycloak-benchmark#517)。 |
设置
此设置在 GitHub 操作计划中每天运行一次
-
通过 ROSA 在 AWS 上部署的 OpenShift 4.15.x,在 AWS 一个区域中使用两个 AWS 可用区。
-
使用
m5.2xlarge
实例的机器池。 -
使用 Operator 和 3 个 Pod 部署在每个站点上作为主动/被动设置的 Keycloak 25 发布候选版本构建,以及连接两个站点的 Infinispan。
-
默认用户密码散列使用 Argon2 和 5 次散列迭代以及最小内存大小 7 MiB 如 OWASP 建议。
-
数据库已使用 100,000 个用户和 100,000 个客户端进行播种。
-
Infinispan 缓存默认情况下为 10,000 个条目,因此并非所有客户端和用户都适合缓存,一些请求需要从数据库中获取数据。
-
所有会话都位于分布式缓存中,如默认设置,每个条目有两个所有者,允许一个 Pod 出现故障而不会丢失数据。
-
数据库 Amazon Aurora PostgreSQL 处于多 AZ 设置中,写入实例位于主站点的可用区中。
结果
有关最新版本的成果、计算示例、观察结果和建议,请参阅主 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-0.14-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:1。使用之前的测试来扣除仅登录的 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
-