システム設計とCS概念

短縮URLから分散トランザクションまで、大規模システムの設計問題を通じてCS基礎概念の応用を学ぶ。

システム設計とCS概念

短縮URLから分散トランザクションまで、大規模システムの設計問題を通じてCS基礎概念の応用を学ぶ。

目次

  1. プロローグ ── 「動くコード」から「壊れないシステム」へ ![シリーズ概観 — CS概念とシステム設計の対応マップ](images/ch01_overview.png)
  2. 短縮URLサービス ── ハッシュ・一意性・スケール ![短縮URLサービス — ID生成・エンコード・キャッシュ戦略](images/ch02_url_shortener.png)
  3. オブジェクトストレージ(S3)── 大規模トラフィックの捌き方 この章で何ができるようになるか:S3 が「落ちない」「遅くならない」ために使っている主要な設計技法を説明できるようになる。大規模オブジェクトストレージを自分で設計する際の考慮点を把握できる。
  4. 分散データベース(AlloyDB / Spanner) ── ゼロダウンタイムとレプリケーション この章で何ができるようになるか:データベースのゼロダウンタイム更新・フェイルオーバーがどういう仕組みで実現されているか、強整合性のまま複数リージョンに分散する際のトレードオフを説明できるようになる。
  5. 分散キャッシュ(Redis)── キャッシュ戦略と整合性のトレードオフ ![分散キャッシュ戦略 — Cache-Aside / Write-Through / Write-Back](images/ch05_redis.png)
  6. メッセージキュー(Kafka)── 耐久性とスループットの両立 ![Kafka内部構造 — 追記ログ・ゼロコピー・パーティション](images/ch06_kafka.png)
  7. レートリミッター ── アルゴリズムと分散実装 ![レートリミットアルゴリズム — トークンバケット・スライディングウィンドウ](images/ch07_rate_limiter.png)
  8. 全文検索エンジン ── 転置インデックスとランキング ![検索エンジン内部 — 転置インデックス・BM25・ベクトル検索](images/ch08_search.png)
  9. エピローグ ── システム設計の「思考法」を身につける ![シリーズ横断パターン — 事前計算/整合性/状態配置/障害分離](images/ch09_epilogue_overview.png)
  10. ニュースフィード(Twitter/Instagram)── Fan-out とセレブ問題 この章で何ができるようになるか:「投稿が自分のフォロワー全員のタイムラインに届く」という操作の背後にある2つの対立するアーキテクチャを説明できるようになる。セレブリティ問題がなぜ起き、どう解決されているかを理解できる。
  11. 位置情報・ライドシェア(Uber)── GeoHash と近傍探索 ![位置情報サービス — GeoHash・Quadtree・WebSocket](images/ch11_location.png)
  12. 動画配信(YouTube/Netflix)── エンコードパイプラインと適応ビットレート ![動画配信パイプライン — DAGエンコード・ABR・CDN](images/ch12_video.png)
  13. 分散トランザクション・決済(Stripe)── Saga パターンと冪等性 ![決済と分散トランザクション — Saga・冪等性・Outbox](images/ch13_payment.png)
  14. オートコンプリート ── Trie・Count-Min Sketch・HyperLogLog ![オートコンプリート — Trie・Count-Min Sketch・HyperLogLog](images/ch14_autocomplete.png)
  15. ソーシャルグラフ(Facebook/LinkedIn)── 6次の隔たりとグラフDB ![ソーシャルグラフ — 双方向BFS・グラフDB・友達推薦](images/ch15_social_graph.png)
  16. 経路探索(Google Maps)── Dijkstra から Contraction Hierarchies へ ![経路探索 — Dijkstra→A*→Contraction Hierarchies](images/ch16_routing.png)
  17. 不正検知 & レコメンデーション ── グラフで「つながり」を武器にする この章で何ができるようになるか:グラフ構造が「孤立したデータ点」では見えないパターンを可視化することを理解できる。不正検知とレコメンデーションという一見異なる問題が、どちらも「グラフ上の伝播・影響力」として統一的に解けることを説明できる。
  18. 分散ロック / リーダー選出 ── 「2人のリーダー」を防ぐ この章で何ができるようになるか:分散システムで「同時に1つだけ」を保証する仕組みの設計と、その限界を説明できるようになる。Martin Kleppmann の Redlock 批判を理解し、安全な分散ロックの設計判断ができるようになる。
  19. ロードバランサー ── L4 / L7・ヘルスチェック・サーキットブレーカー この章で何ができるようになるか:L4 と L7 ロードバランサーの違いを動作原理から説明でき、トラフィックパターンに応じた負荷分散アルゴリズムを選択できるようになる。サーキットブレーカーの状態遷移を理解できる。
  20. サービスメッシュ / サービスディスカバリ ── マイクロサービスの通信制御 ![サービスメッシュ — サイドカー・ディスカバリ・Gossip](images/ch20_service_mesh.png)
  21. 時系列データベース(Prometheus/InfluxDB)── 書き込み最適化と圧縮 ![時系列DB — Gorilla圧縮・プル/プッシュ・ダウンサンプリング](images/ch21_tsdb.png)
  22. チャット / リアルタイムメッセージング(WhatsApp/Slack)── 順序保証とE2E暗号化 ![チャットシステム — WebSocket・シーケンス順序・E2E暗号化](images/ch22_chat.png)
  23. 通知システム(FCM/APNs)── 配信保証と優先度制御 ![通知システム — 優先度キュー・重複排除・集約](images/ch23_notification.png)
  24. Web クローラー ── URL Frontier・Politeness・コンテンツ重複検知 ![Webクローラー — URL Frontier・Politeness・SimHash](images/ch24_crawler.png)
  25. Observability(分散トレーシング)── 「遅いのはどこ」を追う この章で何ができるようになるか:マイクロサービス環境で「1つのリクエストがどのサービスをどう通過し、どこで遅くなったか」を追跡するシステムの設計を説明できるようになる。
  26. Chaos Engineering ── 本番で障害を「わざと」起こす この章で何ができるようになるか:「本番環境で意図的に障害を起こす」ことがなぜ信頼性向上につながるのかを説明できるようになる。Chaos Engineering の原則と、安全に実施するためのフレームワークを理解できる。