Skip to content
Published on

システム設計面接2025完全攻略:FAANGが聞く30問とAI時代の新パターン

Authors

1. なぜシステム設計が重要なのか

システム設計面接は、シニアエンジニア採用の核心的な関門です。2025年基準の主要統計を見れば、その重要性は明白です。

システム設計面接の現在の位置づけ

  • シニア候補の70%以上が最低1回のシステム設計ラウンドを経験します
  • 60%の質問がクラウドネイティブアーキテクチャに関連します(AWS、GCP、Azure)
  • 出題される問題の80%が核心20%の概念に集中します(パレートの法則)
  • FAANG(Meta、Apple、Amazon、Netflix、Google)基準でシステム設計は2〜3ラウンド配分されます

レベル別の期待値

レベル期待水準核心評価ポイント
L3-L4(ジュニア)基本コンポーネントの理解API設計、単一サービス設計
L5(シニア)分散システム全体設計トレードオフ分析、スケーラビリティ
L6+(スタッフ)大規模システムアーキテクチャ組織間の影響力、技術戦略

2025年の新タイプの登場

2025年には従来のシステム設計問題に加えて、新しいタイプが登場しました。

  • AI/MLシステム設計:推薦システム、LLMサービング、RAGパイプライン
  • リアルタイムシステム:30問中18問がリアルタイム処理を要求
  • コスト最適化:クラウドコストを考慮した設計が必須評価項目に追加
  • セキュリティ設計:Zero Trust、データプライバシーが基本要件

従来は「Twitterを設計してください」のようなクラシックな質問が主流でしたが、今は「リアルタイム推薦システムでモデルサービングのレイテンシを50ms以下に維持しながら、日次10億件の推論リクエストを処理するシステムを設計してください」のような複合的な質問が増えています。


2. 45分システム設計フレームワーク

面接で最も多い失敗は、すぐに設計に飛び込むことです。45分という制限時間の中で体系的にアプローチするフレームワークが必須です。

2-1. 要件の明確化(5分)

面接官に質問を投げてスコープを絞る段階です。この段階をスキップする候補者はほぼ100%不合格になります。

機能要件(Functional Requirements)

質問例:
- 「ユーザーができる核心的なアクション3つは何ですか?」
- 「読み込みと書き込みの比率はどのくらいですか?」
- 「データはどのくらい保持する必要がありますか?」

非機能要件(Non-Functional Requirements)

確認事項:
- 可用性:99.9% vs 99.99%(年間ダウンタイム8.7時間 vs 52分)
- レイテンシ:p99 < 200ms等の具体的な数値
- 一貫性:強い一貫性 vs 結果整合性
- 規模:DAU、同時接続者数、データサイズ

2-2. 封筒の裏の計算(5分)

規模を数字で把握する段階です。面接官は正確な数字よりも推定プロセスと思考力を見ています。

例:チャットシステムの規模推定

- DAU5000万人
- 1日の平均メッセージ数:40/ユーザー
- 総メッセージ:5000万 x 40 = 20億件/- QPS20/ 86,400 =23,000 QPS
- ピークQPS:平均の3=70,000 QPS
- メッセージサイズ:平均100バイト
- 日次ストレージ:20億 x 100B = 200GB/- 年間ストレージ:200GB x 365 = 73TB/

2-3. ハイレベル設計(15分)

核心コンポーネントとデータフローをダイアグラムで表現します。

典型的なハイレベルアーキテクチャ:

Client --> Load Balancer --> API Gateway
                               |
                    +----------+----------+
                    |          |          |
                Service A  Service B  Service C
                    |          |          |
                 DB (SQL)  Cache     Message Queue
                              |          |
                           DB (NoSQL)  Worker

この段階で必ず含めるべきもの:

  • クライアントとサーバー間のプロトコル(HTTP、WebSocket、gRPC)
  • データストアの選択とその根拠
  • キャッシュレイヤーの配置
  • 非同期処理が必要な部分

2-4. ディープダイブ(15分)

面接官が関心を示すコンポーネントを詳細に設計します。

ディープダイブ領域:

1. データベーススキーマ設計
   - テーブル構造、インデックス、パーティショニング戦略

2. API設計
   - エンドポイント、リクエスト/レスポンス形式、エラー処理

