第15章 CPU およびメモリーリソースのサイジングの概念
この章は、実稼働環境のサイジングの開始点として使用してください。負荷テストに基づいて、必要に応じて環境に合わせて値を調整してください。
15.1. パフォーマンスに関する推奨事項
- より多くの Pod にスケーリングする場合 (オーバーヘッドの追加のため)、および複数のデータセンターにまたがるセットアップを使用する場合 (トラフィックと運用の拡大のため)、パフォーマンスが低下します。
- Red Hat build of Keycloak インスタンスを長時間実行する場合、キャッシュサイズを増やすと、パフォーマンスが向上する可能性があります。これにより、応答時間が短縮され、データベースの IOPS が減少します。ただし、このキャッシュはインスタンスの再起動時にいっぱいにする必要があるため、キャッシュがいっぱいになった後に測定した安定状態に基づいてリソースを厳しく設定しないでください。
- 以下の値は開始点として使用し、実稼働に移行する前に独自の負荷テストを実行してください。
概要:
- 使用される CPU は、以下のテスト済みの上限まで、リクエストの数に比例して増加します。
- 使用されるメモリーは、以下のテスト済みの上限まで、アクティブなセッションの数に比例して増加します。
推奨事項:
- 非アクティブな Pod のベースメモリー使用量は、1000 MB の RAM です。
100,000 のアクティブユーザーセッションにつき、3 ノードクラスター内の Pod ごとに 500 MB を追加します (200,000 セッションまでテスト済み)。
これは、各ユーザーが 1 つのクライアントのみに接続することを前提としています。メモリー要件は、ユーザーセッションあたりのクライアントセッションの数に応じて増加します (これはまだテストされていません)。
- コンテナーでは、Keycloak はメモリー制限の 70% をヒープベースのメモリーに割り当てます。また、ヒープベース以外のメモリーも約 300 MB 使用します。要求されるメモリーを計算するには、上記の計算を使用してください。メモリー制限を求めるには、上記の値からヒープ以外のメモリーを減算し、その結果を 0.7 で割ります。
1 秒あたり 8 件のパスワードベースのユーザーログインにつき、3 ノードクラスター内の Pod ごとに 1 vCPU (1 秒あたり 300 までテスト済み)。
Red Hat build of Keycloak は、ユーザーが指定したパスワードのハッシュ化にほとんどの CPU 時間を費やします。CPU 時間はハッシュ化の反復回数に比例します。
1 秒あたり 450 件のクライアントクレデンシャルグラントにつき、3 ノードクラスター内の Pod ごとに 1 vCPU (1 秒あたり 2000 までテスト済み)。
各クライアントは 1 つのリクエストのみを実行するため、ほとんどの CPU 時間は新しい TLS 接続の作成に費やされます。
- 1 秒あたり 350 件のリフレッシュトークンリクエストにつき、3 ノードクラスター内の Pod ごとに 1 vCPU (1 秒あたり 435 のリフレッシュトークンリクエストまでテスト済み)。
- 負荷の急増に対処するために、CPU 使用率に 200% の余裕を残しておきます。これにより、ノードが高速で起動するようになるほか、1 つのノードに障害が発生した際のフェイルオーバータスク (Infinispan キャッシュのリバランスなど) を処理するための十分な容量が確保されます。当社のテストでは、Pod がスロットリングされたときに Red Hat build of Keycloak のパフォーマンスが大幅に低下しました。
15.1.1. 計算例
ターゲットサイズ:
- 50,000 のアクティブユーザーセッション
- 1 秒あたり 24 件のログイン
- 1 秒あたり 450 件のクライアントクレデンシャルグラント
- 1 秒あたり 350 件のリフレッシュトークンリクエスト
制限の算定:
要求される CPU: 5 vCPU
(1 秒あたり 24 件のログイン = 3 vCPU、1 秒あたり 450 のクライアントクレデンシャルグラント = 1 vCPU、350 のリフレッシュトークン = 1 vCPU)
CPU 制限: 15 vCPU
(ピーク、起動、フェイルオーバータスクを処理するために、要求される CPU の 3 倍を確保)
要求されるメモリー: 1250 MB
(1000 MB のベースメモリーと、50,000 のアクティブセッションに対する 250 MB RAM)
メモリー制限: 1360 MB
(1250 MB の予想メモリー使用量から 300 MB (ヒープ以外のメモリー使用量) を引き、0.7 で割った値)