目次を表示する

システム設計とCS概念

プロローグ ── 「動くコード」から「壊れないシステム」へ

プロローグ ── 「動くコード」から「壊れないシステム」へ

シリーズ構成(全26章)

Part 1 — 基盤コンポーネント Ch.1 プロローグ(本章) / Ch.2 短縮URLサービス / Ch.3 オブジェクトストレージ(S3) / Ch.4 分散データベース(AlloyDB/Spanner) / Ch.5 分散キャッシュ(Redis) / Ch.6 メッセージキュー(Kafka) / Ch.7 レートリミッター / Ch.8 全文検索エンジン

Part 2 — アプリケーション設計パターン Ch.10 ニュースフィード / Ch.11 位置情報・ライドシェア / Ch.12 動画配信 / Ch.13 分散トランザクション・決済 / Ch.14 オートコンプリート

Part 3 — グラフデータの応用 Ch.15 ソーシャルグラフ / Ch.16 経路探索(Google Maps) / Ch.17 不正検知 & レコメンデーション

Part 4 — インフラ・信頼性 Ch.18 分散ロック / Ch.19 ロードバランサー / Ch.20 サービスメッシュ / Ch.21 時系列DB / Ch.22 チャット・メッセージング / Ch.23 通知システム / Ch.24 Web クローラー / Ch.25 Observability / Ch.26 Chaos Engineering

Ch.9 エピローグ


シリーズ概観 — CS概念とシステム設計の対応マップ

この記事で何を扱うか

「なぜ S3 はあれだけの規模で落ちないのか」──そんな疑問を持ったことはないだろうか。

単純な答えは「サーバーをたくさん用意しているから」だ。しかしその先が面白い。たくさんのサーバーをどう協調させ、どうデータを分散させ、どう障害を隔離するか。そこには、大学で学んだ(あるいは学ばなかった)Computer Science の概念が、驚くほど整然と応用されている。

このシリーズでは、以下の問いに向き合う。

  • 短縮URLサービスを設計するとき、どのハッシュアルゴリズムを選ぶべきか。なぜ UUID ではなく Base62 なのか
  • S3 が 1 日に何兆リクエストをさばけるのは、内部でどんな仕組みが働いているからか
  • AlloyDB がダウンタイムなしでノードを追加・更新できるのは、どんな設計思想の上に立っているか
  • Redis がキャッシュとして動く裏で、どうやってデータ整合性と高速性を両立しているか
  • Kafka が「絶対に落とさない」メッセージキューとして機能するために何をしているか

これらはすべて「技術面接の課題」として頻出するが、それ以上にソフトウェアエンジニアとしての設計力を鍛えるための最良の題材でもある。


対象読者

対象:実務経験2〜5年のバックエンドエンジニア
      技術面接(システム設計問題)の準備をしている方
      「動くコードは書ける、でも大規模設計はわからない」という方
難易度:★★★★☆
読了時間:約4〜5時間(全章通読時)

各章は独立して読める。興味のある技術から入っても理解できるよう構成した。


なぜ今、CS基礎がもう一度重要なのか

AI コーディングツールの台頭で、「コードを書く」行為のハードルは劇的に下がった。しかし「何を作るかを定義し、どんな制約のもとで設計するか判断する」能力は、AI には代替できていない。

システム設計の問いは、本質的にトレードオフの問いだ。

一貫性 vs. 可用性(CAP定理)
レイテンシ vs. スループット
正規化 vs. 非正規化
強整合性 vs. 結果整合性

これらのトレードオフを理解するには、背景にある CS の概念──ハッシング、分散合意、レプリケーション、インデックス構造──を腹落ちさせている必要がある。

面接官が「短縮URLを設計してください」と聞くとき、コードの品質ではなくこのトレードオフ認識力を見ている。


シリーズを通した読み方

各章は以下の共通構造で書かれている。

1. 問題設定(何を解くのか)
2. 素朴な解法とその限界
3. CS概念の適用(なぜその設計になるのか)
4. 実装の詳細(具体的にどう動くのか)
5. 実際のサービスでの事例(S3・Kafka・Redis など)
6. チューニングと注意点

「なぜそうなるのか」の理由を丁寧に追う。「こう実装すればいい」という結論だけでなく、そこに至るまでの思考のプロセスを追体験できるよう書いた。


CS 概念との対応マップ

このシリーズで扱う主な CS 概念を先に整理しておく。

mindmap
  root((システム設計))
    データ構造・アルゴリズム
      ハッシュ関数
      一貫性ハッシュ
      転置インデックス
      LSM-Tree / B-Tree
    分散システム
      CAP定理
      レプリケーション
      シャーディング
      分散合意(Paxos/Raft)
    ネットワーク・プロトコル
      TCP/HTTP
      gRPC
      CDN
    並行性・同時実行制御
      MVCC
      ロック vs. 楽観的制御
      イベントループ
    信頼性工学
      冗長化
      サーキットブレーカー
      バックプレッシャー

各章でこのマップのどの部分を扱うか、冒頭で明示する。


では、最も取っつきやすいテーマから始めよう。「短縮URLサービス」だ。