Microservice Architectureでの大容量ファイル/データ転送


22

私の会社は現在、マイクロサービスアーキテクチャの採用に取り組んでいますが、その過程で成長中の痛み(衝撃!)に直面しています。私たちが直面している主要な競合ポイントの1つは、異なるサービス間で大量のデータを通信する方法です。

ちょっとした背景として、社内全体で処理する必要があるドキュメントのリポジトリとして機能するドキュメントストアがあります。このストアとのやり取りは、クライアントに一意のIDとドキュメントをストリーミングする場所を提供するサービスを介して行われます。ドキュメントの場所は、指定されたIDを使用したルックアップを介して後でアクセスできます。

問題はこれです-すべてのマイクロサービスが、ドキュメントとやり取りする目的のために、APIの一部としてこの一意のIDを受け入れることは理にかなっていますか?私にとってこれは本質的に間違っているように感じます-サービスはもはや独立しておらず、ドキュメントストアのサービスに依存しています。これによりAPIの設計が簡素化される可能性がありますが、おそらく、パフォーマンスを改善するだけでなく、結果として得られるカップリングの利点が相殺される可能性もあります。

レインボーユニコーン(Netflix、Amazon、Googleなど)がサービス間の大きなファイル/データ交換を処理する方法を知っている人はいますか?


高可用性のドキュメント/ファイルストアには何を使用していますか?
テレンスジョンソン

@TerenceJohnson現在のところ、自社開発のソリューションを使用しています。一意のドキュメントIDとその場所のみを保持するRESTful APIを活用するソリューションに移行しています(不必要な内部ネットワークの負担を防ぐために、ストリームではなくクライアントに提供されます)。実際の永続化はAWSを介して行われます。
PremiumTier

回答:


7

レインボーユニコーン(Netflix、Amazon、Googleなど)がサービス間の大きなファイル/データ交換を処理する方法を知っている人はいますか?

残念ながら、私は彼らがそのような問題にどのように対処しているかわかりません。

問題はこれです-すべてのマイクロサービスが、ドキュメントとやり取りする目的のために、APIの一部としてこの一意のIDを受け入れることは理にかなっていますか?

これは、マイクロサービスのアーキテクチャに本来備わっている単一責任原則に違反しています。1つのマイクロサービス- 論理的に 1つ、物理的に 1つを表す多数のインスタンス-が1つのトピックを処理する必要があります

ドキュメントストアの場合、1つのポイントがあり、ドキュメントに対するすべてのクエリが実行されます(もちろん、この論理ユニットをいくつかの種類のドキュメントの複数のドキュメントストアに分割できます)。

  • 「アプリケーション」がドキュメントで作業する必要がある場合、それぞれのマイクロサービスに問い合わせて、その結果を処理します。

  • 別のサービスが実際のドキュメントまたはその一部を必要とする場合、ドキュメントサービスに問い合わせる必要があります。

私たちが直面している主要な競合ポイントの1つは、異なるサービス間で大量のデータを通信する方法です。

これはアーキテクチャ上の問題です。

  1. 大量のデータを転送する必要性を減らす

    理想的には、各サービスにはすべてのデータが含まれており、単にリクエストを処理するために転送する必要はありません。このアイデアの拡張として-データを転送する必要がある場合、冗長性を考えてください(*肯定的な方法で):多くの場所(必要な場所)でデータを冗長化するのは理にかなっていますか?矛盾がプロセスに悪影響を与える可能性を考えてください。実際には何もしないので、転送は速くありません

  2. データ自体のサイズを小さくする

    データを圧縮する方法を考えてください。実際の圧縮アルゴリズムからスマートデータ構造まで。ワイヤーを通過する量が少ないほど、速くなります。


2

ドキュメントストアによって返されたID がシステム全体でドキュメントを参照する方法である場合、サービスがどのドキュメントを処理する必要があるかを知る必要があるときに、すべてのサービスがAPIでその「ドキュメントID」を受け入れることは理にかなっています。

これは、必ずしも必要以上にサービス間の緊密な結合を作成するわけではありません。ドキュメントにアクセスする必要があるサービスは、ドキュメントストアサービスにアクセスする必要があり、アクセスするドキュメントをストアに伝えるためにそのIDが必要です。
ドキュメントに直接アクセスしないサービスはドキュメントIDを渡す必要があるかもしれませんが、それらのサービスにとっては、依存関係を作成しない任意の文字列にすぎません。


お返事ありがとうございます。マイクロサービスを内部のドキュメントストアも活用したくない外部の消費者に公開することにより、潜在的に利益が得られることを付け加えます。それを念頭に置いて、あなたはまだこれが最良のアプローチだと感じていますか?
プレミアムティア

@PremiumTier:はい。ただし、これらの外部顧客は、内部ストアと同じAPIをサポートする独自のストアを提供する必要があります。これにより、サービスはそれと連携できます。
バートヴァンインゲンシェナウ

それは理にかなっていますが、ドキュメント参照の代わりにサービスがストリーム、バイト配列、またはjson blobを受け入れるようにするよりも面倒です。その場合、後続のサービスを呼び出す前に、必要に応じて最初に「アダプター」サービスを簡単に呼び出してファイルストリームを取得できます。ちなみに私は論争をしようとしているのではなく、単にこのアプローチのメリットを理解しようとしています:)
PremiumTier

2

個人的には、個別のドキュメントストアサービスとドキュメントIDを使用するのではなく、ドキュメントにアクセスするためのURL(適切なヘッダー認証を使用)を使用します。このアプローチでは、ドキュメントサービスに依存する他のサービスは必要なく、単に完全なURLを使用してドキュメントにアクセスできます。また、スケーリングに関しても、複数のドキュメントストアを使用して、ストレージが増大し、URLを提供するとき。

ただし、ドキュメントをアップロードしてそのURLを取得するには、サービスが必要になる場合があります。


1

レインボーユニコーン(Netflix、Amazon、Googleなど)がサービス間の大きなファイル/データ交換を処理する方法を知っている人はいますか?

Amazon S3 REST APIの仕様を調べてください。一見、オブジェクト全体をバイト単位で返します。マイクロサービスを設計している場合、多くのオプションはないようです。 Amazon S3応答形式のリンク

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.