概要
AWS S3は、膨大なスケールで動作する分散型ストレージサービス。 HDDの物理的制約を克服し、並列化とイレイジャーコーディングで高い可用性・耐久性・スループットを実現。 データ分散とロードバランシングの工夫により、ホットスポット回避と予測可能なパフォーマンスを維持。 マルチパートアップロードやバイトレンジGETなどのAPI設計で効率的なアクセスを可能に。 巨大システムゆえに、規模が大きくなるほど全体の負荷が平準化され、予測性が向上。
AWS S3の驚異的なスケール
- AWS S3 は、API経由でオブジェクトを保存・取得できる スケーラブルなマルチテナントストレージサービス
- 可用性 ・ 耐久性 が極めて高く、コストも比較的低廉
- 400兆以上のオブジェクト、 毎秒1.5億リクエスト、 ピーク時1PB/s超のトラフィック、 数千万台のHDD を運用
- スケールを支える中核は意外にも HDD(ハードディスクドライブ)
- HDDはIOPS・レイテンシーに制約があるが、「 安価な大容量」という強みを最大活用
HDDの物理的制約と進化
- HDD は物理的な動作(回転・アーム移動)が必要なため ランダムアクセスが遅い
- 30年以上 IOPSは約120で頭打ち、レイテンシーも大きな進歩なし
- 価格は60億倍安価、 容量7,200,000倍増加、 サイズ・重量も大幅減少
- シーケンシャルアクセス に最適化されており、 ログ構造 のデータストアと相性が良い
S3のストレージバックエンドとLSM
- S3の ShardStore は LSM(Log-Structured Merge Tree) ベース
- 書き込みはシーケンシャル なのでHDDの性能を最大限活用
- 読み込みはランダムアクセス が多く、HDDの弱点となる
- 平均的なランダムリードは0.5MBで約11ms、45MB/s程度が限界
並列化によるスループット向上
- S3は大規模な並列化 でHDDの制約を克服
- 1TBファイルを1台のHDDに保存すると 最大300MB/s だが、 20,000台に分散 すれば TB/s級の並列リード が可能
- これを実現するのが イレイジャーコーディング(EC)
イレイジャーコーディングの仕組み
- K個のデータシャード + M個のパリティシャード でデータを分割・冗長化
- S3では 5-of-9スキーム (5データ+4パリティ)を採用
- 最大4シャード喪失まで耐性、 1.8倍の容量オーバーヘッド で済む
- 並列リード先が9箇所 になり、ホットスポット・ボトルネックを緩和
- シャードが小さいため ヘッジリクエスト も低コストで実施可能
エンドツーエンドの並列化とAPI設計
- ユーザー側 :ファイルをチャンク分割してアップロード/ダウンロード
- クライアント側 :複数のフロントエンドサーバーへリクエスト送信
- サーバー側 :オブジェクトを複数ストレージサーバーに分散
- マルチパートアップロード で複数スレッドによる高速PUT
- バイトレンジGET で部分的な高速リード
- 大量の小さなリクエストを並列化 することで全体スループットを最大化
ロードバランシングとホットスポット回避
- データ配置はランダム化 が基本
- Power of Two Random Choices で、2つのランダムノードから負荷の少ない方を選択
- 新しいデータほどアクセス頻度が高い ため、時間とともに自然に「冷却」される
- リバランス も頻繁に実施し、空き容量やI/Oを有効活用
- 新規ラック追加時も 自動的にデータを分散
巨大システムならではの予測性
- 規模が大きいほど全体負荷が平準化 し、ピークと平均の差が縮小
- 多数の独立したワークロードが同時にバーストしないため、 総合的な負荷が予測しやすい
- マルチテナント による経済性とスムーズなオペレーション
まとめ:S3のエンジニアリングの要点
- エンドツーエンドの大規模並列化 でHDDの物理的制約を克服
- イレイジャーコーディング による効率的な冗長化と高スループット
- ランダム配置・リバランス・ホットスポット回避 の工夫
- API設計 で並列化・部分リード・マルチパートアップロードを推奨
- 巨大システムの規模の経済性 を最大限に活用
S3は、もともとバックアップや静的ファイル用のサービスとして始まったが、今や世界最大級の 汎用ストレージ基盤 へと成長。 その裏には、HDDの制約を逆手に取った 分散システム設計 と 運用ノウハウ が詰まっている。