ROSA上のKeycloakベンチマーク 主要な結果
これは、2024年5月に実施されたKeycloak 25リリース候補ビルドでのベンチマーク実行をまとめたものです。Keycloak環境の要件を計算するための出発点として使用してください。また、ご自身の環境で負荷テストを実行するために使用してください。
トークンをリフレッシュする際のCPU使用率の収集は現在手動で行われており、近い将来自動化される予定です(keycloak/keycloak-benchmark#517)。 |
セットアップ
このセットアップは、GitHub Actionsのスケジュールで毎日実行されています。
-
OpenShift 4.15.x が、AWSリージョン内の2つのAWSアベイラビリティゾーンを使用してROSA経由でAWSにデプロイされています。
-
c7g.2xlarge
インスタンスを持つMachinepool。 -
Keycloak 25 リリース候補ビルドが、Operatorと各サイトに3つのポッドを持つアクティブ/パッシブ構成としてデプロイされ、Infinispanが2つのサイトを接続しています。
-
デフォルトのユーザーパスワードハッシュは、Argon2と5回のハッシュ反復、および最小メモリサイズ7 MiB (OWASP推奨)を使用しています。
-
データベースには、100,000ユーザーと100,000クライアントがシードされています。
-
Infinispanキャッシュはデフォルトで10,000エントリであるため、すべてのクライアントとユーザーがキャッシュに収まるわけではなく、一部のリクエストはデータベースからデータをフェッチする必要があります。
-
すべてのセッションはデフォルトで分散キャッシュに保存され、エントリごとに2つのオーナーを持つため、1つのポッドが失敗してもデータは失われません。
-
データベースはAmazon Aurora PostgreSQLで、マルチAZ構成で、ライターインスタンスはプライマリサイトのアベイラビリティゾーンにあります。
インストール
.env
ファイル# no KC_CPU_LIMITS set for this scenario KC_CPU_REQUESTS=6 KC_INSTANCES=3 KC_DISABLE_STICKY_SESSION=true KC_MEMORY_REQUESTS_MB=3000 KC_MEMORY_LIMITS_MB=4000 KC_DB_POOL_INITIAL_SIZE=30 KC_DB_POOL_MAX_SIZE=30 KC_DB_POOL_MIN_SIZE=30
結果
最新リリースの結果、計算例、考察、推奨事項については、Keycloakのメインドキュメントのconcepts-memory-and-cpu-sizingを参照してください。今後のリリースに関する最新情報は、GitHubリポジトリのmainブランチで入手できます。
実施されたテスト
各テストは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
-
ログイン1回あたり10回のリフレッシュの割合で、ログインとトークンのリフレッシュのCPU使用率をテストします。トークンリフレッシュの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
-