問題タブ [spring-cloud-kubernetes]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring-boot - Spring Cloud Kubernetes での負荷分散の問題
Kubernetes で実行されている Spring Boot サービスがあり、RestTemplate で Spring Cloud Kubernetes Load Balancer 機能を使用して、他の Spring Boot サービスを呼び出しています。これを導入した主な理由の 1 つは歴史的なものです。以前は、サービス ディスカバリに Eureka を使用して EC2 でサービスを実行し、移行後、Spring ディスカバリ クライアント/クライアント側のロード バランシングを維持しました (依存関係の更新など)。 Spring Cloud Kubernetes プロジェクトで動作するようにします)
ターゲット ポッドの 1 つがダウンすると、一定期間、リクエストに対して複数の失敗が発生するという問題があります。java.net.NoRouteToHostException
つまり、スプリング ロード バランサがまだそのポッドに送信しようとしているということです。
だから私はこれについていくつか質問があります:
これが発生した場合、ターゲット インスタンスは自動的に削除されるべきではありませんか? ということは、一度は起こるかもしれませんが、その後、ターゲット ポッド リストは修復されますか?
または、そうでない場合、これを処理するために追加する必要がある他の構成があります-たとえば、再試行/サーキットブレーカーなど?
より一般的な質問は、Spring のクライアント側の負荷分散が Kubernetes にもたらす利点は何ですか? それがなくても、私たちのサービスは Kubernetes 組み込みサービス/負荷分散機能を使用して他のサービスを呼び出すことができ、ポッドが自動的にダウンする問題を処理する必要があります。Spring のドキュメントでは、POD モードから SERVICE モードに切り替えることができることについても説明しています ( https://docs.spring.io/spring-cloud-kubernetes/docs/current/reference/html/index.html#loadbalancer-for-kubernetes)。しかし、このサービス モードは Kubernetes が自動的に行うものではないでしょうか? ここでの最も簡単な解決策は、Spring Load Balancer を完全に削除することではないのでしょうか? その時、私たちは何を失うでしょうか?