3. 核心アルゴリズム
   - ニュースフィード:Fan-out on write vs Fan-out on read
   - 検索:転置インデックス構造
   - 推薦:協調フィルタリング vs コンテンツベースフィルタリング

2-5. スケーラビリティ、障害処理、モニタリング(5分)

最後にシステムの堅牢性を示す段階です。

チェックリスト:
- 単一障害点(SPOF)の識別と除去
- データ複製戦略(リーダー・フォロワー、マルチリーダー)
- 障害検知と自動復旧(ヘルスチェック、サーキットブレーカー)
- モニタリング指標(レイテンシ、エラーレート、スループット)
- アラートシステム(PagerDuty、Slack連携)

3. 必ず知っておくべき核心概念10選

システム設計問題の80%をカバーする核心概念です。

3-1. 水平スケーリング vs 垂直スケーリング

垂直スケーリング(Scale Up):単一サーバーの性能を向上させる方式

  • 利点:実装が簡単、データ一貫性の維持が容易
  • 欠点:ハードウェアの限界あり、単一障害点

水平スケーリング(Scale Out):サーバー数を増やす方式

  • 利点:理論的に無限拡張可能、障害耐性
  • 欠点:分散システムの複雑性、データ一貫性の問題
垂直スケーリング:
  サーバー1台 (4 CPU, 16GB RAM) --> サーバー1台 (32 CPU, 128GB RAM)

水平スケーリング:
  サーバー1--> サーバー10台 (4 CPU, 16GB RAM) + Load Balancer

実際にはほとんどの設計で水平スケーリングを基本としますが、データベースのように垂直スケーリングが先に検討されるコンポーネントもあります。

3-2. ロードバランサー(L4 vs L7)

ロードバランサーはトラフィックを複数のサーバーに分散します。

区分L4(トランスポート層)L7(アプリケーション層)
動作基準IP、ポートURL、ヘッダー、クッキー
速度速い相対的に遅い
柔軟性低い高い(パスベースルーティング)
SSL終端不可可能
使用例内部サービス間通信APIゲートウェイ、Webサーバー
L7ロードバランサーのルーティング例:

