2016-08-01 47 views
1

我們使用Grpc(C#庫)和protobuf在本地網絡中執行內部RPC。我正在使用HAProxy執行Roundrobin平衡,以便將負載分配到2臺服務器中的一臺。由於我創建了一個Singleton通道並使用它來執行所有RPC調用,因此負載均衡不會發生。當我在創建GRPC Channel時將代理IP作爲服務器列表提供時,IP不會解析爲實際的物理IP,而只會在Channel對象的ResolvedTarget字段中顯示代理IP。我的問題是,我怎樣纔能有Singleton對象的每個服務器,仍然使用HAproxy做負載平衡?或者不可能使用HAProxy並且同時將通道用作Singleton對象?如何在HAProxy與Grpc一起使用時實現IP地址的負載均衡?

回答

0

您沒有看到任何負載平衡,因爲只要有可能,gRPC就會使用單個持久性TCP連接向服務器發送請求。所以,當你打開一個到HAProxy的連接時,它會「負載均衡」到單個連接到其中一臺服務器。然後,只要應用程序運行,該連接就會保持打開狀態,因此負載均衡功能再也不會被重複使用。

您將連接的IP地址看作代理的IP地址,因爲您實際上已連接到代理。 HAProxy將您的數據包轉發到後端服務器。

這意味着無論單通道還是單通道,HAProxy都不會將多個gRPC請求從單個客戶端發送到不同的服務器。但是,對於gRPC,HAProxy仍然有用,因爲它仍然會將來自不同客戶端的連接負載均衡到不同的後端。

+0

_但是,HAProxy對於gRPC仍然有用,因爲它仍然會將來自不同客戶端的連接負載均衡到不同的後端。我有相同的假設,但是當我創建單身通道時並沒有發生這種情況。來自所有客戶端的所有請求只發送到一臺服務器。我知道,因爲我正在將通道請求記錄到graylog。 – GawdePrasad