内部ノード間通信に現在 HTTP/REST を使用しているマイクロサービス アーキテクチャの最適化を検討しています。
1 つのオプションは、バックプレッシャ機能をサービスに実装することです (たとえば、Quasar のようなものをスタックに統合することによって)。これは間違いなく物事を改善するでしょう。しかし、いくつかの課題があります。1 つは、非同期クライアント スレッドが一時的 (メモリ内) であり、クライアントに障害 (クラッシュ) が発生すると、これらの再試行スレッドが失われることです。2 つ目は、理論的には、ターゲット サーバーがしばらくダウンしている場合、クエーサー ファイバーであってもスレッドが最終的に制限されるため、クライアントは再試行を試みて最終的に OOM に到達する可能性があります。
少し偏執的であることはわかっていますが、キューベースの代替手段が非常に大規模な場合により有利になるかどうか疑問に思っています。
ただし、a) キューが中央で管理され、クライアント JVM から切り離されていること、b) キューが永続的であるため、クライアントやターゲット サーバーがダウンした場合、処理中のメッセージがないことを除きます。失われます。
もちろん、キューの欠点は、ホップが多くなり、システムの速度が低下することです。しかし、Quasar の ROI がピークに達し、一元化された耐久性のあるキューがスケーリングと HA にとってより重要になるスイート スポットがおそらくあると思います。
私の質問は:
このトレードオフは議論されましたか? サービス内通信に集中型の外部キュー/ルーター アプローチを使用することに関する論文はありますか。
TL;DR; この質問はおそらく次のように表現できることに気付きました。
「マイクロサービス アーキテクチャ内で直接 HTTP を使用するのではなく、メッセージ バス ベースのサービス内通信を使用するのが適切なのはいつですか。」