スケーラビリティ 101
小さな Rails アプリを100万ユーザーに耐えるシステムに育てる方法
プロローグ — 嬉しい悲鳴
ユーザー急増で落ちるアプリ。CTOのアキラがスケーリングの旅を始める
パフォーマンスの測り方 — ボトルネックを見つける
N+1クエリ、rack-mini-profiler、Bulletで真の問題を数字で把握する
データベース最適化 — インデックスとクエリ改善
EXPLAIN ANALYZEでボトルネックを可視化し、カバリングインデックスで劇的に高速化する
読み取りスケーリング — レプリカとキャッシュ
Aurora Read ReplicaとRedisで読み取りを分散させ、DBへの負荷を劇的に下げる
書き込みスケーリング — シャーディングとパーティショニング
垂直パーティショニングとシャーディングで書き込みボトルネックを突破する
アプリケーションスケーリング — 水平展開
ECS Auto ScalingとALBでRailsを複数台に展開し、トラフィックスパイクに自動対応する
非同期処理 — ピークを平準化する
SidekiqとSQSでバックグラウンドジョブを活用し、ユーザー体験を損なわずに重い処理を捌く
CDNと静的アセット — エッジで配信する
CloudFrontとS3でメディアファイルをエッジ配信し、世界中のユーザーに高速体験を届ける
データベースの選択 — RDB以外の選択肢
DynamoDB、ElastiCache、OpenSearchでポリグロット・パーシステンスを実践する
キューとストリーミング — リアルタイムデータ処理
KinesisとEventBridgeでイベント駆動アーキテクチャを構築し、大量データをリアルタイム処理する
グローバルスケーリング — 世界展開する
マルチリージョン構成とGlobal Acceleratorで世界中のユーザーに低遅延体験を届ける
エピローグ — スケーリングの判断基準
早すぎる最適化の罠、コストとの天秤、そしてアキラが学んだスケーリングの哲学