サービス間の同期通信はアンチパターンであることを知っているので、自分のユースケースに適したソリューションを探しています。
この2つのサービスがあります。
Location Service
ユーザーの場所を管理しますScore Service
ユーザースコアを管理します今、私は別のサービスを構築する必要があります:Users Feed Service
(UFS)。特定の場所の近くにいるユーザーをスコア順に並べ替える必要があります(降順)。
同期解
代替は何ですか?私はこのようなことを考えていました:
イベントキューソリューション
このように、クライアントがユーザーフィードをリクエストすると、ユーザーフィードサービスはネットワークリクエストを実行する必要がありません(必要なデータを所有しています)。
これは良い解決策ですか?どうすれば改善できますか?多くのユーザーに対応できますか?
これを確認してください: http://microservices.io/patterns/data/event-sourcing.html 。あなたは確かにイベントを扱うことができます。
あなたは確かに次のようにそれを解決するでしょう:
場所はイベントストアにイベントを発行します
スコアはイベントストアをリッスンし、イベントを受け取ったら、それを処理して公開します。
サービス間の同期通信は、それ自体がアンチパターンではありません。非同期によってさらに複雑になるため、同期ソリューションの方が非同期ソリューションよりも優れている場合があります。
過度におしゃべりなソリューションはかなり悪いです。ロケーションサービスが返したユーザーの数に関係なく、UFSとスコアサービス間のリクエストの量がリクエストごとに一定であると、おそらくより良いでしょう。
ユーザーIDのリスト全体をスコアサービスにUFSに渡して、おそらく降順で並べ替えられた単一の応答を取得します。
プロセス全体がバックグラウンド操作の一部でない限り、おそらく同期通信を使用します。