さまざまなマイクロサービスからデータを収集する正しい方法は何ですか?

ジェフリー-ap

マイクロサービス間の基本的な通信をどのように行うべきかを理解するのに問題があり、他の質問でこれを行うための適切な解決策または標準的な方法を見つけることができませんでした。この基本的な例を使用してみましょう。

ここに画像の説明を入力してください

請求書を返す請求書サービスがあります。すべての請求書には、ユーザーと製品に関する情報(ID)が含まれています。特定のユーザーの請求書を表示する必要があるビューがある場合は、単純なリクエストを行うだけです。

let url = "http://my-domain.com/api/v2/invoices"
let params = {userId:1}
request(url,params,(e,r)=>{
  const results = r // An array of 1000 invoices for the user 1
});

ここで、この特定のビューについて、各請求書の各製品のすべての詳細を取得するために別のリクエストを行う必要があります。

results.map((invoice)=>{
   invoice.items.map((itemId)=>{
      const url=`http://my-domain.com/api/v2/products/${itemId}`
      request(url,(e,r)=>{
       const product = r
       //Do something else.....
      });
   });
});

コード例が完全ではないことはわかっていますが、これにより、製品サービスに対して膨大な数(少なくとも1000)のリクエストが生成され、1人のユーザーに対してのみこの種のリクエストを行う1000人のユーザーがいると想像してみてください。

パフォーマンスの問題を回避するために、この数の要求を行うことなく、すべての製品から情報を取得する正しい方法は何ですか?

この種のシナリオには、次のような回避策がいくつか見つかりました。

  1. 単一のリクエストを行うために、IDのリストを受け入れるAPIエンドポイントを作成します。
  2. 請求書サービス内で製品サービスからの情報を複製し、それらの同期を維持する方法を見つけます。

マイクロサービスアーキテクチャでは、これらはこの種の問題に対処するための正しい方法ですか?私にとって、それらは単純な回避策のように見えます。

編集#1:RemusRusanuの応答に基づく。

Remusの推奨に従って、私は自分のサービスを分離し、それらをもう少し詳しく説明することにしました。

ここに画像の説明を入力してください

上の画像に示されているように、マイクロサービスは分離され(具体的には請求サービス)、データの所有者になりました。この構造を使用することで、非同期ジョブがある場合や他の2つのサービスがダウンしている場合でも、Billing-serviceが機能することを保証します。

新しい請求書を作成する必要がある場合は、他の2つのマイクロサービス(ユーザー、在庫)を同期的に呼び出してから、請求サービスの「キャッシュ」テーブル(ユーザー、在庫)のデータを更新できます。

これらの「キャッシュ」テーブルが読み取り専用であると想定するのも良いですか?ユーザー/インベントリサービスのみがこの情報を変更して、情報の分離と権限を維持できるようにする必要があるためだと思います。

レムス・ルサヌ

You need to isolate the services as so they do not share state/data. The design in your question is a single macroservice split into 3 correlated storage silos. Case in point, you cannot interpret a result form the 'Invoicing' service w/o correlating the data with the 'Products' response(s).

Isolated microservices mean they own their data and they can operate independently. An invoice is complete as returned from the 'Invoices' service. It contains the product names, the customer name, every information on the invoice. All the data came from its own storage. A separate microservice could be 'Inventory', that operates all the product inventories, current stock etc. It would also have its own data, in its own storage. A 'product' can exist in both storage mediums, and there once was logical link between them (when the invoice was created), but the link is severed now. The 'Inventory' microservice can change its products (eg. remove one, add new SKUs etc) w/o affecting the existing Invoices (this is not only a microservice isolation requirement, is also a basic accounting requirement). I'm not going to enter here into details of what is a product 'identity' in real life.

自分が尋ねているような質問をしていることに気付いた場合は、マイクロサービスがないことを意味している可能性があります。すべての通信を非同期キューベースのリクエストに置き換えるとどうなるかを考えながら、マイクロサービスの境界について考える必要があります(応答は6日後に届く可能性があります):セマンティクスが壊れている場合は、境界が間違っている可能性があります。セマンティクスが成り立つ場合は、正しい道です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

MPI_Gathervを使用して、マスターノードを含むさまざまなプロセッサから異なる長さの文字列を収集するにはどうすればよいですか?

分類Dev

MPI_Gathervを使用して、マスターノードを含むさまざまなプロセッサから異なる長さの文字列を収集するにはどうすればよいですか?

分類Dev

データベースからデータを収集しながら、ログインページでC#でさまざまなフォームページを開くにはどうすればよいですか?

分類Dev

さまざまなマイクロサービスからのCQRSパターンでデータを結合する

分類Dev

rxjsを非恐ろしい方法でAngularで使用して、さまざまなリクエストからデータを収集するにはどうすればよいですか?

分類Dev

サインアップ中にさまざまなアクティビティから収集したユーザーの詳細を最終アクティビティに送信するにはどうすればよいですか?

分類Dev

マイクロサービスでは、さまざまなサービスにデータベースに保存される同様のエンティティがありますが、それをどのように処理しますか?

分類Dev

さまざまなタブレットサイズをサポートする正しい方法は何ですか?

分類Dev

pysparkのリスト内のさまざまなデータフレーム列を合計する正しい方法は何ですか?

分類Dev

マルチテナント環境で、実行時にさまざまなURL(サブドメイン)でさまざまなサービスプロバイダーにさまざまなメタデータを提供するにはどうすればよいですか?

分類Dev

