实现负载均衡的基本算法

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

一、轮转法:

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

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

二、 散列法

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

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

三、最少连接法

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

四、 最低缺失法

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

五、最快响应法

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

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

六、加权法

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

网上比较详细的说明

实现负载均衡的算法

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

  1、轮询调度

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

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

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

  最小连接调度(Least-Connection Scheduling)算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况。

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

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

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

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

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

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

  LBLCR调度算法将“热门”站点映射到一组Cache服务器(服务器集合),当该“热门”站点的请求负载增加时,会增加集合里的Cache服务器,来处理不断增长的负载; 当该“热门”站点的请求负载降低时,会减少集合里的Cache服务器数目。这样,该“热门”站点的映像不太可能出现在所有的Cache服务器上,从而提供Cache集群系统的使用效率。

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

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

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

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

  和目标地址散列调度类似,唯一的区别是按照源地址为散列函数的散列键。

  在实际应用中,源地址散列调度和目标地址散列调度可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口。

实现负载均衡的基本算法,布布扣,bubuko.com

时间: 2024-10-09 22:00:36

实现负载均衡的基本算法的相关文章

负载均衡的那些算法们

上周发了问卷,想了解一下大家对老王有没有什么建议,然后好多朋友都投了票,想了解编程技术和服务器架构的干货,所以接下来会先聊聊编程和架构相关的算法,然后大概在6月下旬会跟大家聊聊面试那些事儿(老王到目前大约参加了几百次的面试,可以从面试官的角度来聊聊不一样的面试).老王聊技术有个特点,就是绝不假大空,只求贴地飞行.所以,聊的东西一定会跟实际有关联,大家在平时也有可能用得着. 今天跟大伙儿聊的是负载均衡相关的一些算法.老王在百度的时候(估计是5-6年前),写过一个通用的基础库(不知道现在还有没有部门

负载均衡的基本算法

负载均衡的基本算法,主要有以下几种(参考F5产品): 随机:负载均衡方法随机的把负载分配到各个可用的服务器上,通过随机数生成算法选取一个服务器,然后把连接发送给它.虽然许多均衡产品都支持该算法,但是它的有效性一直受到质疑,除非把服务器的可运行时间看的很重. 轮询:轮询算法按顺序把每个新的连接请求分配给下一个服务器,最终把所有请求平分给所有的服务器.轮询算法在大多数情况下都工作的不错,但是如果负载均衡的设备在处理速度.连接速度和内存等方面不是完全均等,那么效果会更好. 加权轮询:该算法中,每个机器

[转帖]利用nginx实现负载均衡 | 哈希算法,sticky模块实现session粘滞

利用nginx实现负载均衡 | 哈希算法,sticky模块实现session粘滞 2018年08月02日 10:06:03 Minza 阅读数 483 https://blog.csdn.net/ha_weii/article/details/81350087 学习一下如何使用sticky 版权声明:创作不易,转载请注明出处 https://blog.csdn.net/ha_weii/article/details/81350087 一,普通的负载均衡 1,启动nginx服务器 之前已经把/us

负载均衡的常用算法

1.随机算法: 负载均衡方法随机的把负载分配到各个可用的服务器上,通过随机数生成算法选取一个服务器,然后把连接发送给它.同样一个请求一会落到机器A,一会落到机器B上,Cache会被频繁淘汰,使得cache命中率低. 2.轮询算法: 轮询算法按顺序把每个新的连接请求分配给下一个服务器,最终把所有请求平分给所有的服务器.轮询算法在大多数情况下都工作的不错,但是如果负载均衡的设备在处理速度.连接速度和内存等方面不是完全均等,那么效果就会不好.当然cache命中率也不高 3.加权轮询算法: 每个机器接受

nginx 负载均衡(默认算法)

使用 nginx 的upstream模块只需要几步就可以实现一个负载均衡: 在 nginx 配置文件中添加两个server server { listen 81; server_name 192.168.1.129; root /var/www/html1; } server { listen 82; server_name 192.168.1.129; root /var/www/html2; } 使用upstream把这两个 server 绑定到一个负载sever上提供统一入口: upstr

LVS负载均衡模型及算法概述

集群类型 LB: Load Balancing,负载均衡 HA:High Availability, 高可用 HP:High Performance, 高性能   负载均衡 负载均衡设备 Hardware: F5,BIG IP Citrix,Netscaler A10 最便宜 Software: 四层 性能高,支持的特性少 LVS 中国 七层:反向代理,性能略次于四层,支持高级特性 nginx 俄罗斯 http.smtp.pop3.imap haproxy 主要应用场景http.其他tcp(my

LVS NAT和DR的负载均衡,及算法

LVS负载均衡集群介绍负载均衡集群的作用:提供一种廉价.有效.透明的方法,来扩展网络设备和服务器的负载带宽.增加吞吐量,加强网络数据处理能力.提高网络的灵活性和可用性.1)把单台计算机无法承受的大规模的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间,提升用户体验.2)单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高.3)7*24小时的服务保证,任意一个或多个设备节点设备宕机,不能影响到业务.在负载均

负载均衡原理

双机热备:有流量经过的设备即为主设备,为流量经过的设备即为备份设备 防火墙基于会话状态的数据同步:批量备份.实时备份批量备份:先运行的防火墙会将已有的会话表项一次性同步到加入的设备实时备份:保证表项完全一致,防火墙在产生新表项或表项变化后会及时备份到另一台设备上 双机热备:只支持数据同步.不支持配置同步 链路负载均衡:策略路由策略路由配置不方便,不够灵活,无法适应动态网络结构变化,策略路由无法根据带宽进行报文分发链路负载均衡通过动态算法,能够在多链路中进行负载均衡,算法配置简单,且具有自适应能力

基于LVS的负载均衡

一.计算机集群 1.什么是计算机集群 计算机集群简称集群是一种计算机系统, 它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式.集群计算机通常用来改进单个计算机的计算速度和/或可靠性.一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多. 2.使用集群的目的 提高性能 降低成本 提高可扩展性 增强可靠性 3.集群分类 集群分为同