SDN
← 演習一覧へ

AWS で数百万ユーザーへスケールするシステムを設計せよ

課題

1人のユーザーしかいない状態(1台のサーバーに全部入っている)から、数千万ユーザーが使う規模まで、システムを段階的に進化させる。各段階で『何が最初に詰まるか(ボトルネック)』を見つけ、それを1つずつ解消していく。この演習は他の7問の集大成で、『スケールの考え方そのもの』を学ぶのが目的です。一気に最終形を描くのではなく、必要になってから足すのが鉄則。

制約・前提
  • 1人のユーザー → 数千万ユーザーへ段階的に成長
  • 最終的にユーザーは10M(1000万)人
  • 書き込みは1B(10億)/月、読み取りは100B(1000億)/月
  • 1書き込みあたり1 KB
  • read:write は約100:1 (read-heavy、多くのサービスがそうである)
  • 各段階でボトルネックを特定し対処、常にBenchmark/Load Test → Profile → 対処 → 反復
主要数値
概算(back-of-the-envelope)の出発点。
成長1 user → 数千万 users
最終 read req/s40,000 req/s
最終 write req/s400 write/s
read:write比約100:1 (read-heavy)
1書き込みサイズ1 KB
スケールの鉄則Benchmark → Profile → 対処 → 反復
主要数値の可視化

read : write 比

read : write = 100:1

最終形の操作別 req/s(対数軸)

readwrite

read-heavy (100:1) 1ユーザーから数千万へ。最終的に read 40,000/s vs write 400/s。Benchmark→Profile→対処→反復でread側を水平スケール。

まず自分で設計を考えてから、1ステップずつ答え合わせをしましょう。

Step 1: 要件・ユースケース(まだ伏せられています)

考えてみよう(面接官の追加質問)
  • 『single box』のまま粘れるのはおおよそ何ユーザー/何req/sまでか? いつ分離に踏み切ると判断する?
  • Webサーバーをstatelessにするためにsessionを外出しした。もしsessionストア(Cache)が落ちたら全ユーザーがログアウトする。これをどう緩和する?
  • Master-Slave構成でmasterが落ちた瞬間、未レプリケーションのwriteは失われうる。どこまで許容し、どう減らす?
  • write 400/sが単一masterに厳しくなったとき、Sharding と NoSQL移行のどちらを先に選ぶ? その判断基準は?
  • 各スケール段階を『いつ実行するか』をAutoscalingのように自動化できるか? できない判断(=人が決めるべき判断)はどれか?