2017-03-16 20 views
0

状況: Load Balancerには、マシンAとBの後ろに2つのマシンがあります。マシンAがロードバランサを介してクライアントから要求を受信し、コンシューマがマイクロサービスであるキューにメッセージを渡すとします。マイクロサービスは仕事をしてjsonメッセージを出します。このjsonメッセージは、クライアントに送り返されます。別のマシン・ノードからのhttp要求への応答js

現在の実装: マイクロサービスは、作成したjsonメッセージをマシンAとマイクロサービス間のキューに戻します。サーバーIDは、メッセージをパブリッシュするキューを知っているマイクロサービスにメッセージで渡されます。したがって、基本的には、マイクロサービスとロードバランサの背後にあるすべてのマシンの間にキューがあります。

問題:トラフィックが増加するにつれて、マシンの数が増えており、マイクロサービスとマシンの間のキューの数も頭痛になります。マシンAで受信したマシンBからの要求に応答する方法はありますか?私は文脈がどのように維持されるのか分からない。誰かがRedisを提案しましたが、可能でしょうか?

答えて

0

サービスAとサービスBの間のコンテキストには注意が必要ですが、何らかの分散キューを使用することに決めました。どのキュー実装を使用しているかを詳しく説明できますか? (RabbitMQおそらく?)

コンテキストを維持する必要はありますか?コンテキストを保持する必要がない、またはサービスAとサービスBからの「コンテキストID」を前後に渡すことができるようにアプリケーションを再構成することができれば、それを強く結合する必要はありません。なぜマイクロサービスが必要なのか?

デカップリングされていなくても水平方向に拡大縮小できます。

同期方法で通信する必要がある場合は、キューイングするのは簡単ではないかもしれません。

サービスAとサービスBの間で何らかのRPC実装を提案していますが、gRPCを見てください。あまりにも複雑な場合は、両方のマシンと内部で通信するプライベートHTTPベースのAPIあなたのクラスタ

幸運。

+0

はいpub/subはRabbitMQです。文脈では、Nodejsに対応する応答オブジェクトがあります。したがって、基本的にサーバーBがサーバーAの要求にどのように応答できるか 非常に多くのマシン上の内部APIは面倒です。 –

+0

あなたは@gmaliarを提案します –

+0

あなたのニーズに応じて:) HTTPははるかに簡単に最初に... – gmaliar

関連する問題