シェアードナッシング

各ノードが独立したリソースを持ち、共有状態を排除するアーキテクチャ

アーキテクチャスケーリング

シェアードナッシングとは

シェアードナッシング (Shared-Nothing Architecture) は、各ノードが独立した CPU、メモリ、ストレージを持ち、ノード間で状態を共有しないアーキテクチャである。ノードの追加だけで水平スケールでき、単一障害点がない。

シェアードナッシング vs シェアードエブリシング

観点 シェアードナッシング シェアードエブリシング
状態の共有 なし 共有ストレージ/メモリ
スケーラビリティ 高い (ノード追加) 限定的 (共有リソースがボトルネック)
障害の影響 局所的 全体に波及
Lambda, DynamoDB 共有 DB の RDS

Lambda はシェアードナッシング

リクエスト 1 → Lambda インスタンス A (独立したメモリ)
リクエスト 2 → Lambda インスタンス B (独立したメモリ)
リクエスト 3 → Lambda インスタンス C (独立したメモリ)

各 Lambda インスタンスは独立した実行環境を持ち、メモリを共有しない。状態は DynamoDB や S3 に外部化する。

DynamoDB のパーティション

DynamoDB テーブル:
  パーティション A (独立したストレージ + コンピュート)
  パーティション B (独立したストレージ + コンピュート)
  パーティション C (独立したストレージ + コンピュート)

各パーティションが独立してリクエストを処理するため、パーティション数に比例してスループットがスケールする。

設計原則

アプリケーションに状態を持たないステートレス設計が基本で、状態は DB、キャッシュ、S3 に外部化する。同じリクエストを何度処理しても同じ結果になる冪等性を確保し、ノード間の依存を排除して独立性を保つ。

シェアードナッシングが難しいケース

ケース 理由 対策
セッション管理 ユーザーの状態を保持 DynamoDB or ElastiCache に外部化
ファイルアップロード ローカルディスクに保存 S3 に直接アップロード
WebSocket 接続状態を保持 API Gateway WebSocket + DynamoDB

Twelve-Factor App との関係

Twelve-Factor App の第 6 原則「プロセスはステートレス」はシェアードナッシングの実践。プロセスのメモリやファイルシステムに状態を保存せず、外部サービスに委譲する。

シェアードナッシングについては関連書籍でも詳しく扱われている。

関連用語