常用负载均衡算法
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初始化为零。
由于各服务器处理请求的时间不同,因此同一时刻各服务器的当前连接数都不同。此算法将到来的请求分配给当前连接数最少的服务器。处理速度越快的服务器将被分配到越多的连接。
可以用来hash的输入有很多,比如源IP地址,URL,cookie
1、解析nginx负载均衡
2、加权轮叫调度(Weighted Round-Robin Scheduling)
转载:http://blog.lastww.com/2013/07/09/load-blance-algorithm/
随机
通过随机数生成算法从服务器组中选取一个,然后把请求发送给它。
轮询
所有的服务器组成一个队列,不管连接数、响应时间,从队列首取出一个,然后放到队尾,不断循环。最终把所有的请求平均分给所有的服务器。适用于服务器性能差异不大的情况。
加权轮询
给每台服务器加一个权重值,高权重的服务器将被分配高比例的连接。假设有一组服务器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/
相关文章推荐
- 负载均衡技术沙龙1期(关于咱的图片)
- 负载均衡沙龙活动第二期现场问答汇集
- 流量引导:网络世界的负载均衡解密
- 流量引导:网络世界的负载均衡解密
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 浅谈sqlserver的负载均衡问题
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法