2016-08-01 20 views
1

Wir verwenden Grpc (C# -Bibliothek) mit Protobuf, um interne RPC in einem lokalen Netzwerk durchzuführen. Ich verwende HAProxy, um Roundrobin-Balancing durchzuführen, um die Last auf einen der 2 Server zu verteilen. Da ich einen Kanal Singleton erstellen und denselben für alle RPC-Aufrufe verwenden, findet der Lastenausgleich nicht statt. Wenn ich beim Erstellen des GRPC Channel die Proxy-IP als Serverliste gebe, wird die IP nicht zur tatsächlichen physischen IP aufgelöst, sondern nur die Proxy-IP im Feld ResolvedTarget des Channel-Objekts. Meine Frage ist, wie kann ich Singleton Objekte für jeden der Server und immer noch HAproxy verwenden, um Load Balancing zu tun? Oder ist es nicht möglich, HAProxy zu verwenden und gleichzeitig den Kanal als Singleton-Objekt zu verwenden?Wie finde ich die tatsächliche IP-Adresse, wenn HAProxy mit Grpc zum Lastenausgleich verwendet wird?

Antwort

0

Es wird kein Lastausgleich angezeigt, da gRPC nach Möglichkeit eine einzige persistente TCP-Verbindung verwendet, um Anforderungen an den Server zu senden. Wenn Sie also eine Verbindung zum HAProxy herstellen, wird die einzelne Verbindung zu einem der Server "ausgeglichen". Diese Verbindung bleibt dann so lange geöffnet, wie Ihre Anwendung ausgeführt wird. Daher wird die Lastenausgleichsfunktionalität nie wieder aktiviert.

Sie sehen die verbundene IP-Adresse als die IP-Adresse des Proxys, weil Sie tatsächlich mit dem Proxy verbunden sind. HAProxy leitet Ihre Pakete an den Backend-Server weiter.

Dies bedeutet, dass HAProxy mit oder ohne Singleton-Channels nicht mehrere gRPC-Anfragen von einem einzelnen Client an verschiedene Server sendet. HAProxy ist jedoch immer noch nützlich mit gRPC, da es weiterhin Lastenausgleichsverbindungen von verschiedenen Clients zu verschiedenen Back-Ends laden wird.

+0

_Doch ist HAProxy immer noch nützlich mit gRPC, weil es immer noch Lastverbindungen von verschiedenen Clients zu verschiedenen Backends laden wird. Ich hatte die gleiche Annahme, aber es ist nicht so passiert, als ich den Singleton-Kanal erstellt habe. Alle Anfragen von allen Clients gingen nur an einen Server. Ich weiß es, weil ich die Kanalanfragen auf Graylog protokolliert habe. – GawdePrasad