您的位置:首页 > 其它

常用负载均衡算法

2015-10-11 20:45 330 查看
在服务器集群中,为了避免某一台服务器因过载而崩溃,除了每台服务器限定了最大连接数外,还对服务器的负载进行了均分。本文介绍了几个常见的负载均衡算法。


随机

通过随机数生成算法从服务器组中选取一个,然后把请求发送给它。


轮询

所有的服务器组成一个队列,不管连接数、响应时间,从队列首取出一个,然后放到队尾,不断循环。最终把所有的请求平均分给所有的服务器。适用于服务器性能差异不大的情况。


加权轮询

给每台服务器加一个权重值,高权重的服务器将被分配高比例的连接。假设有一组服务器S = {S0, S1, …, Sn-1},W(Si)表示服务器Si的权值,一个指示变量i表示上一次选择的服务器,指示变量cw表示当前调度的权值,max(S)表示集合S中所有服务器的最大权值,gcd(S)表示集合S中所有服务器权值的最大 公约数。变量i初始化为-1,cw初始化为零。
while (true) {
i = (i + 1) mod n;
if (i == 0) {
cw = cw - gcd(S);
if (cw <= 0) {
cw = max(S);
if (cw == 0)
return NULL;
}
}
if (W(Si) >= cw)
return Si;
} 此算法的思想是先把请求分配给高权重的机器,然后降低其权值,直到有一个机器的权值小于它,才把请求分配给权值第二大的机器。


最少连接

由于各服务器处理请求的时间不同,因此同一时刻各服务器的当前连接数都不同。此算法将到来的请求分配给当前连接数最少的服务器。处理速度越快的服务器将被分配到越多的连接。


哈希

可以用来hash的输入有很多,比如源IP地址,URL,cookie


参考

1、解析nginx负载均衡

2、加权轮叫调度(Weighted Round-Robin Scheduling)

转载:http://blog.lastww.com/2013/07/09/load-blance-algorithm/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  负载均衡 算法