水平スケーリング

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

インフラスケーリング

水平スケーリングとは

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

水平 vs 垂直

水平と垂直の違いを以下にまとめる。

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

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

AWS サービスのスケーリングを以下に示す。

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

Lambda の水平スケーリング

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 の水平スケーリング

DynamoDB の水平スケーリングを図で示す。

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

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

コスト比較

コスト比較を図で示す。

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

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

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

この記事は役に立ちましたか?

関連用語

関連する記事