目录
Dubbo有五种负载策略:
第一种是加权随机
假设我们有一组服务器servers=[A,B,C],他们对应的权重为weights=[5,3,2],权重总和为10。现在把这些权重值平铺在一维坐标值上,[0,5)区间属于服务器A,[5,8)区间属于服务器B,[8,10)区间属于服务器C。接下来通过随机数生成器生成一个范围在[0,10)之间的随机数,然后计算这个随机数会落到哪个区间上就可以了。
第二种是最小活跃数
每个服务提供者对应一个活跃数active,初始情况下,所有服务提供者活跃数均为0。每收到一个请求,活跃数加1,完成请求后则将活跃数减1。在服务运行一段时间后,性能好的服务提供者处理请求的速度更快,因此活跃数下降的也越快,此时这样的服务提供者能够优先获取到新的服务请求。
第三种是一致性hash
通过hash算法,把provider的invoke和随机节点生成hash,并将这个hash投射到[0,2^32-1]的圆环上,查询的时候根据key进行md5然后进行hash,得到第一个节点的值大于等于当前hash的invoker。
第四种是加权轮询
比如服务器A、B、C权重比为5:2:1,那么在8次请求中,服务器A将收到其中的5次请求,服务器B会收到其中的2次请求,服务器C则收到其中的1次请求。
第五种是最短响应时间权重随机
计算目标服务的请求的响应时间,根据响应时间最短的服务,配置更高的权重进行随机访问。