L = λ × W
容量計画で最も有用な方程式
内部構造に関係なく、安定したキューに対しては:L = λ × W となり、ここで:
- L = システム内の平均項目数(処理中または待機中)
- λ (ラムダ) = 平均到着率(単位時間あたりの項目数)
- W = 各アイテムがシステム内に滞在する平均時間
幾何学的な読み方: λ を一方の軸に、W をもう一方の軸にプロットします。積 L は、それらが形成する長方形の面積です。キャパシティプランニングはこの長方形の内部に存在します。
なぜ重要か: 3つの量のうち2つがわかれば、残りの1つが決定します。スループットとレイテンシを測定すれば、占有率がわかります。占有率とスループットを測定すれば、レイテンシがわかります。この法則は堅牢です: Webリクエスト、レストランのテーブル、スーパーマーケットの行列、CPUパイプラインに、修正なしで適用できます。
3つの具体的な例:
- Webサービスが200 req/sの処理を行い、平均レイテンシは50 ms(0.05 s)です。L = 200 × 0.05 = 10 が進行中です。
- コーヒーショップが1時間に60人の顧客を対応し、平均滞在時間は15分(0.25 h)です。L = 60 × 0.25 = 15人の顧客が店内にいます。
- バックエンドプールが1500 req/sの処理を行い、平均レイテンシは200 ms(0.2 s)です。L = 1500 × 0.2 = 300 が進行中です。
サイズ設定への影響: 各ティアのワーカー数 / スレッド数 / 接続数は、対応するために少なくとも L 以上でなければなりません。それ未満の場合、キューが成長します。
なぜ利用率が80%を超えるとレイテンシが急増するのか
運用における最も重要な曲線
x軸に利用率(0%から100%)、y軸に平均待ち時間をプロットします。その形状は、キャパシティプランニングにおいて最も重要な曲線のひとつです。
M/M/1行列モデル: ポアソン到着(ランダム)と指数分布のサービス時間(ランダム)を持つシステムにおける平均待ち時間は、以下のようになります。
W_q = ρ / (μ × (1 - ρ))
ここで、ρ は利用率(0から1)、μ はサービスレートです。
曲線の形状:
- ρ = 0.5(利用率50%)の場合、待ち時間は短くなります(1サービス時間分)。
- ρ = 0.7(70%利用率)の場合、待ち時間は約2.3サービス時間です。
- ρ = 0.8(80%利用率)の場合、待ち時間は約4サービス時間です。
- ρ = 0.9(90%利用率)の場合、待ち時間は約9サービス時間です。
- ρ = 0.95(95%利用率)の場合、待ち時間は約19サービス時間です。
- ρ = 1.0(100%利用率)の場合、待ち時間は無限大です。
膝(曲がり角): 80%利用率付近で、曲線は急激に曲がります。膝より下では容量に余裕があり、膝より上では、利用率の上昇率よりもレイテンシがより速く上昇します。
実践的な読み方: 定常状態では70%の利用率を目標とし、決して100%にしないでください。30%の「ヘッドルーム(余裕)」は浪費ではなく、有界なレイテンシのための対価です。
膝点(ニーポイント)をまたぐスケーリング
2つのシナリオ:
シナリオA: 10レプリカがCPU使用率60%で稼働中。レイテンシp99 = 100 ms。
シナリオB: トラフィック増加により、同じフロートがCPU使用率90%で稼働中。p99 = 600 ms。
フロートもコードも同じで、変化したのは使用率のみ。
サイズとトリガーを統合する
統合
これにより、リトルの法則を長方形として適用し、キューイングカーブとその膝点を読み取り、両方を容量決定に結びつけることができます。
両方を適用する。
バックエンド層は2,000 req/sを処理しており、レプリカあたりの平均レイテンシは50 ms、CPU使用率70%での容量は80 req/sです。サージ係数は2倍であり、3台のレプリカが同時に障害を起こしても耐えられるようにしたいと考えています。
補足ノート
補足ノート
この幾何学に関するレッスンでは、ステートレスな水平スケーリングのメインレッスンを定量的な幾何学として再構成しています。
次のコンパニオンである geometry_of_ingress_egress_separation では、ネットワーク境界の分離を、分離によって除去されるカット頂点を持つ二部グラフとして再構成しています。
お疲れさまでした。