负载均衡基础(经常使用)算法

从这个博客转载: http://blog.csdn.net/u014649204/article/details/25115039

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

3.1 轮转法:

轮转算法是全部调度算法中最简单也最easy实现的一种方法。

在一个任务队列里。队列的每一个成员(节点)都具有同样的地位。轮转法简单的在这组成员中顺序轮转选择。

在负载平衡环境中。均衡器将新的请求轮流发给节点队列中的下一节点,如此连续、周而复始。每一个集群的节点都在相等的地位下被轮流选择。这个算法在DNS域名轮询中被广泛使用。

轮转法的活动是可预知的,每一个节点被选择的机会是1/N。因此非常easy计算出节点的负载分布。

轮转法典型的适用于集群中全部节点的处理能力和性能均同样的情况,在实际应用中,一般将它与其它简单方法联合使用时比較有效。

3.2 散列法

散列法也叫哈希法(HASH),通过单射不可逆的HASH函数。依照某种规则将网络请求发往集群节点。哈希法在其它几类平衡算法不是非常有效时会显示出特别的威力。

比如,在前面提到的UDP会话的情况下,因为轮转法和其它几类基于连接信息的算法,无法识别出会话的起止标记,会引起应用混乱。

而採取基于数据包源地址的哈希映射能够在一定程度上解决问题:将具有同样源地址的数据包发给同一server节点,这使得基于高层会话的事务能够以适当的方式执行。

相对称的是,基于目的地址的哈希调度算法能够用在Web Cache集群中,指向同一个目标网站的訪问请求都被负载平衡器发送到同一个Cache服务节点上,以避免页面缺失而带来的更新Cache问题。

3.3 最少连接法

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

3.4 最低缺失法

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

3.5 最快响应法

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

在大多数基于LAN的集群中,最快响应算法工作的并非非常好,由于LAN中的ICMP包基本上都在10ms内完毕回应,体现不出节点之间的差异;假设在 WAN上进行平衡的话,响应时间对于用户就近选择server而言还是具有现实意义的;并且集群的拓扑越分散这样的方法越能体现出效果来。

这样的方法是高级平衡基于拓扑结构重定向用到的主要方法。

3.6 加权法

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

在这里权值是基于各节点能力的一个预计值。

网上比較具体的说明

实现负载均衡的算法

  我们知道,负载均衡器在负载均衡设备中的作用是至关重要的,它起着承上启下的作用。一方面接收用户的网络请求,一方面把请求依照某种算法转接到特定的应用server中,实现负载均衡。所以,负载均衡器中的算法是至关重要的。大多数负载均衡设备实现了下面多种算法。

  1、轮询调度

  轮询调度(Round Robin Scheduling)算法就是以轮询的方式依次将请求调度到不同的server。即每次调度运行i = (i + 1) mod n,并选出第i台server。算法的长处是其简洁性。它无需记录当前全部连接的状态,所以它是一种无状态调度。

  在实际实现过程中。通常会为每台server设定一个权重值,这就是权重轮询调度算法。

    2、最小连接调度(Least-Connection Scheduling)

  最小连接调度(Least-Connection Scheduling)算法是把新的连接请求分配到当前连接数最小的server。

最小连接调度是一种动态调度算法,它通过server当前所活跃的连接数来预计server的负载情况。

  在实际实现过程中,通常会为每台server设定一个权重值,这就是加权最小连接调度(Weighted Least-Connection Scheduling)

  3、 基于局部性的最少链接(LBLC)

  基于局部性的最少链接调度(Locality-Based Least Connections Scheduling,下面简称为LBLC)算法是针对请求报文的目标IP地址的负载均衡调度,眼下主要用于Cache集群系统,由于在Cache集群中客户请求报文的目标IP地址是变化的。

  LBLC调度算法先依据请求的目标IP地址找出该目标IP地址近期使用的server,若该server是可用的且没有超载,将请求发送到该server; 若server不存在。或server超载或有server处于其一半的工作负载,则用“最少链接”的原则选出一个可用的server。将请求发送到该server。

   4、带复制的基于局部性最少链接(LBLCR)

  带复制的基于局部性最少链接调度(Locality-Based Least Connections with Replication Scheduling。下面简称为LBLCR)算法也是针对目标IP地址的负载均衡。眼下主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组server的映射,而LBLC算法维护从一个目标IP地址到一台server的映射。

  LBLCR调度算法将“热门”网站映射到一组Cacheserver(server集合)。当该“热门”网站的请求负载添加时,会添加集合里的Cacheserver,来处理不断增长的负载; 当该“热门”网站的请求负载降低时,会降低集合里的Cacheserver数目。这样,该“热门”网站的映像不太可能出如今全部的Cacheserver上,从而提供Cache集群系统的使用效率。

  5、目标地址散列调度(Destination Hashing Scheduling)

  目标地址散列调度(Destination Hashing Scheduling)算法是针对目标IP地址的负载均衡,但它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台server。

  目标地址散列调度算法先依据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出相应的server,若该server是可用的且未超载,将请求发送到该server,否则返回空。

  6、 源地址散列调度(Source Hashing Scheduling)

  和目的地址散列调度类似。唯一的区别在于,根据散列函数散列密钥的源地址。

  在实践中,,源地址和目的地址哈希散列调度调度可以结合防火墙集群使用,他们可以确保整个系统的唯一入口。

