Dubbo负载均衡策略及自行扩展负载均衡策略

Dubbo负载均衡策略及自行扩展负载均衡策略负载均衡在集群负载均衡时,Dubbo提供了多种均衡策略,缺省为random随机调用。可以自行扩展负载均衡策略,参见:负载均衡扩展负载均衡策略RandomLoadBalance随机,按权重设置随机概率。在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。RoundRobinLoadBalance轮循,按公约后的权重设置轮循比率。存在…

大家好,又见面了,我是你们的朋友全栈君。

负载均衡

 

在集群负载均衡时,Dubbo 提供了多种均衡策略,缺省为 random 随机调用。

可以自行扩展负载均衡策略,参见 :负载均衡扩展

负载均衡策略

Random LoadBalance

  • 随机,按权重设置随机概率。
  • 在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。

RoundRobin LoadBalance

  • 轮循,按公约后的权重设置轮循比率。
  • 存在慢的提供者累积请求的问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。

LeastActive LoadBalance

  • 最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。
  • 使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。

ConsistentHash LoadBalance

  • 一致性 Hash,相同参数的请求总是发到同一提供者。
  • 当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。
  • 算法参见:http://en.wikipedia.org/wiki/Consistent_hashing
  • 缺省只对第一个参数 Hash,如果要修改,请配置 <dubbo:parameter key="hash.arguments" value="0,1" />
  • 缺省用 160 份虚拟节点,如果要修改,请配置 <dubbo:parameter key="hash.nodes" value="320" />

配置

服务端服务级别

<dubbo:service interface="..." loadbalance="roundrobin" />

客户端服务级别

<dubbo:reference interface="..." loadbalance="roundrobin" />

服务端方法级别

<dubbo:service interface="...">
    <dubbo:method name="..." loadbalance="roundrobin"/>
</dubbo:service>

客户端方法级别

<dubbo:reference interface="...">
    <dubbo:method name="..." loadbalance="roundrobin"/>
</dubbo:reference>
 

负载均衡扩展

扩展说明

从多个服务提者方中选择一个进行调用

扩展接口

com.alibaba.dubbo.rpc.cluster.LoadBalance

扩展配置

<dubbo:protocol loadbalance="xxx" />
<!-- 缺省值设置,当<dubbo:protocol>没有配置loadbalance时,使用此配置 -->
<dubbo:provider loadbalance="xxx" />

已知扩展

  • com.alibaba.dubbo.rpc.cluster.loadbalance.RandomLoadBalance
  • com.alibaba.dubbo.rpc.cluster.loadbalance.RoundRobinLoadBalance
  • com.alibaba.dubbo.rpc.cluster.loadbalance.LeastActiveLoadBalance

扩展示例

Maven 项目结构:

src
 |-main
    |-java
        |-com
            |-xxx
                |-XxxLoadBalance.java (实现LoadBalance接口)
    |-resources
        |-META-INF
            |-dubbo
                |-com.alibaba.dubbo.rpc.cluster.LoadBalance (纯文本文件,内容为:xxx=com.xxx.XxxLoadBalance)

XxxLoadBalance.java:

package com.xxx;

import com.alibaba.dubbo.rpc.cluster.LoadBalance;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.RpcException; 

public class XxxLoadBalance implements LoadBalance {
    public <T> Invoker<T> select(List<Invoker<T>> invokers, Invocation invocation) throws RpcException {
        // ...
    }
}

META-INF/dubbo/com.alibaba.dubbo.rpc.cluster.LoadBalance:

xxx=com.xxx.XxxLoadBalance

点关注,不迷路

文章每周持续更新,可以微信搜索「 十分钟学编程 」第一时间阅读和催更,如果这个文章写得还不错,觉得有点东西的话 ~求点赞? 求关注❤️ 求分享❤️ 
各位的支持和认可,就是我创作的最大动力,我们下篇文章见!

Dubbo负载均衡策略及自行扩展负载均衡策略

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157317.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm2021.5.2激活码(最新序列号破解)

    pycharm2021.5.2激活码(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    45
  • PHP设计模式-工厂模式[通俗易懂]

    PHP设计模式-工厂模式[通俗易懂]PHP设计模式-工厂模式一、工厂模式概念工厂模式,顾名思义,像工厂的流水线,固定的规格,固定的材料,做固定的事情。工厂模式分为三种:简单工厂、工厂方法、抽象工厂,三种工厂的区别是,抽象工厂由多条产品线,而工厂方法只有一条产品线,是抽象工厂的简化。而工厂方法和简单工厂相对,大家初看起来好像工厂方法增加了许多代码但是实现的功能和简单工厂一样。但本质是,简单工厂并未严格遵循设计模式的开闭原则,当需要增加新产品时也需要修改工厂代码。但是工厂方法则严格遵守开闭原则,模式只负责抽象工厂接口,具体工厂交给客.

    2022年7月25日
    10
  • 程序猿抱大招

    程序猿抱大招

    2022年1月14日
    35
  • Oracle中字符串截取最全方法总结

    Oracle中字符串截取最全方法总结substr函数:截取字符串 语法:SUBSTR(string,start,[length])string:表示源字符串,即要截取的字符串。start:开始位置,从1开始查找。如果start是负数,则从string字符串末尾开始算起。length:可选项,表示截取字符串长度。示例:SELECTSUBSTR(‘HelloSQL!’,1)FROMdual…

    2022年5月10日
    49
  • Nacos 2.0_一个数的0倍是多少

    Nacos 2.0_一个数的0倍是多少点击关注公众号,Java干货及时送达3月20号,Nacos2.0.0正式发布了!Nacos简介:“一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。通俗点讲,Nacos…

    2022年9月20日
    1
  • Django(9)url指定默认参数[通俗易懂]

    Django(9)url指定默认参数[通俗易懂]前言当我们访问网页的时候,后台返回列表中有n条数据,此时我们会使用分页,比如一页只展示10条,但是我们访问第一页的时候大多数情况下,都会给url一个默认值,访问的时候直接展示第一页数据案例我们的

    2022年7月31日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号