システム設計とCS概念
短縮URLから分散トランザクションまで、大規模システムの設計問題を通じてCS基礎概念の応用を学ぶ。
システム設計とCS概念
短縮URLから分散トランザクションまで、大規模システムの設計問題を通じてCS基礎概念の応用を学ぶ。
目次
- プロローグ ── 「動くコード」から「壊れないシステム」へ 
- 短縮URLサービス ── ハッシュ・一意性・スケール 
- オブジェクトストレージ(S3)── 大規模トラフィックの捌き方 この章で何ができるようになるか:S3 が「落ちない」「遅くならない」ために使っている主要な設計技法を説明できるようになる。大規模オブジェクトストレージを自分で設計する際の考慮点を把握できる。
- 分散データベース(AlloyDB / Spanner) ── ゼロダウンタイムとレプリケーション この章で何ができるようになるか:データベースのゼロダウンタイム更新・フェイルオーバーがどういう仕組みで実現されているか、強整合性のまま複数リージョンに分散する際のトレードオフを説明できるようになる。
- 分散キャッシュ(Redis)── キャッシュ戦略と整合性のトレードオフ 
- メッセージキュー(Kafka)── 耐久性とスループットの両立 
- レートリミッター ── アルゴリズムと分散実装 
- 全文検索エンジン ── 転置インデックスとランキング 
- エピローグ ── システム設計の「思考法」を身につける 
- ニュースフィード(Twitter/Instagram)── Fan-out とセレブ問題 この章で何ができるようになるか:「投稿が自分のフォロワー全員のタイムラインに届く」という操作の背後にある2つの対立するアーキテクチャを説明できるようになる。セレブリティ問題がなぜ起き、どう解決されているかを理解できる。
- 位置情報・ライドシェア(Uber)── GeoHash と近傍探索 
- 動画配信(YouTube/Netflix)── エンコードパイプラインと適応ビットレート 
- 分散トランザクション・決済(Stripe)── Saga パターンと冪等性 
- オートコンプリート ── Trie・Count-Min Sketch・HyperLogLog 
- ソーシャルグラフ(Facebook/LinkedIn)── 6次の隔たりとグラフDB 
- 経路探索(Google Maps)── Dijkstra から Contraction Hierarchies へ 
- 不正検知 & レコメンデーション ── グラフで「つながり」を武器にする この章で何ができるようになるか:グラフ構造が「孤立したデータ点」では見えないパターンを可視化することを理解できる。不正検知とレコメンデーションという一見異なる問題が、どちらも「グラフ上の伝播・影響力」として統一的に解けることを説明できる。
- 分散ロック / リーダー選出 ── 「2人のリーダー」を防ぐ この章で何ができるようになるか:分散システムで「同時に1つだけ」を保証する仕組みの設計と、その限界を説明できるようになる。Martin Kleppmann の Redlock 批判を理解し、安全な分散ロックの設計判断ができるようになる。
- ロードバランサー ── L4 / L7・ヘルスチェック・サーキットブレーカー この章で何ができるようになるか:L4 と L7 ロードバランサーの違いを動作原理から説明でき、トラフィックパターンに応じた負荷分散アルゴリズムを選択できるようになる。サーキットブレーカーの状態遷移を理解できる。
- サービスメッシュ / サービスディスカバリ ── マイクロサービスの通信制御 
- 時系列データベース(Prometheus/InfluxDB)── 書き込み最適化と圧縮 
- チャット / リアルタイムメッセージング(WhatsApp/Slack)── 順序保証とE2E暗号化 
- 通知システム(FCM/APNs)── 配信保証と優先度制御 
- Web クローラー ── URL Frontier・Politeness・コンテンツ重複検知 
- Observability(分散トレーシング)── 「遅いのはどこ」を追う この章で何ができるようになるか:マイクロサービス環境で「1つのリクエストがどのサービスをどう通過し、どこで遅くなったか」を追跡するシステムの設計を説明できるようになる。
- Chaos Engineering ── 本番で障害を「わざと」起こす この章で何ができるようになるか:「本番環境で意図的に障害を起こす」ことがなぜ信頼性向上につながるのかを説明できるようになる。Chaos Engineering の原則と、安全に実施するためのフレームワークを理解できる。