• dubbo user guider笔记之五Demos----LoadBalance


    LoadBalance (负载均衡)

    Dubbo提供了为集群的负载均衡提供了一系列的平衡策略,默认的是 random
    也可以自己写一个。

    内置的策略

    Random LoadBalance(随机)

    • Ramdom,根据权重随机
    • 调用的越多,分布越均匀。当使用权重时,结果也是与之一致的,可以根据它来帮助我们动态的改变provider的权重。

    RoundRobin LoadBalance(轮询)

    • RoundRobin,
    • 流量流到性能差一点的providers时有可能会造成请求的堆积。假如一个provider处理请求的速度比较慢,但是它依然存活着,它任然会以正常的速度接收请求。通过轮询算法,consumers会按照预定的速率继续向provider发送请求,它并不能知道此时provider的状态已经很差了。最后,会有很多请求卡在那。

    LeastActive LoadBalance

    • LeastActive,基于actives的一个随机算法,actives的意思是consumer 发出去了一些请求但是还没有返回。
    • 基于此,性能差一点的provider会分配到一些少一点的请求。

    ConsistentHash LoadBalance

    • ConsistentHash,相同参数的请求总会被发送给同一个provider。
    • 当provider宕机了,原本发送给这个provider的请求,会根据虚拟节点的算法,比较均匀的分配给其他的provider,不会造成很剧烈的变化。
    • 一致性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" />
    

    Configuration(配置)

    Server service level

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

    Client service level

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

    Server method level

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

    Client method level

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

    自定义负载均衡算法

    1. 拓展接口org.apache.dubbo.rpc.cluster.LoadBalance
    2. 配置如下
    <dubbo:protocol loadbalance="xxx" />
    或
    <dubbo:provider loadbalance="xxx" />
    
    1. 算法实现:XxxLoadBalance.java:
    package com.xxx;
     
    import org.apache.dubbo.rpc.cluster.LoadBalance;
    import org.apache.dubbo.rpc.Invoker;
    import org.apache.dubbo.rpc.Invocation;
    import org.apache.dubbo.rpc.RpcException; 
     
    public class XxxLoadBalance implements LoadBalance {
        public <T> Invoker<T> select(List<Invoker<T>> invokers, Invocation invocation) throws RpcException {
            // ...
        }
    }
    
    1. 配置SPI
    META-INF/dubbo/org.apache.dubbo.rpc.cluster.LoadBalance:
    
    1. 目录结构
    src
     |-main
        |-java
            |-com
                |-xxx
                    |-XxxLoadBalance.java (LoadBalance implementation)
        |-resources
            |-META-INF
                |-dubbo
                    |-org.apache.dubbo.rpc.cluster.LoadBalance (plain text file with the content: xxx=com.xxx.XxxLoadBalance)
    
  • 相关阅读:
    [Lydsy1706月赛]大根堆
    某考试 T1 Function
    [SHOI2016] 随机序列
    某考试 T1 至危警告
    某考试 T2 yja
    bzoj1880 [Sdoi2009]Elaxia的路线
    bzoj1804 [Ioi2007]Flood 洪水
    bzoj4546 codechef XRQRS
    bzoj4547 小奇的集合
    bzoj1443 [JSOI2009]游戏Game
  • 原文地址:https://www.cnblogs.com/po-shi/p/11251724.html
Copyright © 2020-2023  润新知