dubbo_负载均衡算法

dubbo_负载均衡算法

ID:33481079

大小:248.50 KB

页数:13页

时间:2019-02-26

dubbo_负载均衡算法_第1页
dubbo_负载均衡算法_第2页
dubbo_负载均衡算法_第3页
dubbo_负载均衡算法_第4页
dubbo_负载均衡算法_第5页
资源描述:

《dubbo_负载均衡算法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、负载均衡算法在集群负载均衡时,Dubbo提供了4种均衡策略,如:RandomLoadBalance(随机均衡算法)、;RoundRobinLoadBalance(权重轮循均衡算法)、LeastActionLoadBalance(最少活跃调用数均衡算法)、ConsistentHashLoadBalance(一致性Hash均衡算法)。缺省时为Random随机调用。这四种算法的原理简要介绍如下:1、RoundRobinLoadBalanceRound-Robin既是轮询算法,是按照公约后的权重设置轮询比率,即权重轮询算法(WeightedRound-Robin),它是基于轮询算法改进而来的

2、。这里之所以写RoundRobin是为了跟Dubbo中的内容保持一致。轮询调度算法的原理是:每一次把来自用户的请求轮流分配给内部中的服务器。如:从1开始,一直到N(其中,N是内部服务器的总个数),然后重新开始循环。该算法的优点:其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。该算法的缺点:轮询调度算法假设所有服务器的处理性能都相同,不关心每台服务器的当前连接数和响应速度。当请求服务间隔时间变化比较大时,轮询调度算法容易导致服务器间的负载不平衡。所以此种均衡算法适合于服务器组中的所有服务器都有相同的软硬件配置并且平均服务请求相对均衡的情况。但是,在实际情况中,可能并不是

3、这种情况。由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。权重轮询调度算法流程假设有一组服务器S={S0,S1,…,Sn-1},W(Si)表示服务器Si的权值,一个指示变量i表示上一次选择的服务器,指示变量cw表示当前调度的权值,max(S)表示集合S中所有服务器的最大权值,gcd(S)表示集合S中所有服务器权值的最大公约数。变量i初始化为-1,cw初始化为零。其算法如下:while(true){  i=(i+1)modn;  if(i==0){     cw=cw-gc

4、d(S);     if(cw<=0){       cw=max(S);       if(cw==0)         returnNULL;     }  }  if(W(Si)>=cw)    returnSi;}这种算法的逻辑实现如图2所示,图中我们假定四台服务器的处理能力为3:1:1:1。                                     图1权重轮询调度实现逻辑图示由于权重轮询调度算法考虑到了不同服务器的处理能力,所以这种均衡算法能确保高性能的服务器得到更多的使用率,避免低性能的服务器负载过重。所以,在实际应用中比较常见。2、ConsistentH

5、ashLoadBalance一致性Hash,相同参数的请求总是发到同一个提供者。一:一致性Hash算法可以解决服务提供者的增加、移除及挂掉时的情况,能尽可能小的改变已存在key映射关系,尽可能的满足单调性的要求。二:一致性Hash通过构建虚拟节点,能尽可能避免分配失衡,具有很好的平衡性。一致性Hash下面就来按照5个步骤简单讲讲consistenthash算法的基本原理。因为以下资料来自于互联网,现说明几点:一、下面例子中的对象就相当于Client发的请求,cache相当于服务提供者。环形hash空间考虑通常的hash算法都是将value映射到一个32为的key值,也即是0~2^32

6、-1次方的数值空间;我们可以将这个空间想象成一个首(0)尾(2^32-1)相接的圆环,如下面图2所示的那样。图2环形hash空间把对象映射到hash空间接下来考虑4个对象object1~object4,通过hash函数计算出的hash值key在环上的分布如图3所示。hash(object1)=key1;……hash(object4)=key4;图34个对象的key值分布把cache映射到hash空间Consistenthashing的基本思想就是将对象和cache都映射到同一个hash数值空间中,并且使用相同的hash算法。假设当前有A,B和C共3台cache,那么其映射结果将如图4

7、所示,他们在hash空间中,以对应的hash值排列。hash(cacheA)=keyA;……hash(cacheC)=keyC;图4cache和对象的key值分布说到这里,顺便提一下cache的hash计算,一般的方法可以使用cache机器的IP地址或者机器名作为hash输入。把对象映射到cache现在cache和对象都已经通过同一个hash算法映射到hash数值空间中了,接下来要考虑的就是如何将对象映射到cache上面了。在这个环形空间中,如果沿着顺时针

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。