码迷,mamicode.com
首页 > 编程语言 > 详细

负载均衡的常用算法

时间:2014-11-02 22:30:51      阅读:789      评论:0      收藏:0      [点我收藏+]

标签:style   使用   sp   strong   数据   div   on   bs   工作   

1、随机算法:

负载均衡方法随机的把负载分配到各个可用的服务器上,通过随机数生成算法选取一个服务器,然后把连接发送给它。同样一个请求一会落到机器A,一会落到机器B上,Cache会被频繁淘汰,使得cache命中率低。

2、轮询算法:

轮询算法按顺序把每个新的连接请求分配给下一个服务器,最终把所有请求平分给所有的服务器。轮询算法在大多数情况下都工作的不错,但是如果负载均衡的设备在处理速度、连接速度和内存等方面不是完全均等,那么效果就会不好。当然cache命中率也不高

3、加权轮询算法:

每个机器接受的连接数量是按权重比例分配的。这是对普通轮询算法的改进,比如你可以设定:第三台机器的处理能力是第一台机器的两倍,那么负载均衡器会把两倍的连接数量分配给第3台机器。

4、动态轮询算法:

类似于加权轮询,但是,权重值基于对各个服务器的持续监控,并且不断更新。这是一个动态负载均衡算法,基于服务器的实时性能分析分配连接,比如每个节点的当前连接数或者节点的最快响应时间等。

5、最快响应算法:

平衡器记录自身到每一个集群节点的网络响应时间,并将下一个到达的连接请求分配给响应时间最短的节点;

6、最少连接算法:

平衡器纪录目前所有活跃连接,把下一个新的请求发给当前含有最少连接数的节点。

7、哈希散列算法:

散列法也叫哈希法(HASH),通过单射不可逆的HASH函数,按照某种规则将网络请求发往集群节点,将具有相同源地址的数据包发给同一服务器。以后对相同的请求, 相同的服务器组,计算出来的hash结果相同,从而达到HASH分布的效果。

根据不同的均衡要求选择不同的均衡算法

当然:对于哈希散列算法我们

计算全部服务器的idx_key=hash(query_key+server_idx),其中计算得到idx_key最大的server_idx就是需要的idx。

 

假设开始3台后端服务器,请求用标志串 req = "abcd" 来标志,服务器用 S1, S2, S3来标志, 那么,通过对 req + Sx 合并起来计算签名就可以对每个服务器得到一个数值:

 

(req = "abcd" + S1) = K1
(req = "abcd" + S2) = K2
(req = "abcd" + S3) = K3
计算的方法可以使用crc,也可以使用MD5,目的的得到一个*散列*的数字,这样在K1,K2,K3中 必定有一个最大的数值,假设是K2,那么可以将请求req扔给S2,这样,以后对相同的请求, 相同的服务器组,计算出来的结果必定是K2最大,从而达到HASH分布的效果。
巧妙的地方在于,新增或者删除一台服务器的时候,不会引起已有服务器的cache大规模失效, 假设新增一台服务器S4,那么对S1,S2,S3计算的K值都完全相同,那么对S4可以计算得到一个新值K4,如果计算K的算法足够散列,那么原先计算到 S1,S2,S3的请求,理论上都会有1/4的请求新计算得到的K4比原先的K大, 那么这1/4的请求会转移到S4,从而新增的S4服务器会负担1/4的请求,原先的S1,S2,S3也只会负担原先的3/4。

cache命中率最高,并且新增和删除(考虑到服务器宕机的情况)服务器的影响最小

负载均衡的常用算法

标签:style   使用   sp   strong   数据   div   on   bs   工作   

原文地址:http://www.cnblogs.com/cdwp8/p/4070007.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!