负载均衡策略总结

    技术2025-07-06  23

    1 负载均衡策略分类

    1.1 软/硬件负载均衡

    软件负载均衡是通过安装一个或多个软件系统到服务器操作系统上来实现负载均衡。它的优点是基于特定的环境、配置简单,使用灵活,成本低廉,在性能上也能够满足一般的负载均衡需求。当前均衡系统中比较知名的有Nginx,LVS和HAProxy。因为需要附加一个软件系统,其本身会占用服务器资源,功能越强大就会消耗越多的系统资源,当系统本身和用户流量发展到一定规模是,可能负载均衡系统反而会成为系统的瓶颈所在。 硬件负载均衡是通过在服务器和外部网络之间安装负载均衡的硬件设备(通常叫做负载均衡器)来实现负载均衡。其独立于操作系统,不占用系统本身资源,能大大提高系统的整体性能。结合多样化、智能的均衡策略,可达到最佳的负载均衡需求。比较知名的有F5和Netscaler。硬件系统在性能上能够达到最优,软件系统中性能较高的LVS系统也仅能达到F5 60%左右性能。但是其成本相对较高。相对于一般的产品系统而言,太过于奢侈。 也有研究人员提出了一些软硬件结合的负载均衡方案,希望在性能和价格之间找到一个平衡点。以满足实际需要,但是,传统网络软硬结合负载均衡策略出现了可扩展性差、交换技 术繁琐和自我调节能力差等问题。软件负载均衡方式在一般系统的应用上还是占据了主要的地位。

    1.2 静态和动态负载均衡

    静态负载均衡策略中,不考虑节点的实际负载情况,依据设置的分配策略机械地将任务分散到节点上。算法往往比较简单,容易模型分析。如轮询和散列负载均衡算法。这些都是早期比较常用的负载均衡算法,由于没有考虑实时的负载信息,在一些情形下会导致节点负载过大,整体性能下降。 而动态的负载均衡策略是基于实时的负载信息来确定节点的分配。从策略上能够较静态策略更好的提升系统的性能,因为动态策略需要收集实时信息决策,增加了额外的系统开销,同时整个策略也会更为复杂。如果集群的规模过于庞大,动态均衡可能成为系统性能的瓶颈。动态策略也是目前负载均衡研究的热点。

    1.3 集中和分布式负载均衡

    根据负载均衡器在系统中的逻辑位置,我们可以将策略分为集中式和分布式。集中式负载均衡由一个中央负载均衡器来分配负载任务,整体架构简单,但是具有集中式系统的的弊端,单点故障和容易成为系统性能的瓶颈。分布式负载均衡运行在每个节点上,架构复杂,通信代价大,会消耗系统的整体性能。

    2 负载均衡的实现层次分类

    负载均衡系统中,能够利用各种技术实现均衡的效果。常见的方法有下面几种

    2.1 基于DNS域名解析

    DNS服务器的主要功能是提供域名(服务器名称)和IP地址的转换。本质上是一个C/S模式的数据库,存储了域名到IP的映射。DNS实现负载 均衡的机制是如图1,当用户请求域名的IP时,域名服务器通过查询负载均衡数据库,按照一定的负载均衡策略,排序多个IP地址,选择最优IP返回。其中IP的排序原则可以选择基于定时更新的服务器状态。 该方法是最早的负载均衡技术,没有性能瓶颈,具有不错的实用价值。

    2.2 基于NAT的负载均衡

    NAT(Network Address Translation,网络地址转换)主要功能是实现IP地址转换,目前实际用途就是公网IP和私网IP的转换。使用NAT负载均衡时,当请求报文到达负载均衡器,它将基于某种选择策略从服务器中选择一个最优的。并将报文的目的IP修改为请求的IP。最后将报文发送至选定的服务器。该实现方法,同样有较小开销,能够适用各种情形。但是与DNS服务器不同,由于请求报文和返回报文都需要通过NAT,会带来一定的约束。

    2.3 基于反向代理的负载均衡

    反向代理服务器能够将请求转发给内部的WEB服务器,能够提升静态网页访问速度。可以利用这个技术,将请求均匀转发给多台WEB服务器之一。 我们能够将负载均衡和代理服务器的高速缓存结合,提供一个不错的性能。但是对于每个服务开发一个代理服务器,并针对每一次代理都需要维护一个对外链接,一个对内链接,具有较高的性能开销,对于大流量,代理服务器负载很大,容易成为瓶颈。

    2.4 基于链路层的负载均衡

    与NAT负载修改IP类似,不过基于链路层的负载均衡在数据分发时,不修改ip地址,只修改目标mac地址,配置真实物理服务器集群所有机器虚拟ip和负载均衡服务器ip地址一致,达到不修改数据包的源地址和目标地址,进行数据分发的目的。 其具有比较好的性能,但是其配置比较复杂。

    2.5 基于内容的WEB 负载均衡

    该方法综合考虑客户请求内容,如URL名称、类型等来决策请求的调用。其能够充分利用WEB访问流中的局部性,结合相关技术能够大大提高Caches 命中率,从而大幅度提高服务器集群的性能。

    2.6 基于客户端的负载均衡

    该方法指的是在网络客户端运行特定的程序,该程序通过定期或不定期地收集服务器群的运行 参数:CPU占用情况、磁盘 I/O、内存等动态信息, 再根据某种选择策略,找到可以提供服务的最佳服 务器,将本地的应用请求发向它。 这些技术,是建立在网络协议栈的各个层次的。不同层次实现的冗余和性能损耗有一定差异。第四层和第七层的实现方式在一些软件负载均衡系统中应用较多。

    3 负载均衡算法

    负载均衡算法是负载均衡中十分关键的部分,大量的研究人员投入经历在算法研发和算法改进上。而且目前以动态的负载均衡算法为研究热点,因为通常情况下动态负载策略较静态策略有30%-40%的性能提升。

    3.1 算法结构

    负载均衡算法有很多种,而且不断有有更新,但是负载均衡算法都有一个大致的算法流程和相同的算法组成。 算法工作的流程为:接收请求,选择服务器,转发请求,三个重要的部分。而算法中选择服务器和最后的转发策略可以细分一些组成部分。信息策略、传送策略和放置策略。

    3.1.1 信息策略

    信息策略是指算法收集服务器状态信息的策略,包括时间策略,方式策略和内容策略。时间策略一般有周期性策略和事件引发式,分别是以指定周期和某一特定事件触发来收集状态信息。方式策略有分布式和集中式,决定了如何去收集信息。其中内容策略是信息策略中特别重要的部分。收集哪些信息和将信息如何处理能够最好的表达节点状态。一般而言,CPU队列长度是一定要适用的一个内容。 信息策略对于静态的负载均衡算法一般不会适用。主要是动态算法会适用到。

    3.1.2 传送策略

    传送策略是指在节点选择中设置两个阈值TH,TL。选择完成后,需要判断节点负荷是否超过上限,如果没有超过则可以对任务迁移。如果处于TL之下,则可以直接使用。TH和TL相同时称为单阈值传送策略,不同时称为双阈值策略。

    3.1.3 放置策略

    一般而言我们需要选择负载情况最优的服务器,但是同时我们需要考虑线路资源。需要在负载最轻和线路资源占用最少下做出选择。

    3.2 经典负载均衡算法

    在负载均衡算法研究中有一些算法是发展前期最为经典的算法,主要的静态算法有轮循算法和Hash算法,动态算法中有最小连接算法,最快连接算法。这些算法都能够用加权方式提升算法的性能。

    3.2.1 轮循算法

    轮循算法将多个IP地址轮换方式使用。 该算法无服务器状态记录,无连接状态记录,响应快,实现简单,具有一定负载均衡效果。

    3.2.2 源地址散列算法

    该算法是利用散列函数来实现服务器的确定。通过对源地址进行散列,并归一化到服务器对应的范围内来确定选择的服务器。 此方法和轮循法相比,能够确保同源任务会调度到同一个服务器,可以借此提供有状态的session。

    3.2.3 最小连接算法

    最小连接算法是动态算法。是基于服务器的连接数量来评判服务器的负载状态。选择最小连接数的服务器来分配任务。具有一定的智能性。但是实现相对上面描述的静态算法会比较复杂。

    3.2.4 最快连接算法

    最小连接算法以服务器连接数量来评判服务器状态,具有一定的可行性。但是对于网络系统来说,通信代价也是很重要因素。最快连接算法,从服务器中选择能够与用户具有最低通信代价且不超载的服务器作为任务处理服务器。

    3.2.5 加权算法

    上面描述的算法都有一定缺陷,其认为处于一个对称网络中,所有服务器节点的性能都是一致的,没有考虑到服务器之间的性能差异。我们可以根据服务器节点性能来确定其权重,将性能因素加入评判的标准。结合上面的算法,实现一些,加权轮循算法,加权最小连接算法。具有更高的适用性。

    3.3 动态负载均衡算法

    许多研究人员还在不断的对经典算法改进,比如正对于最小连接算法,在加权算法的基础上,孟晓景和张春勇提出了IWLC(一种改进的加权最小连接算法),提升了在高并发下的表现性能。同时也有许多将新技术或者是一些优化算法应用到计算负载均衡中来。

    3.3.1 基于机器学习的负载均衡算法

    目前一些成熟的机器学习算法在某一具体的领域还是有着很不错的效果。对于服务器集群的负载均衡来说,如果能够了解流量的来源信息,数量信息,能够有效的提升负载均衡的效果。张之栋等人就提出了基于机器学习的自动负载均衡方法, 该方法基于机器学习的用户数预测实现了LTE自动负载均衡 。余钦水等也利用BP神经网络建立了负载预测模型,并实现了一个动态的负载均衡算法 。两个研究都取得性能上的提升。一般而言,一定时间间隔内,流量访问是相对稳定的,具有较大相似性,机器学习算法能够得到相对准确的预测。毫无疑问,如果能够预测用户请求,这能够极大提高负载均衡的性能。 另一方面,神经网络的计算思想和建模,对于负载均衡算法处理大量的服务器状态信息也是具有实际价值的。王鹏等提出了基于神经网络反馈机制来改进负载均衡的算法 ,其模仿神经网络的反馈迭代计算机制来确定服务器的分配指标,提升了算法的性能。 机器学习算法本身的预测能力,和现在机器学习算法发展过程中统计、运算和信息处理的思想都能够很好被负载均衡算法借鉴和应用。这些工作是不同于以往的优化算法的。

    3.3.2 基于蚁群算法的负载均衡算法

    蚁群算法是 由意大利学 者 M.Dorigo, V.Maniezzo等人提出,通过观察蚂蚁寻找食物的行为总结提出的一种启发 式搜索算法,以获得全局状态下的最优策略。例如旅行商问题即可以适用蚁群算法来试图计算最优结果^([11])。 负载均衡本身也是一个优化问题,所以算法很自然的被应用到负载均衡领域。针对SDN网络架构下,结合考虑路径和服务器性能设计的JPSACO(联合路径-服务器蚁群优化)算法,在丢包率和吞吐量方面都取得了不错的效果[12]。利用蚁群算法对负载均衡策略做了优化,提升了负载均衡度方面的表现性能。关于这个方向的研究成果还有很多。 相比于遗传算法收敛速度过慢的问题,这个生物仿真算法在负载均衡方面会表现更好,因为负载均衡算法的实时性要求是比较高的。

    3.3.3 基于遗传算法的负载均衡算法

    遗传算法( genetical gorithm,简称 GA) 一直以来被认为是解决NP难问题最有效的方法之 一。它具有大范围的快速全局搜索能力,但当求解到一定程度时,往往需要做大量的冗余迭代,并且对系统中的反馈信息利 用不够 ,因此求解效率低 。算法流程如图所示。

    基于其对优化问题的最终的良好表现,也有诸多工作将其应用于负载均衡算法当中。为了提升其整体表现的性能,有工作将其于蚁群算法结合,将蚁群算法的正反馈收敛机制融入到遗传算法中,提出新的改进型遗传算法。这样的工作还是具有一定启发意义的,鉴于遗传算法的优缺点明显,我们可以适当降低算法的通用性和最终结果的质量,以提高整个收敛过程。平均性能,提示实际的适用价值。

    另外还有基于模型退火算法的一些负载均衡算法^([13]),或者将多种智能算法结合为新的搜索算法。 一部分将优化算法,搜索算法应用于负载均衡的工作当中,很明显都能够看到其对于性能的或多或少的提升。但是这些算法和机器学习算法等,本身对资源的消耗,对系统整体的性能都有较大的影响,而在许多研究工作中,的确忽视了算法的实际代价的影响。相较于一些经典算法,或者经典算法的改进算法,离实际应用有更大的差距。

    Processed: 0.012, SQL: 9