私の会社は現在マイクロサービスアーキテクチャの採用に取り組んでいますが、その過程でいくつかの大きな問題(ショック!)に直面しています。私たちが直面している主要な競合ポイントの1つは、さまざまなサービス間で大量のデータを通信する方法です。
背景として、会社全体で処理する必要のあるドキュメントのリポジトリとして機能するドキュメントストアがあります。上記ストアとの対話は、クライアントに一意のIDとドキュメントをストリーミングする場所を提供するサービスを介して行われます。ドキュメントの場所は、提供されたIDを使用したルックアップを介して後でアクセスできます。
問題はこれです-すべてのマイクロサービスが、ドキュメントとやり取りするために、APIの一部としてこの一意のIDを受け入れることは理にかなっていますか?私にはこれは本質的に間違っていると感じています。サービスはもはや独立しておらず、ドキュメントストアのサービスに依存しています。私はこれがAPI設計を単純化するかもしれないことを認めていますが、おそらく、利点を相殺する以上に、結果として生じるカップリングによってパフォーマンスが向上することさえあるでしょう。
Rainbowユニコーン(Netflix、Amazon、Googleなど)がサービス間の大容量ファイル/データ交換を処理する方法を知っている人はいますか?
Rainbowユニコーン(Netflix、Amazon、Googleなど)がサービス間の大容量ファイル/データ交換を処理する方法を知っている人はいますか?
残念ながら、私は彼らがそのような問題にどう対処するか知りません。
問題はこれです-すべてのマイクロサービスが、ドキュメントとやり取りするために、APIの一部としてこの一意のIDを受け入れることは理にかなっていますか?
これは、本質的にマイクロサービスのアーキテクチャーにあるはずの単一責任の原則に違反しています。 1つのマイクロサービス-logicallyone、physically1つのインスタンスを表す多くのインスタンス-1つのtopic。
ドキュメントストアの場合、1つのポイントでドキュメントに対するすべてのクエリが実行されます(もちろん、この論理ユニットを複数の種類のドキュメントの複数のドキュメントストアに分割できます)。
「アプリケーション」がドキュメントで作業する必要がある場合は、それぞれのマイクロサービスに問い合わせて、その結果を処理します。
別のサービスで実際のドキュメントまたはその一部が必要な場合は、ドキュメントサービスに問い合わせる必要があります。
私たちが直面している主要な競合ポイントの1つは、さまざまなサービス間で大量のデータを通信する方法です。
これはアーキテクチャ上の問題です。
大量のデータを転送する必要性を減らします
理想的には、各サービスにはすべてのデータがあり、リクエストを処理するだけの転送は必要ありません。このアイデアの延長として-データを転送する必要がある場合は、冗長性について考えます(*肯定的な方法で_):多くの場所(必要な場所)でデータを冗長化することは理にかなっていますか?起こりうる不整合がプロセスにどのように影響するかを考えてください。実際に転送が速くなることはありませんnone。
データ自体のサイズを減らします
データを圧縮する方法を考えてみてください。実際の圧縮アルゴリズムから スマートデータ構造 までです。回線を経由する回数が少ないほど、速度は速くなります。
個人的には、個別のドキュメントストアサービスとドキュメントIDではなく、適切なヘッダー認証を使用してドキュメントにアクセスするためのURLを使用します。このアプローチでは、ドキュメントサービスに依存する他のサービスを必要とせず、完全なURLを使用してドキュメントにアクセスできます。また、スケーリングに関しても、複数のドキュメントストアを使用できます。ストレージが大きくなり、URLが提供されるとき。
ただし、ドキュメントをアップロードしてそのURLを取得するには、サービスが必要な場合があります。
ドキュメントストアから返されるIDがtheシステム全体でドキュメントを参照する方法である場合、サービスがどのドキュメントを知る必要があるときに、すべてのサービスがAPIでその「ドキュメントID」を受け入れることは理にかなっています連携する必要があります。
これにより、必要以上にサービス間の結合が緊密になるとは限りません。ドキュメントにアクセスする必要があるサービスは、とにかくドキュメントストアサービスにアクセスする必要があり、どのIDにアクセスするかをストアに通知するためにそのIDが必要です。
ドキュメントに直接アクセスしないサービスはドキュメントIDを渡す必要がある場合がありますが、これらのサービスには依存関係を作成しない任意の文字列にすぎません。
Rainbowユニコーン(Netflix、Amazon、Googleなど)がサービス間の大容量ファイル/データ交換をどのように処理するか知っている人はいますか?
Amazon S3をチェックアウトREST API仕様。オブジェクトはバイト単位で返されるようです。マイクロサービスを設計している場合、オプションは多くないようです。 Amazon S3応答形式リンク