dubbo的几种负载策略分别为随机、轮询、最小活跃数;随机策略可能取到相同的随机数,导致负载不均衡;轮询策略、最少活跃调用数(LeastActive LoadBalance )看了源码都是针对每个方法的统计,并不是针对整个provider 的负载均衡,记录每个服务每个方法的调用次数,然后获取该方法调用次数最小的服务进行请求。该策略可以有效避免”相同方法”不再发往处理该方法数量小的服务器上。这还是无法将请求分发到活跃数小的服务器。请问有针对整个provider 服务器的最小活跃数的负载策略吗?另外当集群在高并发时出现,一两台机器会出现Thread pool is EXHAUSTED,200个线程耗尽,像这种场景,用哪种轮询策略会比较好?谢谢。
Random LoadBalance
随机,按权重设置随机概率。
在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。
调用量大比较建议Random
see loadbalance strategies here:
http://dubbo.apache.org/zh-cn/docs/user/demos/loadbalance.html
1、随机算法在调用量大的情况下,长的时间维度是均衡的,但是瞬时的均衡性不是太好,这就会导致某个时候有一台机器负载非常大,当然是存在一定概率性。长时间肯定是均衡的,短时间就不一定了,而往往出问题都是在那较短的时间发生。
2、很理想的方法是,LeastActive LoadBalance,但是这个方法我不太明白为什么计数针对的是每个方法,而不是整个provider。整个每个方法的话,其实还是不能保证整个provider的均衡。比如有一台机器上A方法卡死,B方法再该服务器上调用的次数最少,此时会把B方法调用分配到该机器上,这样就会出现问题了。如果最小活跃数是针对整个provider的话,这个问题就好多了。不是太明白作者这样做的用意,后期是不是可以支持针对整个provider的LeastActive实现。
@ningyu1
Most helpful comment
1、随机算法在调用量大的情况下,长的时间维度是均衡的,但是瞬时的均衡性不是太好,这就会导致某个时候有一台机器负载非常大,当然是存在一定概率性。长时间肯定是均衡的,短时间就不一定了,而往往出问题都是在那较短的时间发生。
2、很理想的方法是,LeastActive LoadBalance,但是这个方法我不太明白为什么计数针对的是每个方法,而不是整个provider。整个每个方法的话,其实还是不能保证整个provider的均衡。比如有一台机器上A方法卡死,B方法再该服务器上调用的次数最少,此时会把B方法调用分配到该机器上,这样就会出现问题了。如果最小活跃数是针对整个provider的话,这个问题就好多了。不是太明白作者这样做的用意,后期是不是可以支持针对整个provider的LeastActive实现。