zoukankan      html  css  js  c++  java
  • 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)
    
  • 相关阅读:
    《Cracking the Coding Interview》——第7章:数学和概率论——题目4
    《Cracking the Coding Interview》——第7章:数学和概率论——题目3
    《Cracking the Coding Interview》——第7章:数学和概率论——题目2
    最小二乘拟合
    设置手机邮件下载文件路径
    #pragma data_seg() 共享数据// MyData段 // 进程 // DLL
    树状数组板子 x
    博弈论 x
    luogu P1147 连续自然数和 x
    luogu P1068 分数线划定 x
  • 原文地址:https://www.cnblogs.com/po-shi/p/11251724.html
Copyright © 2011-2022 走看看