什么是负载均衡?
在集群负载均衡时,Dubbo提供了多种均衡策略,缺省的话位random随机调用。
在具体实现上,通过负载均衡算法得出Consumer(消费者)应该去去访问那个provider(服务提供者)实例。
比如:三个用户(Consumer)去访问一个商店(Provider)商店里面有十颗糖,每次只能购买一颗,有可能A用户购买到7颗,B用户3颗,C用户一颗没有 ,
.按权重设置随机概率,
.有可能会出现一个用户拿到大量资源的情况,但是随着调用量越大,分配得就越均匀,同时有利于动态调整提供者权重。
.缺点:存在慢的提供者累计请求问题,比如:第二个用户磨磨蹭蹭,导致请求到第二台用户的时候就卡在那里,久而久之,所有请求都卡在第二台用户上,这个时候就可能会导致Dubbo常见的雪崩问题。
平滑加权算法解读:
普通情况下将会出现 A A A B B C 这样的调度情况,会导致某段时间调度过于集中的问题,于是借鉴Nginx的平滑加权算法解决这个问题。
轮前加和权重 = 起始轮( A(3),B(2),C(1) ) + 轮后权重
本轮胜者 = 权重最大者
轮后权重 = 胜者 - 合计权重
合计权重 = A权 + B权 + C权
下一轮第七轮应该是 A(3),B(2),C(1) 我们会发现又回到了起始轮,同时计算出来调用过程将变成A B A C B A,从结果可以看出来每个用户并不会出现某个时间段过于集中调用的情况。
LeastActive 解读理解:
当使用上面两种轮询策略的时候,经常出现一个用户堵塞导致雪崩问题,可以更换成LeastAvtive轮询策略,让活跃度高(代表长时间占用,执行任务效率低)的提供者收到更少的请求
ShortestResponse ConsistentHash
负载均衡配置 Spring配置:
服务端服务级别
客户端服务级别
服务端方法级别
客户端方法级别
属性配置发布服务的,负载均衡策略名称,来部署负载均衡策略