水平スケーリング

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

インフラスケーリング

水平スケーリングとは

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

水平 vs 垂直

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

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

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

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

サービス スケーリング方式
Lambda 自動水平スケーリング (同時実行数)
DynamoDB 自動水平スケーリング (パーティション)
ECS Auto Scaling (タスク数)
EC2 Auto 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/月 (線形に増加)

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

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

関連用語

関連する記事