最近、いくつかのサービス検出ツールが人気/「主流」になりました。私は、従来のロード バランサの代わりにどのような主なユース ケースでそれらを採用すべきか疑問に思っています。
LB を使用すると、バランサーの背後に多数のノードをクラスター化してから、クライアントがバランサーにリクエストを送信し、バランサーが (通常) それらのリクエストをクラスター内のすべてのノードにラウンド ロビンします。
サービス ディスカバリ ( Consul、ZKなど) を使用すると、集中型の「コンセンサス」サービスが特定のサービスのどのノードが正常であるかを判断し、サービスが正常であると判断したノードにアプリが接続します。したがって、サービス ディスカバリと負荷分散は 2 つの別個の概念ですが、サービス ディスカバリは便利な副作用として負荷分散を提供します。
しかし、ロード バランサー ( HAProxyやnginxなど) にモニタリングとヘルス チェックが組み込まれている場合は、ロード バランシングの副作用としてサービス ディスカバリーを取得できます。つまり、私の LB がそのクラスター内の異常なノードにリクエストを転送しないことを知っている場合、それはコンセンサス サーバーが私のアプリに異常なノードに接続しないように指示するのと機能的に同等です。
したがって、私にとって、サービス検出ツールは、ロード バランサーと同等の「1 つに 6 つ、もう 1 つに 6 つ」のように感じられます。ここで何か不足していますか?負荷分散されたマイクロサービスに完全に基づいたアプリケーション アーキテクチャを使用している場合、サービス ディスカバリ ベースのモデルに切り替えることの利点 (または利点) は何ですか?