私はモノリシックなアプローチに慣れているので、マイクロサービスアーキテクチャに頭を抱えようとしています。
非常に簡素化された Uber予約システムを構築しようとしているとします。:物事を単純化するために、我々は、我々は3つのサービスとクライアントのゲートウェイAPIを持っているとしましょうBooking
、Drivers
、Notification
と私たちは、次のワークフローを持っています:
新しい予約を作成する場合:
- 既存のユーザーがすでに予約しているかどうかを確認する
- 利用可能なドライバーのリストを取得する
- ドライバーに通知を送信して予約を受け取ります
- 運転手が予約をピックアップ
すべてのメッセージングがkafkaのようなメッセージングバスではなくhttp呼び出しを介して行われるとしましょう。
したがって、この場合、Booking
サービスは既存の予約の確認を行うことができると思いました。しかし、利用可能なドライバーと通知のリストを誰が取得する必要がありますか?ゲートウェイレベルで実行することを考えていますが、ロジックは次の2つの場所に分割されています。
Gateway
-利用可能なドライバーのリストを取得+通知を送信Booking
-既存の予約を確認する
そして、ゲートウェイはそれを行うのに適切な場所ではないと確信していますが、Booking
サービスでそれを行っている場合、緊密に結合されているように感じますか?
さらに複雑にするために、予約システムを再利用したいが、独自のビジネスロジックを追加した別のプロジェクトがある場合はどうなるでしょうか。新しいプロジェクトゲートウェイが独自のビジネスロジックを既存のものから分離できるように、ゲートウェイレベルでそれを行うことを考えたのはそのためです。
それを行う別の方法は、各プロジェクトがコア予約サービスと通信する独自の予約サービスを持っていることですが、ここでの最善のアプローチは何なのかわかりません:-)