0

今日の私の質問は、マイクロサービスを構築する際の組み合わせ操作についてです。

架空のシナリオを使用してみましょう: ダッシュボードを構築したいです。ダッシュボードは、多数のユーザーとその情報 (履歴、レビュー、購入、最後に検索された製品) で構成されています。

spring-cloud と spring-reactor を読んで、ユーザー サービス、レビュー サービス、検索エンジン サービスなど、複数のマイクロサービスを呼び出すノンブロッキング ソリューションを希望します。

私の最初の推測は、次のようなことをすることでした

  • ユーザーをロードし、
  • それぞれがそのレビューをロードしてから
  • その履歴をロードしてから
  • すべてのデータを組み合わせる

のような疑似コードでloadUsers().flatmap(u -> loadReviews(u))....reduce()。ご覧のとおり、ここでは本当におおよそです。

1 人のユーザーをロードする場合、さらに 4 回の http 呼び出しが必要であると見積もることができます。100 人のユーザーの場合、400 の追加の呼び出しなど。Big-O は直線的ではないようです

マイクロサービスが XYZ マイクロサービスからのデータ読み込みも委任する最悪のケースでは、1 ユーザーの場合 -> 1 件のレビュー コールを含む N 件のコール -> 1 件の XYZ コールとなります。申し訳ありませんが、Big-O (二次 ?) を計算していません。

それを避けるために、おそらくすべてのユーザーをロードし、ID を抽出し、ID のバッチを使用して EARCH マイクロサービスを呼び出すことができます。各マイクロサービスは一度にすべてのデータを読み込むことができ (ID でマップされたレビューのリスト)、元の呼び出しはすべてのこれらのリストをマージします。(zip機能の一種)

概要: Observables の構成に関するこの質問を読みました。私の質問は、「チェーンの最初に一意のユーザーがなく、数百人のユーザーがいる場合、同じ戦略を使用しますか?」と要約できます。(パフォーマンスは問題になる可能性がありますか?)

4

1 に答える 1

0

バッチ処理を使用して、ダウンストリーム コールの数を減らすことができます。オブザーバブルを介して単一のユーザーを送信する代わりに、バッチを送信する必要があります。

于 2015-12-22T17:24:32.530 に答える