/api/users/*  --> User Service Cluster
/api/orders/* --> Order Service Cluster
/api/search/* --> Search Service Cluster
/static/*     --> CDN Origin

3-3. キャッシング戦略

キャッシュはシステム性能の要です。主要な3つのパターンを比較します。

Cache-Aside(Lazy Loading)

読み込みリクエストフロー:
1. キャッシュでデータを検索
2. キャッシュヒット --> データを返す
3. キャッシュミス --> DBから取得 --> キャッシュに保存 --> 返す

利点:必要なデータのみキャッシュ、キャッシュ障害時はDBにフォールバック
欠点:初回リクエストは常に遅い、キャッシュとDBの不整合の可能性

Write-Through

書き込みリクエストフロー:
1. キャッシュにデータを書き込み
2. キャッシュが同期的にDBに記録
3. 完了レスポンス

利点:キャッシュとDBが常に一致
欠点:書き込みレイテンシの増加、不要なデータもキャッシュ

Write-Behind(Write-Back)

書き込みリクエストフロー:
1. キャッシュにデータを書き込み
2. 即座に完了レスポンス
3. 非同期でバッチ処理してDBに記録

利点:書き込み性能の最大化
欠点:キャッシュ障害時のデータ損失リスク

3-4. データベース(SQL vs NoSQL、シャーディング、レプリケーション)

SQL vs NoSQL選択基準

基準SQL(リレーショナル)NoSQL(非リレーショナル)
データ構造構造化データ、複雑なリレーション非構造化、柔軟なスキーマ
一貫性ACID保証結果整合性(大半)
スケーラビリティ垂直スケーリング優先水平スケーリング容易
使用例決済、在庫管理ログ、セッション、ソーシャルフィード
代表製品PostgreSQL、MySQLMongoDB、Cassandra、DynamoDB

シャーディング戦略

1. 範囲ベースシャーディング(Range-based)
   - user_id 1~100--> Shard 1
   - user_id 100~200--> Shard 2
   - 利点:範囲クエリが効率的
   - 欠点:ホットスポットの発生リスク

2. ハッシュベースシャーディング(Hash-based)
   - hash(user_id) % N --> Shard番号
   - 利点:均等分配
   - 欠点:範囲クエリが非効率、リバランシングが複雑

3. ディレクトリベースシャーディング
   - ルックアップテーブルで管理
   - 利点:柔軟なマッピング
   - 欠点:ルックアップテーブルが単一障害点

3-5. メッセージキュー(Kafka、RabbitMQ)

非同期通信の核心コンポーネントです。

特性Apache KafkaRabbitMQ
モデルログベースストリーミングメッセージブローカー
スループット毎秒数百万件毎秒数万件
メッセージ保持設定期間中保持消費後削除
順序保証パーティション内保証キュー内保証
ユースケースイベントストリーミング、ログタスクキュー、RPC
Kafkaアーキテクチャ:

Producer --> Topic (Partition 0) --> Consumer Group A
                                 --> Consumer Group B
         --> Topic (Partition 1) --> Consumer Group A
                                 --> Consumer Group B
         --> Topic (Partition 2) --> Consumer Group A
                                 --> Consumer Group B

- パーティション:並列処理単位
- Consumer Group:独立した消費
- Offset:消費位置の追跡

3-6. CDNとエッジコンピューティング

**CDN(Content Delivery Network)**は世界中のエッジサーバーにコンテンツをキャッシュします。

CDN動作原理:

ユーザー(日本) --> 日本エッジサーバー(キャッシュヒット) --> 即座にレスポンス
                                     (キャッシュミス) --> オリジンサーバー(米国) --> キャッシュ保存 --> レスポンス

Pull CDN:初回リクエスト時にオリジンから取得してキャッシュ(CloudFront、Cloudflare)
Push CDN:事前にコンテンツを配布(大容量静的ファイルに適合)

エッジコンピューティングはCDNを超えて演算もエッジで処理します。

  • Cloudflare Workers、AWS Lambda@Edge、Vercel Edge Functions
  • A/Bテスト、認証、パーソナライズをエッジで実行
  • オリジンサーバーの負荷軽減 + レイテンシの最小化

3-7. API設計(REST vs gRPC vs GraphQL)

特性RESTgRPCGraphQL
プロトコルHTTP/1.1HTTP/2HTTP
データ形式JSONProtocol BuffersJSON
型安全性低い高い(スキーマ必須)中程度(スキーマ必須)
ストリーミング制限的双方向サポートサブスクリプションサポート
ユースケース公開API内部マイクロサービスクライアント主導クエリ
REST例:
GET /api/v1/users/123
GET /api/v1/users/123/orders?page=1&limit=10

gRPC例:
service UserService {
  rpc GetUser(GetUserRequest) returns (User);
  rpc ListOrders(ListOrdersRequest) returns (stream Order);
}

GraphQL例:
query {
  user(id: "123") {
    name
    orders(first: 10) {
      id
      total
    }
  }
}

3-8. コンシステントハッシング

分散システムでノードの追加/削除時に最小限のデータのみ再分配するアルゴリズムです。

基本ハッシングの問題:
  hash(key) % N = サーバー番号
  Nが変更されるとほぼ全てのキーが再マッピングされる

コンシステントハッシング:
  - ハッシュ空間を円形(0 ~ 2^32-1)に構成
  - サーバーとキーの両方を円上に配置
  - キーは時計回りに最も近いサーバーに割り当て
  - サーバーの追加/削除時は隣接区間のみ影響

仮想ノード(Virtual Nodes):
  - 各物理サーバーを複数の仮想ノードにマッピング
  - 負荷をより均等に分配
  - サーバー性能の差に応じて仮想ノード数を調整可能

3-9. レート制限(Token Bucket、Sliding Window)

過度なトラフィックからシステムを保護する技法です。

Token Bucketアルゴリズム

動作原理:
1. 固定サイズのバケットに一定速度でトークンを追加
2. リクエストごとにトークンを1つ消費
3. トークンがなければリクエスト拒否(HTTP 429
パラメータ:
- バケットサイズ:100(瞬間最大リクエスト)
- リフィル速度:10/秒(平均処理速度)

Sliding Window Logアルゴリズム

動作原理:
1. 各リクエストのタイムスタンプをソートされたログに記録
2. 現在時刻基準でウィンドウ(例:1分)外の記録を削除
3. ウィンドウ内のリクエスト数が上限を超えたら拒否

利点:正確なウィンドウ境界処理
欠点:メモリ使用量が高い(全タイムスタンプを保存)

分散環境でのレート制限

方法1:集中型(Redisベース)
  - 全サーバーがRedisのカウンターを共有
  - 正確だがRedisがボトルネック/障害点

方法2:ローカル + 同期
  - 各サーバーでローカルカウンティング
  - 定期的に中央と同期
  - 高速だが若干の超過を許容

3-10. CAP定理と実践的トレードオフ

CAP定理:分散システムは以下の3つのうち最大2つしか同時に保証できません。

  • C(Consistency):全ノードが同じデータを見る
  • A(Availability):全リクエストにレスポンスを返す
  • P(Partition Tolerance):ネットワーク分断でも動作する

ネットワーク分断は現実で常に発生するため、実質的な選択はCP vs APです。

システム選択理由
決済システムCP金額の整合性が最優先
ソーシャルメディアフィードAP一時的な不整合よりサービス停止が致命的
在庫管理CP過剰販売の防止
DNSAP可用性が核心
チャットメッセージAP結果整合性で十分

4. 2025年出題頻度TOP 15問題

実際の面接で最も頻繁に出題される15問です。

順位問題難易度出題企業核心概念
1URL短縮サービス設計全企業共通ハッシング、DB選択、読み取り最適化
2レートリミター設計全企業共通Token Bucket、分散カウンティング
3ニュースフィードシステムMeta、TwitterFan-out、キャッシュ階層、ランキング
4チャットシステムWhatsApp、SlackWebSocket、メッセージキュー、状態管理
5動画ストリーミングプラットフォームNetflix、YouTubeCDN、適応型ビットレート、トランスコーディング
6検索オートコンプリートGoogle、AmazonTrie、ElasticSearch、プレフィックスマッチング
7位置ベースサービスUber、DoorDashGeohash、QuadTree、近接検索
8通知システム全企業共通Push/Pull、メッセージキュー、優先度
9分散キャッシュシステムAmazon、Googleコンシステントハッシング、複製、障害検知
10分散メッセージキューKafka開発チーム、LinkedInパーティショニング、ISR、コンシューマーグループ
11決済システムStripe、Toss、PayPal冪等性、Sagaパターン、複式簿記
12リアルタイムゲーミングバックエンドRiot Games、Epic状態同期、UDP、遅延補償
13推薦システムNetflix、SpotifyMLパイプライン、Feature Store
14分散ファイルシステムGoogle、MicrosoftGFS、HDFS、チャンクサーバー
15広告クリック集計システムGoogle、Metaストリーム処理、Exactly-once処理

問題別アプローチのヒント

URL短縮サービス - 最も基本的な問題ですが、深さを示すことができます。

核心設計ポイント:
1. 短縮URL生成:Base62エンコーディング vs ハッシュ(MD5/SHA256の切り詰め)
2. 衝突処理:DBユニーク制約 + リトライ vs カウンターベース
3. リダイレクション:301(永久) vs 302(一時)の選択根拠
4. キャッシュ:頻繁にアクセスされるURLをRedisにキャッシュ(80/20ルール)
5. アナリティクス:クリック数、地域、デバイス追跡

ニュースフィードシステム - Fan-out戦略が核心です。

Fan-out on Write(Pushモデル):
- 投稿時に全フォロワーのフィードに即座に記録
- 利点:読み込みが速い
- 欠点:フォロワーが多いユーザー(セレブ)の書き込みコストが高い

Fan-out on Read(Pullモデル):
- フィード閲覧時にフォロワーリストからリアルタイム集計
- 利点:書き込みコストが低い
- 欠点:読み込みが遅い

ハイブリッド(実践的な解答):
- 一般ユーザー:Pushモデル
- セレブ(フォロワー100万人以上):Pullモデル
- 両方を合わせて最終フィードを生成

チャットシステム - リアルタイム通信が核心です。

アーキテクチャ:
1. 接続管理:WebSocketサーバー + 接続状態ストア
2. メッセージ配信:11は直接配信、グループはFan-out
3. オフライン処理:メッセージキューに保存し、再接続時に配信
4. 既読確認:別サービスとして分離
5. メッセージストレージ:時系列ソートに最適化されたDB選択
   - HBase/Cassandra(ワイドカラムストア)

5. 2025年新タイプ:AI/MLシステム設計

2025年のシステム設計面接で最大の変化は、AI/ML関連問題の増加です。Google、Meta、Amazonはもちろん、スタートアップまでAIシステム設計能力を評価しています。

5-1. 推薦システムアーキテクチャ

推薦システムはAIシステム設計で最もクラシックな問題です。

推薦システム全体パイプライン:

データ収集 --> Feature Store --> モデル訓練 --> モデルレジストリ
     |                              |                |
ユーザー行動ログ              オフラインバッチ         A/Bテスト
クリック、購入、視聴         日次/週次更新      チャンピオン/チャレンジャー
     |                              |                |
     v                              v                v
リアルタイム特徴計算 --> 候補生成  -->  ランキング  -->  リランキング  -->  表示
                    (Retrieval)    (Scoring)     (Re-ranking)

核心コンポーネント:
1. Feature Store:オフライン(バッチ)+ オンライン(リアルタイム)特徴管理
2. Candidate Generation:ANN(近似最近傍)で候補1000件を選別
3. Ranking Model:候補を精密モデルでスコアリング(ディープラーニング)
4. Re-ranking:ビジネスルール、多様性、新鮮度を適用

5-2. LLMサービングシステム

大規模言語モデル(LLM)サービングは2025年最もホットなトピックです。

LLMサービングアーキテクチャ:

リクエスト --> API Gateway --> リクエストルーター --> GPUクラスター
                                  |                    |
                             トークンリミッター   モデルインスタンス(vLLM)
                             キュー管理者              |
                                  |              KV Cache管理
                             レスポンスストリーミング <--- |
                                  |
                             コスト追跡

核心最適化技法:
1. KV Cache:前のトークンのKey/Valueをキャッシュして重複計算を防止
2. Continuous Batching:動的にリクエストをバッチ処理
3. PagedAttention:メモリをページ単位で管理(vLLM)
4. 量子化:FP16 --> INT8/INT4でモデルサイズを縮小
5. Speculative Decoding:小さいモデルで草案生成後、大きいモデルで検証

オートスケーリング戦略

GPUオートスケーリングの考慮事項:
- GPUインスタンス起動時間:3-10分(CPUに比べて非常に遅い)
- 予測ベーススケーリング:時間帯別トラフィックパターンを事前学習
- キュー深度ベース:待機中のリクエスト数でスケーリングトリガー
- コスト最適化:スポットインスタンス活用 + オンデマンドフォールバック

5-3. RAG(Retrieval-Augmented Generation)パイプライン

RAGはLLMのハルシネーション(幻覚)を減らし、最新情報を提供する核心パターンです。

RAGパイプラインアーキテクチャ:

文書収集 --> チャンキング --> エンベディング生成 --> ベクトルDB保存
                                                      |
ユーザー質問 --> クエリエンベディング --> 類似度検索 --> 上位K件の文書検索
                                                          |
                                プロンプト構成 <-----------+
                                     |
                                LLM生成 --> レスポンス + 出典引用

核心設計決定:
1. チャンキング戦略:固定サイズ vs 意味ベース(段落/セクション)
2. エンベディングモデル:OpenAI Ada-002、Cohere Embed、オープンソースモデル
3. ベクトルDB:Pinecone(マネージド)、Milvus(セルフホスティング)、pgvector
4. 検索方式:純粋なベクトル検索 vs ハイブリッド(ベクトル + キーワード)
5. リランキング:Cross-encoderで検索結果を精密に再順序付け

5-4. リアルタイムMLパイプライン

リアルタイムMLパイプライン:

イベントソース --> Kafka --> Stream Processor (Flink) --> Feature計算
                                                           |
                                                      Feature Store
                                                           |
APIリクエスト --> Model Server --> 推論結果 --> ビジネスロジック
                    |
               Model Registry (MLflow)

ユースケース:
- 不正取引検知:決済イベント --> リアルタイム特徴 --> 不正スコア
- リアルタイム推薦:ユーザー行動 --> リアルタイムエンベディング更新 --> 推薦更新
- ダイナミックプライシング:需給シグナル --> 価格モデル --> 価格調整

5-5. AI安全装置設計

AIシステムの安全性は2025年の面接で必須トピックです。

AI安全装置アーキテクチャ:

ユーザー入力 --> 入力フィルタ --> LLM --> 出力フィルタ --> ユーザーレスポンス
                   |                        |
              コンテンツ分類器          ハルシネーション検知器
              プロンプトインジェクション検知   事実検証器
              PII検知/マスキング            毒性フィルタ
                   |                        |
              ブロック or 警告          修正 or ブロック

設計ポイント:
1. 多層防御:入力/処理/出力の各段階にフィルタ
2. 非同期監査:全会話ログを非同期で分析
3. 適応型ルール:新しい攻撃パターンに対する迅速なルール更新
4. ヒューマン・イン・ザ・ループ:自動化が不確実なケースに人間レビュー
5. レイテンシバジェット:安全装置が追加するレイテンシの最小化(目標:50ms以下)

6. 封筒の裏の計算チートシート

面接ですぐに活用できる核心数値です。

6-1. レイテンシ参照表

操作                           時間
---------------------------   ----------
L1キャッシュ参照                1 ns
L2キャッシュ参照                4 ns
メインメモリ(RAM)参照          100 ns
SSDランダム読み取り              100 us(マイクロ秒)
HDDシーク                      10 ms
同一データセンターネットワークRTT  0.5 ms
大陸間ネットワークRTT            150 ms

記憶のコツ:
- L1RAMより100倍速い
- SSDRAMより1000倍遅い
- HDDSSDより100倍遅い
- ネットワークはローカルI/Oより常に遅い

6-2. 容量計算公式

QPS(Queries Per Second):
  QPS = DAU * 平均リクエスト数 / 86,400
  ピークQPS = 平均QPS * 2~5(サービス特性による)

ストレージ:
  日次データ = 日次新規レコード * 平均レコードサイズ
  年間データ = 日次データ * 365
  総ストレージ = 年間データ * 保持期間(年) * レプリケーション係数(通常3
帯域幅:
  インバウンド = 書き込みQPS * 平均リクエストサイズ
  アウトバウンド = 読み込みQPS * 平均レスポンスサイズ

6-3. 規模感覚を養う

主要サービスのおおよその規模:

サービス       DAU          QPS(平均)    ストレージ
------        --------     ---------    --------
Twitter       530万         毎日数TB
Instagram     20100万        毎日数十TB
YouTube       20+        50+        毎分500時間アップロード
WhatsApp      20+        数百万       毎日100億メッセージ
Google検索    85億クエリ/10+       数百PBインデックス

2の冪乗(頻繁に使用):
- 2^10 = 1,024(約1千)
- 2^20 = 1,048,576(約100万)
- 2^30 = 1,073,741,824(約10億)
- 2^40 =1兆(1TB)

7. 学習資料TOP 5

システム設計面接準備のための最高の学習資料です。

7-1. DDIA(Designing Data-Intensive Applications)

Martin Kleppmann著。システム設計のバイブルと呼ばれる書籍です。

  • 対象:分散システムの原理を深く理解したいエンジニア
  • 強み:理論的基礎から実践的トレードオフまで体系的に解説
  • 主要内容:データモデル、ストレージエンジン、レプリケーション、パーティショニング、トランザクション、一貫性、バッチ/ストリーム処理
  • 学習のコツ:全体を通読後、面接前に核心チャプターを復習(特に5〜9章)

7-2. System Design Interview(Alex Xu)Vol.1 + Vol.2

面接に最も直接的に役立つ実践ガイドです。

  • 対象:システム設計面接を初めて準備するエンジニア
  • 強み:問題ごとの段階的な解法、豊富なダイアグラム
  • Vol.1:URL短縮、ニュースフィード、チャット、検索オートコンプリート等13問
  • Vol.2:位置サービス、ゲーミングリーダーボード、決済システム等13問

7-3. ByteByteGo(YouTube + ニュースレター)

Alex Xuが運営するビジュアル学習プラットフォームです。

  • 対象:ビジュアル学習を好むエンジニア
  • 強み:アーキテクチャダイアグラムの品質が優れている
  • コンテンツ:YouTube動画、週刊ニュースレター、オンラインコース
  • 推奨活用法:通勤時間に動画で概念を復習

7-4. Grokking the System Design Interview

Educativeプラットフォームのインタラクティブ学習コースです。

  • 対象:体系的なカリキュラムを求めるエンジニア
  • 強み:段階的な学習パス、クイズ付き
  • 構成:核心概念 + 15問の設計問題 + 用語集

7-5. Codemia(120+練習問題)

2024年に登場したシステム設計練習プラットフォームです。

  • 対象:多様な問題を解きたいエンジニア
  • 強み:120問以上、難易度別分類
  • 特徴:コミュニティソリューション比較、タイマー機能
  • 推奨活用法:週3〜4問を45分タイマーで練習

学習ロードマップ(12週間)

週次学習計画:

1-2週目:基礎概念(DDIA核心チャプター)
  - スケーラビリティ、可用性、一貫性の原理
  - データベース、キャッシュ、メッセージキューの基礎

3-4週目:フレームワーク練習(Alex Xu Vol.1  - 45分フレームワークの体得
  - 簡単な問題5問を解く

5-8週目:実践問題演習(Alex Xu Vol.2 + Codemia)
  - 中級問題10  -3-4問、タイマー使用

9-10週目:高度なトピック + AI/MLシステム
  - 分散システムの深掘り
  - LLMサービング、推薦システム

11-12週目:模擬面接
  - 同僚と模擬面接3-5  - 弱点補強の集中学習

8. 面接官が実際に評価する5つのこと

8-1. 曖昧さの中での構造化能力

面接官は意図的に曖昧な質問を投げます。「Googleドライブを設計してください」と言われてすぐにコーディングを始めると減点です。質問を投げてスコープを絞る能力が核心です。

良い明確化質問の例:
- 「ファイルのアップロードとダウンロード、どちらに注力すべきですか?」
- 「ユーザー規模はどの程度ですか?1億人レベルですか?」
- 「リアルタイム共同編集もスコープに含まれますか?」
- 「モバイルとウェブの両方をサポートする必要がありますか?」

8-2. トレードオフ分析力

「なぜAではなくBを選んだのか?」に対する明確な回答能力です。

トレードオフ分析例:

質問:「メッセージストレージとしてCassandraとMySQLのどちらを選びますか?」

良い回答の構造:
1. 要件確認:「チャットメッセージは書き込みが多く(Write-heavy)、
   時系列クエリが大半で、強い一貫性より可用性が重要です。」

2. オプション比較:
   - MySQL:ACID保証、JOIN可能、しかし水平スケーリングが難しく
     シャーディングの複雑性が高い
   - Cassandra:水平スケーリング容易、書き込み最適化、
     時系列データに適合、しかしJOIN不可

3. 結論:「我々の要件では書き込み性能と水平スケーラビリティが
   核心なのでCassandraを選択します。ユーザープロフィールのような
   リレーションが複雑なデータは別途MySQLに保存します。」

8-3. スケーリングシナリオへの対応

「ユーザーが10倍に増えたらどうしますか?」という質問への対応です。

スケーリングシナリオ対応フレームワーク:

現在の規模(100DAU):
- 単一DB、読み取りレプリカ2台、キャッシュサーバー1
10倍成長(1000DAU):
- DBシャーディング導入(ユーザーIDベース)
- キャッシュクラスター拡張(Redis Cluster)
- CDN導入(静的アセット)
- 読み取り/書き込み分離

100倍成長(1DAU):
- マルチリージョンデプロイ
- マイクロサービス分離
- イベント駆動アーキテクチャへの移行
- 専用検索エンジン(Elasticsearch)

8-4. 実際の経験に基づく判断

面接官は教科書的な回答よりも実際の経験から得られた判断を高く評価します。

  • 「以前のプロジェクトでキャッシュ無効化の問題に遭遇し...」
  • 「Redisを使用した際にメモリの限界にぶつかり、その時学んだのは...」
  • 「実際の障害時にサーキットブレーカーがどのように役立ったか...」

8-5. コミュニケーション(図 + 説明)

システム設計面接は対話です。一人で30分間説明するのではなく、面接官と一緒に設計を作り上げていく必要があります。

効果的なコミュニケーション技法:

1. ホワイトボードの活用
   - 常に図と一緒に説明
   - データフローを矢印で表示
   - コンポーネント名を明確に表記

2. チェックポイントの設定
   - 「ここまで問題なければ次に進みます」
   - 「この部分をもっと深く掘り下げましょうか?」

3. 思考プロセスの共有
   - 黙って考えるのではなく、思考プロセスを声に出して共有
   -2つのオプションがあります。A... B...

実践クイズ

学習した内容を確認しましょう。

Q1. システム設計面接の最初の5分間で最も重要なことは?

A:要件の明確化

機能要件(核心機能3つ)と非機能要件(規模、レイテンシ、可用性)を面接官に質問して設計のスコープを絞る必要があります。すぐに設計に飛び込むことが最も一般的な失敗です。

Q2. CAP定理で、ネットワーク分断が発生した時、決済システムはCPとAPのどちらを選ぶべきですか?

A:CP(一貫性 + 分断耐性)

決済システムでは金額の整合性が最優先です。一時的にサービスが利用できないこと(可用性の放棄)は、誤った金額を処理すること(一貫性の放棄)よりましです。リトライメカニズムと冪等性で可用性の低下を補います。

Q3. ニュースフィードでフォロワー100万人のセレブの投稿に適したFan-out戦略は?

A:Fan-out on Read(Pullモデル)またはハイブリッド

セレブの投稿をフォロワー100万人全員にPushすると書き込みコストが高すぎます。セレブの投稿にはPullモデル(フィード閲覧時にリアルタイム集計)を使用し、一般ユーザーにはPushモデルを使用するハイブリッドアプローチが実践的な解答です。

Q4. LLMサービングにおけるKV Cacheの役割とその重要性は?

A:前のトークンのKey/Valueテンソルをキャッシュして重複計算を防止します。

自己回帰(autoregressive)生成では、各新トークンは以前の全トークンのattentionを再計算する必要があります。KV Cacheは既に計算されたKey/Valueを保存し、新トークン生成時に以前のトークンの再計算を防止します。これにより生成速度が数倍から数十倍向上し、GPUメモリ管理が核心課題となります(PagedAttention等)。

Q5. DAU 5000万人のチャットアプリのピークQPSを封筒の裏の計算で推定してください。

A:約70,000 QPS

計算過程:

  • DAU:5000万人
  • 平均メッセージ数:40件/ユーザー/日
  • 総メッセージ:5000万 x 40 = 20億件/日
  • 平均QPS:20億 / 86,400 = 約23,000 QPS
  • ピークQPS:平均の約3倍 = 約70,000 QPS

ピーク倍率はサービス特性によって異なり、チャットアプリは夕方の時間帯に集中するため2〜5倍の範囲が一般的です。


参考資料

書籍

  1. Martin Kleppmann, Designing Data-Intensive Applications (O'Reilly, 2017)
  2. Alex Xu, System Design Interview: An Insider's Guide Volume 1 (2020)
  3. Alex Xu, System Design Interview: An Insider's Guide Volume 2 (2022)
  4. Maheshwari, Acing the System Design Interview (Manning, 2024)
  5. Gaurav Sen, System Design Simplified (2023)

オンラインコース・プラットフォーム

  1. Educative - Grokking the System Design Interview
  2. ByteByteGo - System Design Course (bytebytego.com)
  3. Codemia - 120+ System Design Practice Problems (codemia.dev)
  4. Exponent - System Design Interview Course (tryexponent.com)
  5. Donnemartin - System Design Primer (GitHubオープンソース)

技術ブログ・論文

  1. Google SRE Book - Site Reliability Engineering (sre.google/sre-book)
  2. Amazon Builders Library (aws.amazon.com/builders-library)
  3. Meta Engineering Blog (engineering.fb.com)
  4. Netflix Tech Blog (netflixtechblog.com)
  5. Uber Engineering Blog (eng.uber.com)
  6. Leslie Lamport, The Part-Time Parliament (Paxos論文, 1998)
  7. DeCandia et al., Dynamo: Amazon's Highly Available Key-value Store (SOSP 2007)
  8. Chang et al., Bigtable: A Distributed Storage System for Structured Data (OSDI 2006)
  9. Apache Kafka公式ドキュメント (kafka.apache.org)
  10. vLLMプロジェクト (vllm.ai) - PagedAttention論文を含む