さまざまなデータ型を収集して保存するには、どのクラスを使用する必要がありますか?

分類Dev

カスタマイズされたインデックスを使用して、同じPandasシリーズ列のさまざまな部分をさまざまな色でプロットするにはどうすればよいですか?

分類Dev

複数のソースからデータを収集する慣用的な方法は何ですか?

分類Dev

さまざまな種類の製品データを保存するための正しいアプローチは何ですか

分類Dev

データを解析するさまざまな方法は何ですか

分類Dev

同じ部品でさまざまなタイプをサービスから返却するにはどうすればよいですか?

分類Dev

IoT Hub(microsoft azure) からデータをフェッチするさまざまな方法は何ですか?

分類Dev

親子関係なしでサービスのさまざまなインスタンスを使用するにはどうすればよいですか?

分類Dev

さまざまなリモートサーバーからのマイクロサービスベースのUI構成にJSFを使用する

分類Dev

マイクロサービス-サービスディスカバリとサービスゲートウェイの正確な違いは何ですか?

分類Dev

Firebaseから非同期でデータを収集する:データセットはいつ完成しますか?

分類Dev

さまざまなタイプのメジャーを使用してクロス集計のセルにデータをフォーマットする方法

分類Dev

VM(仮想マシン)でホストされているJenkinsサーバーでプロジェクトをビルドしながら、実際のAndroidデバイスまたはエミュレーターでAppiumテストを実行する方法

分類Dev

さまざまなコントローラーでさまざまなサービスを解決するにはどうすればよいですか?

分類Dev

タイプスクリプトでライブラリをインポートするさまざまな方法の違いは何ですか?

分類Dev

Quarkusアプリケーションをデプロイするさまざまな方法は何ですか?

分類Dev

マイクロサービスでデータベースを分離する理由は何ですか?

分類Dev

SQLiteデータベースを保存してさまざまなデバイスからアクセスできるようにする方法

分類Dev

MPIを使用してさまざまなプロセスから小さなマトリックス部分を収集する

Related 関連記事

  1. 1

    MPI_Gathervを使用して、マスターノードを含むさまざまなプロセッサから異なる長さの文字列を収集するにはどうすればよいですか?

  2. 2

    MPI_Gathervを使用して、マスターノードを含むさまざまなプロセッサから異なる長さの文字列を収集するにはどうすればよいですか?

  3. 3

    データベースからデータを収集しながら、ログインページでC#でさまざまなフォームページを開くにはどうすればよいですか?

  4. 4

    さまざまなマイクロサービスからのCQRSパターンでデータを結合する

  5. 5

    rxjsを非恐ろしい方法でAngularで使用して、さまざまなリクエストからデータを収集するにはどうすればよいですか?

  6. 6

    サインアップ中にさまざまなアクティビティから収集したユーザーの詳細を最終アクティビティに送信するにはどうすればよいですか?

  7. 7

    マイクロサービスでは、さまざまなサービスにデータベースに保存される同様のエンティティがありますが、それをどのように処理しますか?

  8. 8

    さまざまなタブレットサイズをサポートする正しい方法は何ですか?

  9. 9

    pysparkのリスト内のさまざまなデータフレーム列を合計する正しい方法は何ですか?

  10. 10

    マルチテナント環境で、実行時にさまざまなURL(サブドメイン)でさまざまなサービスプロバイダーにさまざまなメタデータを提供するにはどうすればよいですか?

  11. 11

    さまざまなデータ型を収集して保存するには、どのクラスを使用する必要がありますか?

  12. 12

    カスタマイズされたインデックスを使用して、同じPandasシリーズ列のさまざまな部分をさまざまな色でプロットするにはどうすればよいですか?

  13. 13

    複数のソースからデータを収集する慣用的な方法は何ですか?

  14. 14

    さまざまな種類の製品データを保存するための正しいアプローチは何ですか

  15. 15

    データを解析するさまざまな方法は何ですか

  16. 16

    同じ部品でさまざまなタイプをサービスから返却するにはどうすればよいですか?

  17. 17

    IoT Hub(microsoft azure) からデータをフェッチするさまざまな方法は何ですか?

  18. 18

    親子関係なしでサービスのさまざまなインスタンスを使用するにはどうすればよいですか?

  19. 19

    さまざまなリモートサーバーからのマイクロサービスベースのUI構成にJSFを使用する

  20. 20

    マイクロサービス-サービスディスカバリとサービスゲートウェイの正確な違いは何ですか?

  21. 21

    Firebaseから非同期でデータを収集する:データセットはいつ完成しますか?

  22. 22

    さまざまなタイプのメジャーを使用してクロス集計のセルにデータをフォーマットする方法

  23. 23

    VM(仮想マシン)でホストされているJenkinsサーバーでプロジェクトをビルドしながら、実際のAndroidデバイスまたはエミュレーターでAppiumテストを実行する方法

  24. 24

    さまざまなコントローラーでさまざまなサービスを解決するにはどうすればよいですか?

  25. 25

    タイプスクリプトでライブラリをインポートするさまざまな方法の違いは何ですか?

  26. 26

    Quarkusアプリケーションをデプロイするさまざまな方法は何ですか?

  27. 27

    マイクロサービスでデータベースを分離する理由は何ですか?

  28. 28

    SQLiteデータベースを保存してさまざまなデバイスからアクセスできるようにする方法

  29. 29

    MPIを使用してさまざまなプロセスから小さなマトリックス部分を収集する

ホットタグ

アーカイブ