当HAProxy与Grpc一起用于负载平衡时,如何找到实际的IP地址

本文关键字:何找 地址 IP Grpc HAProxy 一起 用于 平衡 负载 | 更新日期: 2023-09-27 17:59:31

我们使用Grpc(C#库)和protobuf在本地网络中执行内部RPC。我正在使用HAProxy执行循环平衡,以便将负载分配到2台服务器中的一台。由于我正在创建一个Singleton通道,并使用它来执行所有RPC调用,因此负载平衡不会发生。当我在创建GRPC Channel时将代理IP作为服务器列表时,该IP不会解析为实际的物理IP,而是仅在Channel对象的ResolvedTarget字段中显示代理IP。我的问题是,如何为每个服务器都有Singleton对象,并且仍然使用HAproxy来进行负载平衡?或者不可能使用HAProxy同时将通道用作Singleton对象?

当HAProxy与Grpc一起用于负载平衡时,如何找到实际的IP地址

您没有看到任何负载平衡,因为只要可能,gRPC都会使用单个持久TCP连接向服务器发送请求。因此,当您打开到HAProxy的连接时,它会"负载平衡"到其中一个服务器的单个连接。然后,只要您的应用程序运行,该连接就会一直保持打开状态,因此负载平衡功能永远不会再次启用。

您将连接的IP地址视为代理的IP地址,因为您实际上已连接到代理。HAProxy将数据包转发到后端服务器。

这意味着,无论是否使用singleton Channels,HAProxy都不会将多个gRPC请求从单个客户端发送到不同的服务器。然而,HAProxy在gRPC中仍然很有用,因为它仍然可以负载平衡从不同客户端到不同后端的连接。