負荷と安全余裕から必要なサーバー台数を計算
必要サーバー台数計算ツールは、トラフィック予測を水平スケーリングの具体的な目標に変換します。処理対象の最大リクエストレート、サーバー1台の実測処理能力、安全余裕として確保する割合をご入力ください。各サーバーの利用可能能力から余裕分を差し引き、目標負荷をその値で割って切り上げます。さらに、プロビジョニング済み能力、利用可能能力、残余能力、想定使用率も表示するため、計画の前提を明確にご確認いただけます。
無料で実行
目標負荷と実測したサーバー能力から始めます
信頼できるサイジングには、条件をそろえた測定値が必要です。日平均ではなく、デプロイ環境が継続的に処理すべき最大レートをご入力ください。サーバー1台の能力は、本番と同じアプリケーション版、インスタンス種別、リクエスト構成、依存先、遅延目標を用いた代表的な負荷試験で測定してください。両方の値は1秒あたりのリクエスト数で指定します。サービス目標を破った場合にしか達成できない値は、利用可能能力として扱えません。目標値はゼロでも構いませんが、サーバー能力は正の値が必要です。結果は計画の基準としてお使いください。データベース、キュー、キャッシュ、接続数、外部サービス、処理の遅いリクエストが先に制約となる場合があります。負荷条件や測定結果が変わった際は、改めて計算してください。
上限に達しないよう安全余裕を確保します
安全余裕とは、各サーバーの実測能力のうち意図的に未使用にする割合です。余裕を25パーセントとすると、1秒あたり1,200リクエストを処理できるサーバーは、計算上900リクエスト分として扱われます。この予備能力は、突発的な増加、予測誤差、新規インスタンスの起動時間を吸収し、飽和付近で遅延が急増する危険も抑えます。適切な割合は運用特性によって異なります。安定した社内サービスで起動が速ければ小さめにできる一方、変動の大きい公開 API、ウォームアップが遅い構成、厳しい遅延目標では大きめが適切です。ゼロ以上100未満をご指定ください。余裕を適用してから除算し、台数は必ず切り上げます。複数の割合を比較すると、耐障害性と費用の関係を関係者へ明確に示せます。
計算結果をプロビジョニング判断に活用します
主な結果は、安全余裕を反映した能力で目標を満たす同一サーバーの最小整数台数です。1台あたりの利用可能能力は、実測値から予備分を除いた値です。プロビジョニング済み能力はフリート全体の公称処理能力を、利用可能なプロビジョニング済み能力は計画上使用できる処理能力を示します。残余能力は台数を切り上げることで生じます。使用率は目標負荷を公称総能力と比較した値です。これらを自動スケーリングの最小値、固定フリート、予算の根拠として記録し、その後に負荷分散や障害を含めて構成を試験してください。高可用性、ゾーン配置、保守、レプリカ、サーバー喪失への対応には追加台数が必要な場合があります。本ツールはその冗長性を自動追加しないため、設計要件を別途適用し、性能やインスタンスが変われば再計算してください。
活用例
自動スケーリングの基準を設定
予測ピークと実測処理能力から、安全余裕を含む説明可能な最小インスタンス数を算出します。
インスタンス種別を比較
同じ目標負荷を複数のサーバー種別の実測能力に適用し、プロビジョニング前に台数を比較します。
キャパシティレビューを記録
目標、測定値、安全余裕、使用率、残余能力を保存し、スケーリング判断の根拠にします。
よくある質問
必要なサーバー台数はどのように計算しますか?
1台の利用可能能力は、サーバー能力に1から安全余裕率を引いた値を掛けて求めます。目標負荷をその値で割り、整数へ切り上げます。
サーバー1台の能力には何を指定すればよいですか?
本番に近い構成で、遅延とエラー率の目標を満たす代表的な負荷試験の継続処理能力をご指定ください。
安全余裕を設けるとサーバーが増えますか?
各サーバーに算入する能力が減るため、切り上げ後の台数が増える場合があります。予備能力は突発負荷、起動時間、予測誤差に備えます。
結果には高可用性の冗長構成も含まれますか?
含まれません。処理能力に基づく最小値のみです。ゾーン、保守、レプリカ、クォーラムなどに必要な台数は別途追加してください。
API リクエストの料金はいくらですか?
API による計算は1回 $0.002 です。同じ決定論的な計算ツールを、このページのブラウザー上では無料でご利用いただけます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev/servers-needed \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"target_request_rate":10000,"per_server_capacity":1200,"headroom_percent":25}'const res = await fetch("https://api.kit.forhosting.com/dev/servers-needed", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"target_request_rate": 10000,
"per_server_capacity": 1200,
"headroom_percent": 25
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/servers-needed",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"target_request_rate": 10000,
"per_server_capacity": 1200,
"headroom_percent": 25
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/servers-needed", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"target_request_rate":10000,"per_server_capacity":1200,"headroom_percent":25}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"target_request_rate":10000,"per_server_capacity":1200,"headroom_percent":25}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/servers-needed", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"target_request_rate": 10000,
"per_server_capacity": 1200,
"headroom_percent": 25
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.servers_needed",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |