容量見積もりツール
サーバーは実際に何台必要なのでしょうか? 雰囲気ではなく算術で答えましょう。リクエストレート、各リクエストが消費する CPU 時間、ユーザーが目にする応答時間を見積もりツールに渡すと、トラフィックが占有するコア数、用意すべきサーバーの台数(冗長性ポリシー適用済み)、接続プールが耐えなければならない同時処理数、そして同じサービスが 2 倍、5 倍、10 倍のトラフィックになったときの姿が返ってきます。
- 必要なコア数
- トラフィック向けサーバー
- 冗長性込み
- 処理中のリクエスト(Little's law)
- 推定出口トラフィック
成長表
| トラフィック | リクエスト/秒 | 必要なコア数 | サーバー台数(冗長性込み) |
|---|
数式を平易な言葉で
コア数。リクエストレートに各リクエストが消費する CPU 秒数を掛けます。それがトラフィックが 100% で占有するコア数です。次に目標利用率で割ります。70% の場合、用意する各コアは計画上 0.7 コアとしてしか数えられず、残りの 0.3 はトラフィックが揺れたときにキューを短く保つ余裕です。必要なコア数 = リクエスト/秒 × リクエストごとの CPU 秒数 ÷ 目標利用率。
サーバー台数。コア数をサーバー 1 台あたりのコア数で割り、切り上げます。0.4 台のサーバーというものは存在せず、切り捨てることは、平均では機能する計画がピークで失敗する方法そのものです。冗長性はその後に適用されます。N+1 は切り上げた台数に予備 1 台を加え、2N はフリート全体を 2 倍にします。同時処理数は Little's law から来る別の数字です。処理中のリクエスト = リクエスト/秒 × 秒単位の応答時間。これはスレッドプール、データベース接続、ファイル記述子の規模を決めます。これらは CPU がまだ暇をしている間にサービスが実際にぶつかる限界です。応答サイズを与えた場合の出口トラフィックは、リクエスト/秒 × サイズ × 8 で、ネットワーク料金を構成するビット数です。関連記事サーバーは実際に何台必要かでは、各入力の出所と、ベンダーのベンチマークがこれらすべてと食い違う理由を説明しています。
計画の姉妹ツール:SLA エラーバジェット計算ツールは、この容量が守る可用性目標を分数に変換し、バックアップ保持計算ツールは同じシステムのストレージ側の規模を算定します。
よくある質問
なぜ 100% ではなく 70% の利用率で計画するのですか?
キューは飽和した時点ではなく、飽和する前に爆発するからです。平均 95% 忙しい CPU は、トラフィックが揺れるたびにキューが際限なく伸びる CPU です。そしてトラフィックは常に揺れます。利用率の目標は、ピーク、デプロイ、リトライ、そして 1 つの遅い依存先を吸収する余裕です。70% はレイテンシに敏感なサービスの業界標準であり、遅延を許容できるバッチワーカーはもっと熱く動かせ、ユーザー向けでスパイクのあるものは何でももっと冷たく動かすべきです。
コア数と処理中のリクエスト数の違いは何ですか?
答える質問が違います。コア数は CPU サービス時間から来ます。各リクエストがどれだけのプロセッサを消費するかです。処理中のリクエスト数は Little's law から来ます。レートに応答時間を掛けたもので、測るのはプロセッサ負荷ではなく同時処理数、つまり接続、スレッド、開いたまま保持されるメモリです。下流の呼び出しが遅いサービスは、2 コアを使いながら 500 件のリクエストを処理中に保持でき、CPU が尽きるずっと前に接続プールが尽きます。両方を規模算定してください。無視した方が障害になります。
負荷テストでは 1 台のサーバーが 1 秒に 2,000 リクエストを処理すると出ました。なぜこの見積もりツールは違うのですか?
負荷テストは通常、暖まって安定し、キャッシュが熱いサービスが、余裕のあるクライアントから 1 種類のリクエスト形状に答える様子を測ります。本番ではコールドスタート、TLS ハンドシェイク、リトライ、遅いリクエストのロングテール、うるさい隣人、そして 10 分間容量を半分にするデプロイが加わります。この見積もりツールは意図的に保守的です。平均 CPU 時間、利用率の上限、サーバー単位の切り上げ、冗長性の追加。負荷テストは可能性の上限として、この数字は用意すべき下限として扱ってください。計画にとっての真実は下限です。
N+1 は実際に何から守ってくれるのですか?
1 回の障害からです。死んだホスト、ローテーションから外された悪いデプロイ、単一インスタンスを持っていく可用性ゾーンのイベント。N+1 があれば、残りの N 台のサーバーでも目標を満たします。まずトラフィックから N を規模算定し、その後に予備を加える意味はそこにあります。2N は別の約束です。通常はリージョンをまたいだ 2 つの完全なコピーで、コピー全体を失っても生き残らなければならないサービスのためのものです。料金は 2 倍になるため、その不在が見出しで測られるサービスのために買われます。
リクエストごとの CPU サービス時間はどうやって得ますか?
推測ではなく測定してください。稼働中のサービスでは、ある時間枠で消費された CPU 秒数の合計を、同じ時間枠で処理したリクエスト数で割ります。アプリケーションパフォーマンス監視ツールはリクエストごとの CPU として直接報告します。Linux では /proc のプロセス CPU 時間やコンテナのメトリクスから導出できます。全日の平均ではなく、現実的な最も忙しい 1 時間の数字を使ってください。平均から計画した容量は、それを買った目的であるピークでこそ失敗します。