时间: 2024-10-13 06:28:01

负载均衡基础(经常使用)算法的相关文章

nignx 负载均衡的几种算法介绍

负载均衡,集群必须要掌握,下面介绍的负载均衡的几种算法.   1 .轮询,即所有的请求被一次分发的服务器上,每台服务器处理请求都相同,适合于计算机硬件相同.   2.加权轮询,高的服务器分发更多的请求.按照配置的权重分发请求,比如某台服务器一次给它两个请求处理.   3.随机分配.简单实用   4.最少连接,计算计算机的处理连接数,把 请求分发给连接最少的应用服务器.应该说这是最符合负载均衡算法的.   5.源地址散列,根据来源IP 的Hash算法,获取某台服务器.这个IP的上下文信息会被存储在

负载均衡的几种算法实现。

负载均衡,集群必须要掌握,下面介绍的负载均衡的几种算法.   1 .轮询,即所有的请求被一次分发的服务器上,每台服务器处理请求都相同,适合于计算机硬件相同.   2.加权轮询,高的服务器分发更多的请求.按照配置的权重分发请求,比如某台服务器一次给它两个请求处理.   3.随机分配.简单实用   4.最少连接,计算计算机的处理连接数,把 请求分发给连接最少的应用服务器.应该说这是最符合负载均衡算法的.   5.源地址散列,根据来源IP 的Hash算法,获取某台服务器.这个IP的上下文信息会被存储在

浅析负载均衡的6种算法,Ngnix的5种算法。

浅析负载均衡的6种算法,Ngnix的5种算法.?浮生偷闲百家号03-21 10:06关注内容导读其实际效果越来越接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果.源地址哈希的思想是根据获取客户端的IP地址,通过哈希函数计算得到的一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号.采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问.不同的后端服务器可能机器的配置和当前系统的负载并不相同

LVS负载均衡-基础知识梳理

一. 集群的概念 服务器集群简称集群是一种服务器系统,它通过一组松散集成的服务器软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台服务器.集群系统中的单个服务器通常称为节点,通常通过局域网连接,但也有其它的可能连接方式.集群服务器通常用来改进单个服务器的计算速度和/或可靠性.一般情况下集群服务器比单个服务器,比如工作站或超级服务器性能价格比要高得多.集群就是一组独立的服务器,通过网络连接组合成一个组合来共同完一个任务. 说的直白点,集群就是一组相互独立的服务器,

服务器负载均衡基础概念

服务器负载均衡:按字面理解就是将网络流量负载负担.根据不同网络层次可分为二层负载.三层负载.四层负载.七层负载. 三层负载:三层负载最好理解,所以先讲三层负载.三层负载基于IP地址来分担的.对于了解NAT技术的人来说更好理解.一般拓扑如下: 负载设备(SLB)对外提供一个VIP(虚拟IP),客户端通过访问虚IP,SLB将客户端流量调调度服务器端.类似NAT中一对多效果.如客户端C1第一访问VIP调度到服务器A上,第二次访问就调度到服务器B上.我们称这种轮询调度为轮询调度算法,调度规则称为调度算法

负载均衡基础实践

使用NAT模型的TCP协议类型的lvs服务负载均衡一个php应用,如Discuz!论坛或者phpMyAdmin: 首先了解nat模型:用户端,通过访问172.16.0.146端口,调度器会将请求随机转换到,后端的连个服务器,本次采用轮回调度的方式 在调度器上的,配置 a.创建集群服务,并添加服务器  [[email protected] ~]# ipvsadm -A -t 172.16.0.146:80 -s rr  [[email protected] ~]# ipvsadm -a -t 17

负载均衡-基础-一致性哈希算法及java实现

一致性hash算法,参考: http://www.blogjava.net/hello-yun/archive/2012/10/10/389289.html 针对这篇文章,加入了自己的理解,在原有的代码上进行了修改. 1 /** 2 * 一致性hash 的java 实现 3 * @author luoqiang 4 * @data 2016/11/08 5 */ 6 public class ConsistencyHash { 7 8 public ConsistencyHash(List<No

每日一问:Nginx负载均衡的5种算法

轮询 每一个请求按时间顺序逐一的请求不同服务器,如果服务器挂掉,可以自动剔除. Weight 指定某一个服务器的轮询概率,用于后端服务器性能不均匀的情况. upstream bakend { server 192.168.0.14 weight=10; server 192.168.0.15 weight=10; } ip_hash 通过哈希用户请求的IP地址,将用户的请求转发到固定的服务器,这样可以解决Session的问题. upstream bakend { ip_hash; server

客户端负载均衡Ribbon之二:Loadbalance的几种算法以及在ribbon中的使用

Load Balance负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法. 像nginx可以使用负载均衡分配流量,ribbon为客户端提供负载均衡,dubbo服务调用里的负载均衡等等,很多地方都使用到了负载均衡. 使用负载均衡带来的好处很明显: 当集群里的1台或者多台服务器down的时候,剩余的没有down的服务器可以保证服务的继续使用 使用了更多的机器保证了机器的良性使用,不会由于某一高峰时刻导致系统cpu急剧上升 负载均衡有好几种实现策略,常见的有: 随机 (Rando