China Open source community
站内导航:
站内排行前50热点文章

精华文章  GDB调试精粹及使用实例
普通文章  STL中map用法详解
精华文章  负载均衡软件比较(Hapr...
普通文章  头文件的重复引用
普通文章  递归函数的调用过程
普通文章  TCP三次握手/四次挥手详解
普通文章  epoll的实现原理
普通文章  贪心策略的理论基础——...
普通文章  BMH算法原理与实现(模...
普通文章  http请求的详细过程
普通文章  DP动态规划
普通文章  GNU LD用法
普通文章  排列组合与回溯算法
普通文章  Linux内核中的红黑树
精华文章  linux下使用minicom的几...
普通文章  Linux socket编程之套接字
精华文章  Android线程模型
精华文章  enum类型的本质
普通文章  Java开源Html解析类库
普通文章  linux源代码包(.tar.g...
普通文章  L.A.M.P配置过程
普通文章  linux设置环境变量的方法
普通文章  python的memcache和jso...
普通文章  应用程序二进制接口---ABI
普通文章  memcached server LRU ...
普通文章  gcc编译过程概述
普通文章  Java多线程实现简单实例
普通文章  android核心模块及相关...
普通文章  linux内核编译问题
普通文章  brk和sbrk详述
普通文章  Python程序员常用的IDE...
普通文章  C/C++程序员常见面试题...
普通文章  优化C语言代码(程序员必...
普通文章  Unix操作系统的历史演变
普通文章  发行版发布:CentOS 5.4
普通文章  模版函数指针,C++委托...
普通文章  在windows中构建gtk开发...
普通文章  在ubuntu9.10下安装QT4...
普通文章  关于Qvariant类--万能的...
普通文章  Debian sudo 设置
普通文章  i++循环与i--循环的执行...
普通文章  busybox1.15.x 交叉编译
普通文章  python非贪婪,多行匹配...
普通文章  cscope使用简介
普通文章  关于僵死进程zombie
普通文章  [翻译]Django初窥
普通文章  函数指针传递和全局指针...
普通文章  Android Porting Exper...
普通文章  判断链表是否存在环并找...
普通文章  递归思想的妙用

 
 
 
当前位置: 首页 >> 网络协议与安全 >> 负载均衡的基本算法
 
 

负载均衡的基本算法

作者:      来源:zz     发表时间:2008-04-28     浏览次数:      字号:    

平衡算法设计的好坏直接决定了集群在负载均衡上的表现,设计不好的算法,会导致集群的负载失衡。一般的平衡算法主要任务是决定如何选择下一个集群节点,然后将新的服务请求转发给它。有些简单平衡方法可以独立使用,有些必须和其它简单或高级方法组合使用。而一个好的负载均衡算法也并不是万能的,它一般只在某些特殊的应用环境下才能发挥最大效用。因此在考察负载均衡算法的同时,也要注意算法本身的适用面,并在采取集群部署的时候根据集群自身的特点进行综合考虑,把不同的算法和技术结合起来使用。

3.1 轮转法:

    轮转算法是所有调度算法中最简单也最容易实现的一种方法。在一个任务队列里,队列的每个成员(节点)都具有相同的地位,轮转法简单的在这组成员中顺序轮转选择。在负载平衡环境中,均衡器将新的请求轮流发给节点队列中的下一节点,如此连续、周而复始,每个集群的节点都在相等的地位下被轮流选择。这个算法在DNS域名轮询中被广泛使用。

    轮转法的活动是可预知的,每个节点被选择的机会是1/N,因此很容易计算出节点的负载分布。轮转法典型的适用于集群中所有节点的处理能力和性能均相同的情况,在实际应用中,一般将它与其他简单方法联合使用时比较有效。

3.2 散列法

    散列法也叫哈希法(HASH),通过单射不可逆的HASH函数,按照某种规则将网络请求发往集群节点。哈希法在其他几类平衡算法不是很有效时会显示出特别的威力。例如,在前面提到的UDP会话的情况下,由于轮转法和其他几类基于连接信息的算法,无法识别出会话的起止标记,会引起应用混乱。

    而采取基于数据包源地址的哈希映射可以在一定程度上解决这个问题:将具有相同源地址的数据包发给同一服务器节点,这使得基于高层会话的事务可以以适当的方式运行。相对称的是,基于目的地址的哈希调度算法可以用在Web Cache集群中,指向同一个目标站点的访问请求都被负载平衡器发送到同一个Cache服务节点上,以避免页面缺失而带来的更新Cache问题。

3.3 最少连接法

    在最少连接法中,平衡器纪录目前所有活跃连接,把下一个新的请求发给当前含有最少连接数的节点。这种算法针对TCP连接进行,但由于不同应用对系统资源的消耗可能差异很大,而连接数无法反映出真实的应用负载,因此在使用重型Web服务器作为集群节点服务时(例如Apache服务器),该算法在平衡负载的效果上要打个折扣。为了减少这个不利的影响,可以对每个节点设置最大的连接数上限(通过阈值设定体现)。

3.4 最低缺失法

    在最低缺失法中,平衡器长期纪录到各节点的请求情况,把下个请求发给历史上处理请求最少的节点。与最少连接法不同的是,最低缺失记录过去的连接数而不是当前的连接数。

3.5 最快响应法

    平衡器记录自身到每一个集群节点的网络响应时间,并将下一个到达的连接请求分配给响应时间最短的节点,这种方法要求使用ICMP包或基于UDP包的专用技术来主动探测各节点。

    在大多数基于LAN的集群中,最快响应算法工作的并不是很好,因为LAN中的ICMP包基本上都在10ms内完成回应,体现不出节点之间的差异;如果在 WAN上进行平衡的话,响应时间对于用户就近选择服务器而言还是具有现实意义的;而且集群的拓扑越分散这种方法越能体现出效果来。这种方法是高级平衡基于拓扑结构重定向用到的主要方法。

3.6 加权法

    加权方法只能与其他方法合用,是它们的一个很好的补充。加权算法根据节点的优先级或当前的负载状况(即权值)来构成负载平衡的多优先级队列,队列中的每个等待处理的连接都具有相同处理等级,这样在同一个队列里可以按照前面的轮转法或者最少连接法进行均衡,而队列之间按照优先级的先后顺序进行均衡处理。在这里权值是基于各节点能力的一个估计值。

编辑 webmaster

 
 
 
评论
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •  
    中国源码网 - www.YuanMa.org - 中国 开放源代码+编程 社区