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