• 负载均衡学习一


      企业应用系统经常包含三个主要部分:客户端用户界面、数据库和服务端应用系统。客户端用户界面包括HTML页面和运行在用户机器的浏览器中的JavaScript。数据库中包括许多表,这些表被插入一个公共的且通常为关系型的数据库管理系统中。这个服务端的应用系统就是一个单块应用——一个单个可执行的逻辑程序[2]。对于该系统的任何改变,都会涉及构建和部署上述服务端应用系统的一个新版本。

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

      负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

      分类
    1、软/硬件负载均衡
    软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl等,它的优点是基于特定环境,配置简单,使用灵活,成本低廉,可以满足一般的负载均衡需求。
    软件解决方案缺点也较多,因为每台服务器上安装额外的软件运行会消耗系统不定量的资源,越是功能强大的模块,消耗得越多,所以当连接请求特别大的时候,软件本身会成为服务器工作成败的一个关键;软件可扩展性并不是很好,受到操作系统的限制;由于操作系统本身的Bug,往往会引起安全问题。
    硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备通常称之为负载均衡器,由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。
    负载均衡器有多种多样的形式,除了作为独立意义上的负载均衡器外,有些负载均衡器集成在交换设备中,置于服务器与Internet链接之间,有些则以两块网络适配器将这一功能集成到PC中,一块连接到Internet上,一块连接到后端服务器群的内部网络上。一般而言,硬件负载均衡在功能、性能上优于软件方式,不过成本昂贵。
    2、本地/全局负载均衡
    负载均衡从其应用的地理结构上分为本地负载均衡(Local Load Balance)和全局负载均衡(Global Load Balance,也叫地域负载均衡),本地负载均衡针对本地范围的服务器群做负载均衡,全局负载均衡针对不同地理位置、不同网络结构的服务器群做负载均衡。
    本地负载均衡不需要花费高额成本购置高性能服务器,只需利用现有设备资源,就可有效避免服务器单点故障造成数据流量的损失,通常用来解决数据流量过大、网络负荷过重的问题。同时它拥有形式多样的均衡策略把数据流量合理均衡的分配到各台服务器。如果需要在现在服务器上升级扩充,不需改变现有网络结构、停止现有服务,仅需要在服务群中简单地添加一台新服务器。
    全局负载均衡主要解决全球用户只需一个域名或IP地址就能访问到离自己距离最近的服务器获得最快的访问速度,它在多区域都拥有自己的服务器站点,同时也适用于那些子公司站点分布广的大型公司通过企业内部网(Intranet)达到资源合理分配的需求。
    全局负载均衡具备的特点:
    1、提高服务器响应速度,解决网络拥塞问题,达到高质量的网络访问效果。
    2、能够远距离为用户提供完全的透明服务,真正实现与地理位置无关性
    3、能够避免各种单点失效,既包括数据中心、服务器等的单点失效,也包括专线故障引起的单点失效。 [1]
    部署方式
    负载均衡有三种部署方式:路由模式、桥接模式、服务直接返回模式。路由模式部署灵活,约60%的用户采用这种方式部署;桥接模式不改变现有的网络架构;服务直接返回(DSR)比较适合吞吐量大特别是内容分发的网络应用。约30%的用户采用这种模式。
    1、路由模式(推荐)
    路由模式的部署方式,服务器的网关必须设置成负载均衡机的LAN口地址,且与WAN口分署不同的逻辑网络。因此所有返回的流量也都经过负载均衡。这种方式对网络的改动小,能均衡任何下行流量。
    2、桥接模式
    桥接模式配置简单,不改变现有网络。负载均衡的WAN口和LAN口分别连接上行设备和下行服务器。LAN口不需要配置IP(WAN口与LAN口是桥连接),所有的服务器与负载均衡均在同一逻辑网络中。
    由于这种安装方式容错性差,网络架构缺乏弹性,对广播风暴及其他生成树协议循环相关联的错误敏感,因此一般不推荐这种安装架构。
    3、服务直接返回模式
    这种安装方式负载均衡的LAN口不使用,WAN口与服务器在同一个网络中,互联网的客户端访问负载均衡的虚IP(VIP),虚IP对应负载均衡机的WAN口,负载均衡根据策略将流量分发到服务器上,服务器直接响应客户端的请求。因此对于客户端而言,响应他的IP不是负载均衡机的虚IP(VIP),而是服务器自身的IP地址。也就是说返回的流量是不经过负载均衡的。因此这种方式适用大流量高带宽要求的服务。
    负载均衡算法
    介绍
    现有的负载均衡算法主要分为静态和动态两类。静态负载均衡算法以固定的概率分配任务,不考虑服务器的状态信息,如轮转算法、加权轮转算法等;动态负载均衡算法以服务器的实时负载状态信息来决定任务的分配,如最小连接法、加权最小连接法等。 [2]
    分类
    1、轮询法
    轮询法,就是将用户的请求轮流分配给服务器,就像是挨个数数,轮流分配。这种算法比较简单,他具有绝对均衡的优点,但是也正是因为绝对均衡它必须付出很大的代价,例如它无法保证分配任务的合理性,无法根据服务器承受能力来分配任务。
    2、随机法
    随机法,是随机选择一台服务器来分配任务。它保证了请求的分散性达到了均衡的目的。同时它是没有状态的不需要维持上次的选择状态和均衡因子[5]。但是随着任务量的增大,它的效果趋向轮询后也会具有轮询算法的部分缺点。
    3、最小连接法
    最小连接法,将任务分配给此时具有最小连接数的节点,因此它是动态负载均衡算法。一个节点收到一个任务后连接数就会加1,当节点故障时就将节点权值设置为0,不再给节点分配任务。
    最小连接法适用于各个节点处理的性能相似时。任务分发单元会将任务平滑分配给服务器。但当服务器性能差距较大时,就无法达到预期的效果。因为此时连接数并不能准确表明处理能力,连接数小而自身性能很差的服务器可能不及连接数大而自身性能极好的服务器。所以在这个时候就会导致任务无法准确的分配到剩余处理能力强的机器上。 [2]

    均衡技术
    常见的软件负载均衡技术有以下几种:
    1、基于DNS的负载均衡
    由于在DNS服务器中,可以为多个不同的地址配置相同的名字,最终查询这个名字的客户机将在解析这个名
    字时得到其中一个地址,所以这种代理方式是通过DNS服务中的随机名字解析域名和IP来实现负载均衡。
    2、反向代理负载均衡(如Apache+JK2+Tomcat这种组合)
    该种代理方式与普通的代理方式不同,标准代理方式是客户使用代理访问多个外部Web服务器,之所以被称为反向代理模式是因为这种代理方式是多个客户使用它访问内部Web服务器,而非访问外部服务器。
    3、基于NAT(Network Address Translation)的负载均衡技术(如Linux VirtualServer,简称LVS)
    该技术通过一个地址转换网关将每个外部连接均匀转换为不同的内部服务器地址,因此外部网络中的计算机就各自与自己转换得到的地址上的服务器进行通信,从而达到负载均衡的目的。其中网络地址转换网关位于外部地址和内部地址之间,不仅可以实现当外部客户机访问转换网关的某一外部地址时可以转发到某一映射的内部的地址上,还可使内部地址的计算机能访问外部网络。 [1]

    主要应用
    1、DNS负载均衡 最早的负载均衡技术是通过DNS来实现的,在DNS中为多个地址配置同一个名字,因而查询这个名字的客户机将得到其中一个地址,从而使得不同的客户访问不同的服务器,达到负载均衡的目的。DNS负载均衡是一种简单而有效的方法,但是它不能区分服务器的差异,也不能反映服务器的当前运行状态。
    2、代理服务器负载均衡 使用代理服务器,可以将请求转发给内部的服务器,使用这种加速模式显然可以提升静态网页的访问速度。然而,也可以考虑这样一种技术,使用代理服务器将请求均匀转发给多台服务器,从而达到负载均衡的目的。
    3、地址转换网关负载均衡 支持负载均衡的地址转换网关,可以将一个外部IP地址映射为多个内部IP地址,对每次TCP连接请求动态使用其中一个内部地址,达到负载均衡的目的。
    4、协议内部支持负载均衡除了这三种负载均衡方式之外,有的协议内部支持与负载均衡相关的功能,例如HTTP协议中的重定向能力等,HTTP运行于TCP连接的最高层。
    5、NAT负载均衡NAT(Network Address Translation网络地址转换)简单地说就是将一个IP地址转换为另一个IP地址,一般用于未经注册的内部地址与合法的、已获注册的Internet IP地址间进行转换。适用于解决Internet IP地址紧张、不想让网络外部知道内部网络结构等的场合下。
    6、反向代理负载均衡普通代理方式是代理内部网络用户访问internet上服务器的连接请求,客户端必须指定代理服务器,并将本来要直接发送到internet上服务器的连接请求发送给代理服务器处理。反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。反向代理负载均衡技术是把将来自internet上的连接请求以反向代理的方式动态地转发给内部网络上的多台服务器进行处理,从而达到负载均衡的目的。
    7、混合型负载均衡在有些大型网络,由于多个服务器群内硬件设备、各自的规模、提供的服务等的差异,可以考虑给每个服务器群采用最合适的负载均衡方式,然后又在这多个服务器群间再一次负载均衡或群集起来以一个整体向外界提供服务(即把这多个服务器群当做一个新的服务器群),从而达到最佳的性能。将这种方式称之为混合型负载均衡。此种方式有时也用于单台均衡设备的性能不能满足大量连接请求的情况下。
      负载均衡

    在分布式系统中,负载均衡(load balancing)是一种有效的将网络请求分配到多个服务器的过程。通过将负载进行负载均衡,可以有效地改进系统响应时间,提高系统的可用性。随着系统变的愈发复杂,用户增多和网络流量增大,负载均衡已经成为系统设计中的必要一环。

    负载均衡是对应用服务器架构进行水平扩展(scale out)的最为直接的方法。当系统面对用户增多、并发请求增多的状况时,我们可以直接向系统中添加更多的服务器进行水平扩展,负载均衡器会马上开始向新的服务器发送一部分用户请求,从而达到系统的水平扩展,使得每个服务器会有几乎数量相同的客户请求。

    实现负载均衡最主要有两个目的。一是使得每个服务器有相同的负载,以减少单个服务器的负载,从而可以达到我们上面提到的对系统进行水平扩展的目的。二是提高系统容错能力,从而达到高可用的目的。在分布式系统中,多个服务器往往会提供相同的服务,所以当一个服务器宕机时,我们可以通过负载均衡器(load balancer)将该服务器对应的负载转发到其他机器上,从而提高系统的可用性。如果没有负载均衡器,我们只是将对应的负载直接转发到某几个机器,那么如果那几个机器本身就有了很高的负载,面临突然的大量负载,有可能会造成其他机器的宕机。

    负载均衡器

    负载均衡器可以是硬件也可以是软件,它会将网络请求分发到服务器集群上。在下图中,负载均衡器处于客户端和服务器之间,将客户端请求转发到不同的后端服务器来完成客户端请求。通过将客户端请求平均的分发到后端服务器,负载均衡器有效的减少服务器请求,避免了某个服务器会单点失败。

    我们可以将负载均衡器的特点总结如下:

        如果单个服务器宕机,负载均衡器会移除该服务器,并将请求转发到其他在线服务器
        当一个新服务器被添加到集群中,负载均衡器会自动开始向它发送请求
        有效的将客户端请求或者网络负载分发到多个服务器上
        因为只向在线的服务器发送请求从而确保了高可用和可靠性
        提供了按需增减服务器的灵活性,并不会影响到已有的服务器上的连接
        可以被应用到不同的层次中,比如服务器,数据库或者缓存

    负载均衡器是基于如下两个步骤来为一个客户端请求选择对应的后端服务器的。首先,确认服务器是否可用。然后根据配置好的负载均衡算法从这些健康的服务器中选择一个服务器。

    健康检查(Health Check):为了确保负载均衡器只将请求发送给健康的服务器,健康检查会周期性尝试连接后端服务器,确保服务器在监听。如果一个服务器健康检查失败了,该服务器会被自动从服务器集群中移除,客户端请求将不会被转发到该服务器上,直到该服务器开始对健康检查开始进行响应。

    负载均衡算法

        轮询调度算法(Round Robin) 该算法会依次将请求派发到健康服务器列表中的每一台服务器上。比如健康服务器列表为A,B,C,D。请求就会按此顺序被分发到上面。
        最少连接算法(Least Connections) 该算法会查看集群中哪一个服务器有最少的连接,然后将请求发送到具有最少连接数目的服务器上
        最少响应时间(Least Response Time)

    该算法会将请求转发到具有最少连接并且最低平均响应时间的服务器上

        最小带宽算法(Least Bandwidth Method) 该方法会将请求转发到有最小流量的服务器上,这里流量以Mbps来测量
        IP地址哈希(IP Hash) 该算法根据IP地址来决定将请求转发到哪个服务器上
        粘滞会话(Sticky Session Scheme) 根据请求的依赖关系将请求转发到正确服务器上。比如用户的购买请求依赖于用户登录请求,当负载均衡器收到用户的购买请求时,它会将其转发到对应的处理登录请求的服务器上,否则将会报错。
        均匀任务队列派发(Even Size Task Queue Distribution Scheme) 每个服务器用一个队列存储收到的请求,如果服务器处理请求的速度快,那么队列里请求数目减少的也快,那么负载均衡器只需要根据队列中的数目,将请求放到最小数目的队列中即可。

    负载均衡器的能力

    L4负载均衡器:基于传输层协议例如IP地址和TCP端口对请求进行转发

    L7负载均衡器:基于应用层数据和属性进行请求转发,比如http包头,统一资源定位符(URI),SSL会话ID和HTML表格数据

    全局服务器负载均衡器:对L4和L7进行扩展,使得负载均衡器可以对全局的服务器进行负载均衡

    常用负载均衡器

    负载均衡器已经有了很多的解决方案。比如,硬件方面有F5,A10,软件方面有Nginx,HAProxy,LVS。如果整个系统是云架构,那么云厂商也提供了成熟的负载均衡选择比如Azure负载均衡器和AWS负载均衡器。硬件负载均衡器往往具有难以扩展(因为需要额外增加硬件),成本贵(购买硬件,专业人员安装维护)和安全性(物理硬件自身设计导致)等缺点。软件负载均衡器消除了硬件负载均衡器的这些缺点,并具有按需进行调节的灵活性和易于和系统进行集成。因此,我们在面对系统进行水平扩容的时候不妨先考虑开源的软件负载均衡器,如果确实有满足不了的地方,再考虑重复造轮子。


  • 相关阅读:
    设计模式(二十三)—— 模板方法
    设计模式(二十二)—— 策略模式
    设计模式(二十一)—— 状态模式
    设计模式(二十)—— 观察者模式
    设计模式(十九)—— 备忘录模式
    设计模式(十八)—— 中介者模式
    设计模式(十七)—— 迭代器模式
    设计模式(十六)—— 解释器模式
    设计模式(十五)—— 命令模式
    设计模式(十四)—— 职责链模式
  • 原文地址:https://www.cnblogs.com/hofmann/p/12929165.html
Copyright © 2020-2023  润新知