• 负载均衡


    一、负载均衡概念

    负载均衡,英文名称为Load Balance,就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,从而协同完成工作任务。它是建立在现有的网络基础架构之上,给企业提供了更廉价更有效的扩展选择。

    二、负载均衡的作用

    负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

    三、负载均衡的分类

    负载均衡根据不同的应用场景进行了不同的分类

    1、根据软硬件场景分类

    (1)软件负载均衡

      软件负载均衡技术是在一个或多个交互的网络系统中的多台服务器上安装一个或多个相应的负载均衡软件来实现的一种均衡负载技术。软件可以很方便的安装在服务器上,并且实现一定的均衡负载功能。软件负载均衡技术配置简单、操作也方便,最重要的是成本很低。该技术适用于一些中小型网站系统,可以满足一般的均衡负载需求。常见的软件负载均衡有:LVS、Nginx、HAProxy。

    (2)硬件负载均衡

      硬件负载均衡技术是在多台服务器间安装相应的负载均衡设备,也就是负载均衡器来完成均衡负载技术,与软件负载均衡技术相比,能达到更好的负载均衡效果。由于硬件负载均衡技术需要额外的增加负载均衡器,成本比较高,所以适用于流量高的大型网站系统。常见的负载均衡器有:F5负载均衡器、思科、Radware的AppDirector系列、梭子鱼负载均衡

    2、根据地域场景分类

    (1)本地负载均衡

      本地负载均衡针对本地范围的服务器群做负载均衡,本地负载均衡不需要花费高额成本购置高性能服务器,只需利用现有设备资源,就可有效避免服务器单点故障造成数据流量的损失,通常用来解决数据流量过大、网络负荷过重的问题。同时它拥有形式多样的均衡策略把数据流量合理均衡的分配到各台服务器。如果需要在现在服务器上升级扩充,不需改变现有网络结构、停止现有服务,仅需要在服务群中简单地添加一台新服务器。

    (2)全局负载均衡

      全局负载均衡针对不同地理位置、不同网络结构的服务器群做负载均衡,全局负载均衡主要解决全球用户只需一个域名或IP地址就能访问到离自己距离最近的服务器获得最快的访问速度,它在多区域都拥有自己的服务器站点,同时也适用于那些子公司站点分布广的大型公司通过企业内部网(Intranet)达到资源合理分配的需求。全局负载均衡具备的特点:

    • 提高服务器响应速度,解决网络拥塞问题,达到高质量的网络访问效果。
    • 能够远距离为用户提供完全的透明服务,真正实现与地理位置无关性
    • 能够避免各种单点失效,既包括数据中心、服务器等的单点失效,也包括专线故障引起的单点失效。

    3、根据OSI通信模型场景分类

    OSI是一个开放性的通信系统互连参考模型,OSI模型有7层结构, OSI的7层从上到下分别是 7、应用层;6、表示层;5、会话层;4、传输层;3、网络层;2、数据链路层;1、物理层;其中高层(即7、6、5、4层)定义了应用程序的功能,下面3层(即3、2、1层)主要面向通过网络的端到端的数据流。在这七层模型种,高层次都是依赖于低层次的。层次越高,使用起来越方便。下面两张图是网络上找的OSI图:

     

     

    从上图可以看出:

    TELNET、HTTP、FTP、NFS、SMTP、DNS等属于第七层应用层的概念。
    
    TCP、UDP、SPX等属于第四层传输层的概念。
    
    IP、IPX等属于第三层网络层的概念。
    
    ATM、FDDI等属于第二层数据链路层的概念。

    根据负载均衡技术实现在OSI七层模型的不同层次,是可以给负载均衡分类的,工作在应用层的负载均衡称之为七层负载均衡、工作在传输层的负载均衡称之为四层负载均衡。其中最常用的是四层和七层负载均衡,具体分类如下:

    (1)二层负载均衡

      二层负载均衡是基于数据链路层的负载均衡。负载均衡服务器对外提供一个VIP(虚IP),集群中不同的机器采用相同IP地址,但是机器的MAC地址不一样。当负载均衡服务器接受到请求之后,通过改写报文的目标MAC地址的方式将请求转发到目标机器实现负载均衡。在Linux平台上最好的链路层负载均衡开源产品是LVS(Linux Virtual Server)。工作原理如下图:

    (2)三层负载均衡

      三层负载均衡是基于网络层的负载均衡,负载均衡服务器对外依然提供一个VIP(虚IP),但是集群中不同的机器采用不同的IP地址。当负载均衡服务器接受到请求之后,根据不同的负载均衡算法,通过IP将请求转发至不同的真实服务器。

    (3)四层负载均衡

      四层负载均衡工作在OSI模型的传输层,由于在传输层,只有TCP/UDP协议,这两种协议中除了包含源IP、目标IP以外,还包含源端口号及目的端口号。四层负载均衡服务器在接受到客户端请求后,以后通过修改数据包的地址信息(IP+端口号)将流量转发到应用服务器。

    (4)七层负载均衡

      七层负载均衡工作在OSI模型的应用层,应用层协议较多,常用http、radius、dns等。七层负载就可以基于这些协议来负载。这些应用层协议中会包含很多有意义的内容。比如同一个Web服务器的负载均衡,除了根据IP加端口进行负载外,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。 比如Nginx反向代理实现负载均衡。

    四、负载均衡常用的算法

    负载均衡算法分为两类:

    • 静态负载均衡
    • 动态负载均衡

    常见的静态均衡算法:轮询法、随机法、源地址哈希法、加权轮询法、加权随机法、键值范围法。

    常见的动态负载均衡算法:最小连接数法、最快响应速度法、观察模式法。

    1、轮询法

    将请求按顺序轮流地分配到每个节点上,不关心每个节点实际的连接数和当前的系统负载。

    • 优点:简单高效,易于水平扩展,每个节点满足字面意义上的均衡;
    • 缺点:没有考虑机器的性能问题,根据木桶最短木板理论,集群性能瓶颈更多的会受性能差的服务器影响。

    2、随机法

    将请求随机分配到各个节点。由概率统计理论得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配,也就是轮询的结果。

    • 优点:简单高效,易于水平扩展,每个节点满足字面意义上的均衡;
    • 缺点:没有考虑机器的性能问题,根据木桶最短木板理论,集群性能瓶颈更多的会受性能差的服务器影响。

    3、源地址哈希法

    源地址哈希的思想是根据客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器节点数进行取模,得到的结果便是要访问节点序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会落到到同一台服务器进行访问。

    • 优点:相同的IP每次落在同一个节点,可以人为干预客户端请求方向,例如灰度发布;
    • 缺点:如果某个节点出现故障,会导致这个节点上的客户端无法使用,无法保证高可用。当某一用户成为热点用户,那么会有巨大的流量涌向这个节点,导致冷热分布不均衡,无法有效利用起集群的性能。所以当热点事件出现时,一般会将源地址哈希法切换成轮询法。

    4、加权轮询法

    不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。加权轮询算法要生成一个服务器序列,该序列中包含n个服务器。n是所有服务器的权重之和。在该序列中,每个服务器的出现的次数,等于其权重值。并且,生成的序列中,服务器的分布应该尽可能的均匀。比如序列{a, a, a, a, a, b, c}中,前五个请求都会分配给服务器a,这就是一种不均匀的分配方法,更好的序列应该是:{a, a, b, a, c, a, a}。

    • 优点:可以将不同机器的性能问题纳入到考量范围,集群性能最优最大化;
    • 缺点:生产环境复杂多变,服务器抗压能力也无法精确估算,静态算法导致无法实时动态调整节点权重,只能粗糙优化。

    5、加权随机法

    与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重。不同的是,它是按照权重随机请求后端服务器,而非顺序。

    6、键值范围法

    根据键的范围进行负载,比如0到10万的用户请求走第一个节点服务器,10万到20万的用户请求走第二个节点服务器……以此类推。

    • 优点:容易水平扩展,随着用户量增加,可以增加节点而不影响旧数据;
    • 缺点:容易负债不均衡,比如新注册的用户活跃度高,旧用户活跃度低,那么压力就全在新增的服务节点上,旧服务节点性能浪费。而且也容易单点故障,无法满足高可用。

    7、最小连接数法

    根据每个节点当前的连接情况,动态地选取其中当前积压连接数最少的一个节点处理当前请求,尽可能地提高后端服务的利用效率,将请求合理地分流到每一台服务器。俗称闲的人不能闲着,大家一起动起来。

    • 优点:动态,根据节点状况实时变化;
    • 缺点:提高了复杂度,每次连接断开需要进行计数;
    • 实现:将连接数的倒数当权重值。

    8、最快响应速度法

    根据请求的响应时间,来动态调整每个节点的权重,将响应速度快的服务节点分配更多的请求,响应速度慢的服务节点分配更少的请求,俗称能者多劳,扶贫救弱。

    • 优点:动态,实时变化,控制的粒度更细,跟灵敏;
    • 缺点:复杂度更高,每次需要计算请求的响应速度;
    • 实现:可以根据响应时间进行打分,计算权重。

    9、观察模式法

    观察者模式是综合了最小连接数和最快响应度,同时考量这两个指标数,进行一个权重的分配。

    五、参考资料

    1、https://baike.baidu.com/item/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1/932451?fr=aladdin#4

    2、https://blog.csdn.net/qq_29373285/article/details/88777503

  • 相关阅读:
    linux中服务器定时程序设定
    Linux中java项目环境部署,简单记录一下
    四则运算使用栈和后缀表达式
    PAT乙1003
    L7,too late
    PAT乙1002
    L6,Percy Buttons
    如何计算递归算法的时间复杂度
    c#打印(转)
    C中数组与指针【转】
  • 原文地址:https://www.cnblogs.com/qtiger/p/14718593.html
Copyright © 2020-2023  润新知