Dubbo 框架学习笔记十二
Dubbo 框架学习之负载均衡:
LoadBalance(负载均衡)的职责是将网络请求或者其他形式的负载“均摊”到不同的服务节点上,从而避免服务集群中部分节点压力过大、资源紧张,而另一部分节点比较空闲的情况。
通过合理的负载均衡算法,我们希望可以让每个服务节点获取到适合自己处理能力的负载,实现处理能力和流量的合理分配。常用的负载均衡可分为软件负载均衡(Nginx、Haproxy)和硬件负载均衡(主要有 F5)。
Dubbo 提供了 5 种负载均衡实现,分别是:
基于 Hash 一致性的 ConsistentHashLoadBalance;
基于权重随机算法的 RandomLoadBalance;
基于最少活跃调用数算法的 LeastActiveLoadBalance;
基于加权轮询算法的 RoundRobinLoadBalance;
基于最短响应时间的 ShortestResponseLoadBalance 。
LoadBalance 是一个扩展接口,默认使用的扩展实现是 RandomLoadBalance。
ConsistentHashLoadBalance 底层使用一致性 Hash 算法实现负载均衡。
RandomLoadBalance 使用的负载均衡算法是加权随机算法。RandomLoadBalance 是一个简单、高效的负载均衡实现,它也是 Dubbo 默认使用的 LoadBalance 实现。RandomLoadBalance 中 doSelect() 方法的实现,其核心逻辑分为三个关键点:
计算每个 Invoker 对应的权重值以及总权重值;
当各个 Invoker 权重值不相等时,计算随机数应该落在哪个 Invoker 区间中,返回对应的 Invoker 对象;
当各个 Invoker 权重值相同时,随机返回一个 Invoker 即可。
版权声明: 本文为 InfoQ 作者【风翱】的原创文章。
原文链接:【http://xie.infoq.cn/article/80035bac447bbbaf45bba7332】。文章转载请联系作者。
评论