基本的网络负载均衡算法

为保障原创权益,连接为:http://www.agilesharp.com/u/yanyangtian/Blog.aspx/t-198

均衡算法设计的好坏直接决定了集群在负载均衡上的表现,设计不好的算法,会导致集群的负载失衡,一般的均衡算法主要的任务是决定如何选择下一个集群结点,然后将新的服务请求转发给他。有些简单均衡算法可以独立使用,有些必须和其他简单或高级算法组合使用。

  而一个好的负载均衡算法也并不是万能的,他一般只在某些特殊的应用环境下才发挥最大效用,因此在考察负载均衡算法的同时,也要注意算法本身的使用面,并在采取集群部署的时候根据集群自身的特点进行综合考虑,把不同的算法和技术结合起来使用。

负载均衡算法1:轮转法

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

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

负载均衡算法2 散列法

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

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

负载均衡算法3 最少连接法

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

负载均衡算法4 最低缺失法

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

负载均衡算法5 最快响应法

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

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

负载均衡算法6 加权法

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

 

 

 

posted @ 2012-04-03 15:49  指尖流淌  阅读(1809)  评论(0编辑  收藏  举报