システム設計面接:Uberを設計する

「Uberを設計せよ」は、地理空間インデックス、リアルタイムの位置情報ストリーミング、マッチング、そして高い書き込みスループットを同時に扱うため、最も一般的なシステム設計の課題の一つです。面接官は実際のUberのアーキテクチャを求めているのではなく、あなたが問題の範囲を定め、根拠のある選択をし、スケールについて声に出して考える様子を見たいのです。

意図的な順序で進めましょう:要件を明確にし、規模を見積もり、主要なエンティティとAPIをスケッチし、データとマッチングの経路を設計し、それからボトルネックとトレードオフについて話し合います。以下のウォークスルーはその順序に従っているので、答えだけでなく構成そのものを練習できます。

1. 要件を明確にする

設計を始める前に、機能要件と非機能要件を分け、範囲を固定します。乗客は乗車をリクエストし、ドライバーが近づいてくる様子をリアルタイムで見ます。ドライバーはオンラインになり、近くのリクエストを受け取ります。システムは両者をマッチングし、乗車完了まで追跡します。

  • 機能要件:乗車をリクエストする、近くのドライバーとマッチングする、乗車をリアルタイムで追跡する、料金計算、乗車履歴。
  • 非機能要件:低レイテンシのマッチング(数秒)、高可用性、リアルタイムの位置情報更新、ドライバーが正確に一人の乗客に割り当てられるという一貫性。
  • 範囲外(そう明言する):決済処理の内部実装、評価、サージ料金のML — 言及した上で後回しにする。

2. 規模を見積もる

概算の数字が後の選択の根拠になります。日次アクティブドライバーが約1,000万人で、4秒ごとに位置情報pingを送ると仮定すると、位置情報データの書き込みは毎秒約250万件になります。これは書き込み主体のワークロードであり、素朴なリレーショナルテーブルをホットパスとして採用する選択肢を即座に排除します。

3. 主要コンポーネントとAPI

サービスとリクエストフローをスケッチします。マッチングの経路を永続的な乗車ストアから独立させ、それぞれが自身の特性に応じてスケールできるようにします。

  • 位置情報サービス:ドライバーのpingを取り込み、現在位置をインメモリの地理空間インデックスに保持する。
  • マッチングサービス:乗車リクエストがあると、近くのオンラインドライバーを検索し、一人を割り当てる。
  • 乗車サービス:乗車のライフサイクル(リクエスト済み→マッチング済み→進行中→完了)を永続的に記録する。
  • 通知/ストリーミング:ドライバーのリアルタイム位置を乗客に送信する(WebSocket/ロングポーリング)。

4. 地理空間マッチング — 問題の核心

これが面接官が最も聞きたい部分です。生の緯度経度を保存してスキャンするとO(n)になるため、空間インデックスが必要です。クアッドツリーまたはジオハッシングを説明しましょう:地図をセルに分割することで、「この地点の近くのドライバーを探す」という処理が全件スキャンではなく、わずかなセルの検索になります。

ジオハッシングは、ある領域を短い文字列にエンコードし、共有するプレフィックスが空間的な近さを意味するようにします。これにより「近く」はプレフィックス検索になります。ドライバーの現在のセルはインメモリストア(例:Redis)に保持され、高速な読み取りと頻繁な更新を可能にします。セルの粒度は精度とクエリのファンアウトの間で調整可能なトレードオフです。

5. スケーリングとボトルネック

圧力のかかる箇所とその緩和方法を名指ししましょう。毎秒250万件の位置情報書き込みストリームが最も支配的なものです。

  • 位置情報インデックスを地理的にシャーディングする — ある都市のドライバーと乗客は同じシャードで処理され、マッチングがローカルに保たれる。
  • インメモリストアと非同期の永続書き込みで書き込みの急増を吸収する。すべてのpingを永続DBに記録する必要はない。
  • アトミックな割り当て(ロックまたは条件付き更新)によって、一人のドライバーが一人の乗客にのみ割り当てられることを保証し、二重予約を防ぐ。
  • 位置情報の取り込みと下流の消費者の間にメッセージキュー(Kafka)を使い、スパイクを分離する。

6. 言葉にすべきトレードオフ

面接官が評価する緊張関係を名指しして締めます:強い一貫性 対 結果整合性(ドライバーの割り当ては強い一貫性が必要だが、位置情報の表示は結果整合性で十分)、インメモリの速度 対 永続性、そしてセルサイズの精度 対 クエリのファンアウト。これらを明示的に述べることが、合格ラインの回答と優れた回答の差になります。

リアルタイムサポートでUberのシステム設計を練習する

Nativelyのシステム設計面接アシスタントは、ライブの面接中にあなたを構造立てて支え、次に扱うべき観点を提案し、トレードオフをリアルタイムで表示します。すべて自分のデバイス上で完結します。

ご自身のパソコンにインストール。

ローカルで動作するライブ会話アシスタント。データは外部に送信されません。

macOS 12+ · Windows 10/11

© 2026 Natively AI Private Limited

Natively Personal Use Source License v1.0 のもとでソースを公開 · IPジオロケーション提供: DB-IP