Uber や Lyft などの配車アプリケーションには、乗客とドライバーをシームレスに接続する複雑なシステムとプロセスが含まれます。このブログでは、ライドシェアリング アプリケーションの低レベル設計 (LLD)を検討し、そのようなプラットフォームを動かすコンポーネント、インタラクション、設計原則を理解します。
要件の概要
機能要件:
-
ユーザー登録とログイン: ライダーとドライバーは登録してログインできる必要があります。
-
配車予約: 乗客は乗車場所と降車場所を指定して配車を予約できる必要があります。
-
ドライバーのマッチング: システムは、ライダーに最も近い利用可能なドライバーを割り当てる必要があります。
-
リアルタイム追跡: ライダーはドライバーの位置をリアルタイムで追跡できる必要があります。
-
支払いシステム: 乗客はさまざまな方法を使用して乗車料金を支払うことができます。
-
評価とレビュー: ライダーとドライバーは相互に評価し、レビューできる必要があります。
非機能要件:
-
スケーラビリティ: システムは多数のユーザーを同時に処理する必要があります。
-
信頼性: 正確な予約と支払いを保証します。
-
低遅延: リアルタイム更新は高速かつシームレスである必要があります。
-
フォールト トレランス: システムのクラッシュを正常に処理します。
主要コンポーネントとその責任
1. ユーザーサービス
-
責任:
- ユーザーの登録と認証。
- ユーザー プロファイル (ライダーとドライバー) を維持します。
-
主要エンティティ:
- ユーザー: ユーザー ID、名前、電子メール、電話番号、タイプ (ライダー/ドライバー) などの詳細が含まれます。
- ドライバーの詳細: 車両情報、免許証、空き状況。
2. 配車管理サービス
-
責任:
- 乗客が配車を予約できるようにします。
- 乗車のライフサイクルを維持します (要求、承認、完了)。
- 乗車状況を追跡します。
-
主要エンティティ:
- 乗車: 乗車 ID、乗客 ID、ドライバー ID、乗車場所と降車場所、ステータス、運賃などが含まれます。
3. ドライバーマッチングサービス
-
責任:
- 地理位置情報データを使用して、最も近い利用可能なドライバーを特定します。
- ドライバーをライダーに割り当てます。
-
主要なアルゴリズム:
-
Haversine 公式: 緯度と経度を使用して 2 つの場所間の距離を計算します。
-
優先キュー: 距離に基づいてソートされた最も近い利用可能なドライバーを維持します。
4. リアルタイム位置情報サービス
-
責任:
- ドライバーのリアルタイムの位置を追跡します。
- 乗車中にドライバーの位置をライダーと共有します。
-
主要エンティティ:
- 場所: ドライバー ID、緯度、経度、タイムスタンプが含まれます。
-
テクノロジー:
- リアルタイム更新用の WebSocket または MQTT。
5. 決済サービス
-
責任:
- 距離と時間に基づいて乗車料金を計算します。
- さまざまな方法 (クレジット カード、ウォレットなど) で支払いを処理します。
- 返金とキャンセルを処理します。
-
主要エンティティ:
- 支払い: 支払い ID、乗車 ID、金額、ステータス (成功/失敗) が含まれます。
-
主な機能:
- 支払いゲートウェイ (Stripe、PayPal など) との統合。
6. 評価およびレビューサービス
-
責任:
- ライダーとドライバーがお互いを評価し、レビューできるようにします。
- ストアの評価とフィードバック。
-
主要エンティティ:
- 評価: 乗車 ID、ユーザー ID、ドライバー ID、スコア、コメントが含まれます。
7. 通知サービス
-
責任:
- 乗客とドライバーに通知を送信します (乗車リクエスト、ステータス更新など)。
-
テクノロジー:
- プッシュ通知 (Firebase Cloud Messaging または Apple Push Notification Service)。
- SMS と電子メールの統合。
データベース設計
テーブルとリレーションシップ:
-
ユーザーテーブル:
- user_id (主キー)
- 名前、電子メール、電話番号、タイプ (ライダー/ドライバー) など
-
ドライバー詳細テーブル:
- driver_id (ユーザーを参照する外部キー)
- 車両情報、ライセンス番号、利用可能状況。
-
ライドテーブル:
- ride_id (主キー)
- rider_id (ユーザーを参照する外部キー)
- driver_id (ユーザーを参照する外部キー)
- 乗車場所、降車場所、運賃、ステータス。
-
ロケーションテーブル:
- location_id (主キー)
- driver_id (ユーザーを参照する外部キー)
- 緯度、経度、タイムスタンプ。
-
支払い表:
- payment_id (主キー)
- ride_id (Ride を参照する外部キー)
- 金額、支払い方法、ステータス。
-
評価表:
- 評価 ID (主キー)
- ride_id (Ride を参照する外部キー)
- user_id、スコア、コメント。
シーケンス図: 配車の予約
手順:
- 乗客は乗車場所と降車場所を入力して配車をリクエストします。
- 配車管理サービスは配車リクエストを作成します。
- ドライバー マッチング サービスは、最も近い利用可能なドライバーを特定し、リクエストを送信します。
- ドライバーは乗車を承諾または拒否します。
- 同意すると、ライダーは確認を受け取り、リアルタイムの追跡が開始されます。
- 乗車が完了すると、支払いサービスが運賃を処理します。
- ライダーとドライバーの両方が体験を評価してレビューできます。
クラス図
主要なクラス:
-
ユーザー: 属性には、user_id、名前、電子メール、電話、タイプ (ライダー/ドライバー) が含まれます。
-
乗車: 属性には、ride_id、rider、driver、pickoff_location、dropoff_location、運賃、ステータスが含まれます。
-
ドライバー: vehicle_info、license_number などの追加属性を使用してユーザーを拡張します。
-
支払い: 属性には、payment_id、乗車、金額、payment_method、ステータスが含まれます。
-
場所: 属性には、ドライバー、緯度、経度、タイムスタンプが含まれます。
-
評価: 属性には、乗車、ユーザー、スコア、コメントが含まれます。
技術スタック
バックエンド:
-
API を構築するための Node.js と Express.js。
フロントエンド:
-
シームレスなユーザー エクスペリエンスを実現する React.js。
データベース:
-
MySQL または PostgreSQL (構造化データ ストレージ用)。
-
Redis ドライバーの場所をキャッシュします。
リアルタイム通信:
-
位置情報の更新には WebSocket または Firebase。
支払いゲートウェイ:
-
Stripe、PayPal、または同様のサービスとの統合。
課題と解決策
-
スケーラビリティ:
- マイクロサービス アーキテクチャを使用して、個々のコンポーネントを個別にスケーリングします。
-
リアルタイム更新:
- WebSocket または MQTT を使用して、ライブ トラッキングの遅延を削減します。
-
ドライバーの可用性:
- ドライバーのリクエストを効果的に管理するキュー システムを実装します。
-
システムフォールトトレランス:
- 重要な操作 (支払い処理など) の再試行とフォールバック メカニズムを確保します。
以上がライドシェアリングアプリケーションの低レベル設計 (LLD)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。