以下のようなマイクロサービスアーキテクチャがあります。実行サービスでストレージおよび割り当てサービスから情報を取得したい。 MVCアプリをAPIゲートウェイのように使用し、すべてのマイクロサービス通信を処理したいと考えています。ただし、最初にネットワーク経由でAPIゲートウェイ、次に実行サービスにアクセスする必要があるため、特に大きなファイルの場合はオーバーヘッドが発生します。
私の質問は、REST呼び出しを介してマイクロサービス間で直接通信しても問題ないか、それを行うと最終的にスパゲッティアーキテクチャに変わるかどうかです。
どうやって矢をつなげていきましょうか…?
前もって感謝します。
基本的な質問から始めましょう:
REST呼び出しを介してマイクロサービス間で直接通信しても問題ありませんか?
短い答え:yes、しかし...
いくつかの概念を明確にしたいだけです。 APIゲートウェイは、実行中のマイクロサービスの潜在的に複数のインスタンスの1つにリクエストをリダイレクトするためのものです。ゲートウェイは負荷分散などを処理します。
マイクロサービス間の直接接続が必要な場合でも、負荷分散が必要です。それはすべて、インフラストラクチャにどのように対処するかによって異なります。たとえば、Kubernetes、Spring Cloudインフラストラクチャ、またはConsulでそれを達成する方法は少し異なります。
実際には、マイクロサービスのいずれかが部分的な障害に陥り、新しいリクエストへの応答を停止し、本質的に「スタック」する可能性があります。メモリの圧迫やガベージコレクションがハイパードライブに移行したり、テストに巻き込まれなかった無限ループなど、多くの理由が考えられます。
一番下の行は:
発信者に意味のある応答を送信できる時間が早ければ早いほど、アプリケーションの応答性が高くなります。実行する必要がある追加の処理があるかもしれませんが、ユーザーはそれが完了すると信頼できる限り、座ってすべてが完了するのを待つ必要はありません。
一般的な経験則として:
では、これがスパゲッティアーキテクチャになるかどうかが主な関心事ですか。さて、なぜドキュメンテーションを使わないのですか!?これは、この種の問題を改善するための十分にテストされたプラクティスです。すべてのプロセスを文書化するだけで、各矢印がどこを指しているかがわかります。
さらに、ゲートウェイの懸念。
I want to use MVC App like an API Gateway and handle all microservice communication. However, that creates an overhead especially for big files since it first has to go to API gateway over network then to my execution service.
ゲートウェイを使用してこれをベンチマークし、これがニーズを満たしていないと結論付けましたか?そうすれば、純粋な理論があなたの邪魔にならないはずです。理論は問題を解決するためのものであり、新しい制約を作成するものではありません。直接のコミュニケーションのために行き、適切に処理してください(上記のドキュメントで:P)。
追加
ゲートウェイは、複数のアプリを接続し、おそらくインターフェースを公開する方法です(他の理由の中でも)。新しいゲートウェイとして新しいインターフェースにアプローチする場合、より多くのインターフェースが存在するという事実は、重要な境界線ではないはずです。したがって、クライアントアプリの観点からは、2つのインターフェイスしかありません。 (ホリスティック対分析的思考を参照してください..:P)。もう1つの追加:フロントエンドのバックエンドと呼ばれるパターンがあります。まあ、あなたはバックエンドのフロントエンドになることができます!そして、まだマイクロサービスのエコシステム内にあります。まあ、正確ではありませんが、私が言いたいのは、ここではバックエンドインターフェイスを分離する正当な理由がある可能性があるということです。
お役に立てれば幸いです。