🐱 うさねこ教室 Python と可観測性の教室

キャパシティプランニング

🐱 この章の目次

キャパシティプランニングとは

キャパシティプランニング(capacity planning) は、将来のワークロードに対して十分なリソースを確保するための計画プロセスです。 『インフラ大全』第 3 章では、需要予測→現状分析→調達計画→検証のサイクルとして体系化されています。 過剰プロビジョニングはコスト増、過少プロビジョニングは障害を招くため、適切なバランスが求められます。

負荷試験で限界を知る

負荷試験(load testing) は、システムが処理できるリクエスト数やスループットの上限を実測する手法です。 段階的にリクエストレートを上げ、レイテンシやエラー率が急増するポイント(膝の点)を特定します。 代表的なツールとして k6、Locust、wrk などがあります。

# k6 による負荷試験の例
k6 run --vus 50 --duration 60s load-test.js

負荷試験の結果から、1 インスタンスあたりの処理能力を見積もり、必要台数を算出します。

垂直スケーリング vs 水平スケーリング

垂直スケーリング(vertical scaling) は、単一ノードのスペックを上げる方法です。 実装が単純ですが、物理的な上限があり、単一障害点になりやすい欠点があります。

水平スケーリング(horizontal scaling) は、同じ役割のノードを増やす方法です。 理論上は無限にスケールできますが、状態の共有やデータの一貫性に課題が生じます。

観点垂直水平
上限ハードウェアの物理限界理論上なし
複雑さ低い高い(状態管理)
コスト曲線指数的に高騰ほぼ線形
可用性SPOF リスク冗長性あり

実務ではまず垂直スケーリングで対応し、限界が見えた段階で水平スケーリングへ移行する戦略が一般的です。

オートスケーリングパターン

オートスケーリング(auto-scaling) は、メトリクス(CPU 使用率、リクエスト数など)に基づいてインスタンス数を自動調整する仕組みです。 リアクティブ型はメトリクスの閾値超過で発火し、プレディクティブ型は過去の傾向から事前にスケールアウトします。 スケールイン時にはコネクションドレインを行い、処理中のリクエストを安全に完了させる必要があります。

参考文献

  • 『インフラ大全』第 3 章 — キャパシティプランニングのプロセス