Ich benutze gRPC mit Python als Client/Server in kubernetes Pods ... Ich möchte in der Lage sein, mehrere Pods des gleichen Typs (gRPC-Server) zu starten und den Client eine Verbindung herstellen zu lassen sie (zufällig).gRPC Client Seite Load Balancing
Ich habe 10 Pods des Servers verschickt und einen "Service" eingerichtet, um sie zu erreichen. Dann habe ich mich im Client mit dem DNS-Namen des Dienstes verbunden - das bedeutet, dass kubernetes den Lastenausgleich durchführen und mich zu einem zufälligen Server-Pod leiten sollte. In Wirklichkeit ruft der Client die gRPC-Funktionen auf (was gut funktioniert), aber wenn ich mir die Protokolle anschaue, sehe ich, dass alle Anrufe zum selben Server-Pod gehen.
Ich vermute, dass der Client eine Art DNS-Caching durchführt, was dazu führt, dass alle Anrufe an denselben Server gesendet werden. Ist das der Fall? Gibt es sowieso, um es zu deaktivieren und den gleichen Stub-Client zu einem "neuen" Anruf und holen Sie eine neue IP durch DNS mit jedem Anruf?
Ich bin mir des Overheads bewusst, den ich verursachen könnte, wenn es den DNS-Server jedes Mal abfragt, aber das Verteilen der Last ist viel wichtiger für mich im Moment.
EDIT
wahrscheinlich kein Problem Caching ... könnte nur die Art und Weise sein gRPC funktioniert. HTTP/2 und dauerhafte wiederverwendbare Verbindung. Kann ich nach jedem Anruf die Verbindung trennen?
Vielen Dank für die ausführliche Antwort. Eigentlich habe ich schon was du vorgeschlagen hast und einen neuen Kanal für jede Anfrage erstellt (nicht effizient, ich weiß). Aus Ihrer Antwort verstehe ich, dass nur die erste IP in den DNS Anfragen erhalten wird, bis es stoppt (keine verfügbaren Verbindungen/getötet/abgestürzt) und nur dann werden die Clients zur zweiten IP gelangen und so weiter ... ist das richtig? – Idan
Ja. Bis auf Änderungen kann man Round Robin anstelle von Pick als LB-Policy auswählen, wie erwähnt. –
Gibt es eine typische Lösung für die Skalierung der mehreren gRPC-Server? oder clientseitiger Lastenausgleich? –