hprose / hprose-golang

Hprose is a cross-language RPC. This project is Hprose for Golang.
MIT License
1.26k stars 205 forks source link

传入多个tcp地址建立客户端,请求的时候没有负载均衡 #79

Closed zhuxiujia closed 2 years ago

zhuxiujia commented 6 years ago
测试 请求全部集中在第一个服务器tcp://127.0.0.1:4321或者第二个tcp://127.0.0.1:4322,没有负载均衡

client := rpc.NewClient("tcp://127.0.0.1:4321","tcp://127.0.0.1:4322") var stub *Stub client.UseService(&stub)

for i:=0; i<8 ; i++ {
    fmt.Println(stub.Hello("world"))
}
andot commented 6 years ago

是多个客户端,每个客户端会从列表中随机选择一个服务器,假设你有 M 个服务器,N 个客户端,这样对于 N 个客户端来说,就是平均分配到 M 个服务器上的。对于每个客户端来说,所连接的服务器是固定的,这样你的客户端和服务器之间才可以保持会话。

zhuxiujia commented 6 years ago

如果我是 对接的consul服务发现,是1个客户端N个服务器,正确的负载均衡策略应该怎么做?是建立多个client吗?还是每发起一个请求就rpc.NewClient("tcp://127.0.0.1:4321","tcp://127.0.0.1:4322")

andot commented 6 years ago

是的,你这种情况,创建多个客户端就行了,每个服务器创建一个客户端,然后发送请求的时候,你自己选用你觉得合适的算法去选择一个。不要每个请求都创建一个客户端,那样的话,连接池就用不上了。

andot commented 2 years ago

hprose 3.0 出来了,里面有负载均衡插件,提供了多种不同的负载均衡算法,如果插件中提供的负载均衡算法都不符合需求,还可以参考已有的负载均衡插件来编写自己的负载均衡算法。