水平スケーリング

サーバーの台数を増やして処理能力を向上させるスケーリング手法

インフラスケーリング

水平スケーリングとは

水平スケーリング (Scale Out) は、サーバーの台数を増やして処理能力を向上させるスケーリング手法である。垂直スケーリング (Scale Up: サーバーのスペックを上げる) と対比される。

水平 vs 垂直

観点 水平 (Scale Out) 垂直 (Scale Up)
方法 台数を増やす スペックを上げる
上限 理論上無限 ハードウェアの上限
コスト 台数に比例 指数関数的に増加
可用性 1 台が落ちても継続 単一障害点
複雑さ 分散システムの課題 シンプル

AWS サービスのスケーリング

サービス スケーリング方式
Lambda 自動水平スケーリング (同時実行数)
DynamoDB 自動水平スケーリング (パーティション)
ECS Auto Scaling (タスク数)
EC2 Auto Scaling Group
Aurora リードレプリカの追加

Lambda の水平スケーリング

リクエスト 1 → Lambda インスタンス A
リクエスト 2 → Lambda インスタンス B
リクエスト 3 → Lambda インスタンス C
→ リクエスト数に応じて自動的にインスタンスが増加
→ 設定不要、AWS が自動管理

水平スケーリングの前提条件

水平スケーリングにはいくつかの前提がある。プロセス内に状態を持たないステートレス設計、セッションやファイルを外部ストレージに保存する共有ストレージ、同じリクエストを複数回処理しても同じ結果になる冪等性、リクエストを均等に分散するロードバランシングだ。

ステートレス設計

// ❌ ステートフル: プロセス内にセッションを保存
const sessions = new Map(); // Lambda インスタンスごとに異なる

// ✅ ステートレス: 外部ストレージに保存
const session = await db.get({ TableName: 'sessions', Key: { id: sessionId } });

DynamoDB の水平スケーリング

パーティションキー: userId
  → ハッシュ値でパーティションに分散
  → パーティション数が自動的に増加
  → 各パーティションが独立して処理

❌ ホットパーティション: 1 つのキーにアクセスが集中
✅ 均等な分散: ユーザー ID のように分散するキー

コスト比較

垂直: t3.micro → t3.xlarge → t3.2xlarge
  $8/月 → $134/月 → $268/月 (指数的に増加)

水平: t3.micro × N 台
  $8/月 × 2 = $16/月, × 4 = $32/月 (線形に増加)

理論と実装の両面から学ぶなら関連書籍が参考になる。

関連用語