负载均衡

一、解释

    负载均衡 Load Balance,也叫负载分担,意思就是将负载进行平衡、分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业应用服务器和其它任务服务器等,从而共同完成工作任务。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的公认解决方案

11210548_aVGO.png

    负载均衡的使用已经很广泛了,通过服务器集群,将流量分发到网络中的一个或多个节点上进行处理,使得网络连接、CPU、磁盘驱动器或其他资源达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。

    负载均衡的作用:

        1. 解决并发压力,提高应用处理性能(增加吞吐量,加强网络处理能力);

        2. 提供故障转移,实现高可用;

        3. 通过添加或减少服务器数量,提供网站伸缩性(扩展性);

        4. 安全防护(负载均衡设备上做一些过滤,黑白名单等处理);

二、负载均衡的分类

1 软/硬负载

    软负载

    是指通过在服务器上安装的负载均衡软件或是自带负载均衡模块完成负载均衡,常见比如Ngnix、Apache、LVS(Linux虚拟服务器)、HaProxy等。

    它的优点是基于特定环境,配置简单,使用灵活,成本低廉,可以满足一般的负载均衡需求。它的缺点也较多,因为每台服务器上安装额外的软件运行会消耗系统不定量的资源,越是功能强大的模块,消耗得越多,所以当连接请求特别大的时候,软件本身会成为服务器工作成败的一个关键。

    硬负载

    是指直接在服务器和外部网络间安装负载均衡设备,常见的比如F5、A10、天融信等,这种设备通常称之为负载均衡器。由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高。负载均衡器有多种多样的形式,除了作为独立意义上的负载均衡器外,有些负载均衡器集成在交换设备中,置于服务器与Internet链接之间,有些则以两块网络适配器将这一功能集成到PC中,一块连接到Internet上,一块连接到后端服务器群的内部网络上。
    一般而言,硬件负载均衡在功能、性能上优于软件方式,不过成本昂贵。

本地/全局

    本地负载均衡(Local Load Balance)

    是指对本地的服务器群做负载均衡。充分利用现有设备,把数据流量合理地分配给服务器群内的服务器共同负担。即使是再给现有服务器扩充升级,也只是简单地增加一个新的服务器到服务群中,而不需改变现有网络结构、停止现有的服务。

    它关注的是某个网络个体,是对一个地理位置上的设备群做负载均衡或者对某一个设备内部的提供相同功能的多个模块做负载均衡,是微观的。

    全局负载均衡(Global Load Balance)

    是指对分别放置在不同的地理位置、有不同网络结构的服务器群间作负载均衡,也叫地域负载均衡。它主要用于在一个多区域拥有自己服务器的站点,为了使全球用户只以一个域名就能访问到离自己最近的服务器,从而获得最快的访问速度,也可用于子公司分散站点分布广的大公司通过Intranet(企业内部互联网)来达到资源统一合理分配的目的。

    它关注的是一个网络的整体,是对放在不同位置、为完成同一个任务的设备群体做负载均衡,是宏观上的。

    全局负载均衡有以下的特点:

    1.  实现地理位置无关性,能够远距离为用户提供完全的透明服务;

    2.  除了能避免服务器、数据中心等的单点失效,也能避免由于ISP专线故障引起的单点失效;

    3.  解决网络拥塞问题,提高服务器响应速度,服务就近提供,达到更好的访问质量;

三、负载均衡的实现方式

  • DNS负载均衡

        最早的负载均衡技术。我们知道,数据包使用IP地址在网络中传播,我们使用域名来访问网站,在我们通过域名访问网站之前,首先需要将域名解析成IP地址,这个工作是由DNS完成的,也就是域名服务器。一般DNS域名解析的过程是这样的,我们提交的请求首先会发给域名服务器,它会帮我们把域名解析成IP地址并返回给我们,然后我们收到IP之后才会向该IP对应的网站发起请求。

        DNS负载均衡,是在DNS中为多个地址配置同一个名字,查询这个名字的客户机将得到其中一个地址,从而使得不同的客户访问不同的服务器,从而达到负载均衡的目的。DNS负载均衡是一种简单而有效的方法,但是它不能区分服务器的差异,也不能反映服务器的当前运行状态。

        DNS负载均衡最大的优点就是配置简单,服务器集群的调度工作完全由DNS服务器承担,而且完全不用担心DNS服务器的性能,即便是使用了轮询策略,它的吞吐率依然卓越。但缺点也显而易见,由于把集群调度权交给了DNS服务器,我们没办法定制调度策略,DNS服务器也没办法了解每台服务器的负载情况,因此没办法实现真正意义上的负载均衡。

  • 代理服务器负载均衡
  • 地址转换网关负载均衡

        支持负载均衡的地址转换网关,将一个外部IP地址映射为多个内部IP地址,对每次TCP连接请求动态使用其中一个内部地址,达到负载均衡的目的。

  • HTTP重定向负载均衡
  • NAT负载均衡

        NAT(Network Address Translation 网络地址转换)简单地说就是将一个IP地址转换为另一个IP地址,一般用于未经注册的内部地址与合法的、已获注册的IP地址间进行转换。适用于解决Internet IP地址紧张、不想让网络外部知道内部网络结构等的场合下。

  • 反向代理负载均衡

        普通代理方式是代理内部网络用户访问internet上服务器的连接请求,客户端指定代理服务器,并将本来要直接发送到internet上服务器的连接请求发送给代理服务器处理。而反向代理(Reverse Proxy)方式是以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的多台服务器进行处理,此时代理服务器对外就表现为一个服务器。

        优点:

  1. 隐藏后端服务器。 
    与HTTP重定向相比,反向代理能够隐藏后端服务器,所有浏览器都不会与后端服务器直接交互,从而能够确保调度者的控制权,提升集群的整体性能。
  2. 故障转移 
    与DNS负载均衡相比,反向代理能够更快速地移除故障结点。当监控程序发现某一后端服务器出现故障时,能够及时通知反向代理服务器,并立即将其删除。
  3. 合理分配任务 
    HTTP重定向和DNS负载均衡都无法实现真正意义上的负载均衡,也就是调度服务器无法根据后端服务器的实际负载情况分配任务。而反向代理服务器支持设定每台后端服务器的权重,权重不同会导致被调度者选中的概率的不同。

        缺点:

  1. 调度者压力过大 
    由于所有的请求都将先由反向代理服务器处理,那么当请求量超过调度服务器的最大负载时,调度服务器的吞吐率降低会直接降低集群的整体性能。
  2. 制约扩展 
    当后端服务器也无法满足巨大的吞吐量时,就需要增加后端服务器的数量,但仍会受到调度服务器的最大吞吐量的制约。
  • 混合型负载均衡

        在某些大型网络中,由于多个服务器集群内硬件设备、各自的规模、提供的服务等的差异,考虑给每个服务器群采用最合适的负载均衡方式,然后又在这多个服务器群间再一次负载均衡或群集起来以一个整体向外界提供服务(即把这多个服务器群当做一个新的服务器群),从而达到最佳的性能。这种方式有时也用于单台均衡设备的性能不能满足大量连接请求的情况下。是目前大型互联网公司,普遍使用的方式。

11210548_sFDW.png

        如上图所示,将DNS作为第一级负载均衡,反向代理服务器做动静分离,如果静态资源缓存在代理服务器时则直接返回,如果动态页面请求则走IP/DR模式分流请求后面的应用集群。

四、负载均衡策略

        1.  轮询策略(Round Robin)

        经典的负载均衡策略。原理是,给每个请求标记一个序号,然后将请求轮流分配给后台服务器节点,适用于视集群中各个节点提供服务能力等同,且平均服务请求均衡,且无状态的场景。其缺点也非常明显,该策略将节点视为等同,与实际中复杂的环境不符。

        加权轮询均衡(Weighted Round Robin)为轮询的一个改进策略,每个节点会有权重属性,使其能够接受相应权值数的服务请求。这种均衡算法能够确保高性能的服务器得到更多的使用率,避免低性能的服务器负载过重,但是设置权重难以做到随实际情况变化。

        2.  随机策略(Random)

        与轮询策略相似,只是不对每个请求进行编号,每次随机分配一个后台服务器节点。与轮询策略相比,有同样的缺点,该策略也将后端的每个节点是为等同的。

        优点是在性能上会比轮询策略要高,由于轮询策略需要调度者维护一个值用于记录分配的服务器IP,因此需要额外的开销。此外,由于这个值属于互斥资源,那么当多个请求同时到来时,为了避免线程的安全问题,因此需要锁定互斥资源,从而降低了性能。而随机分配策略不需要维护额外的值,也就不存在线程安全问题。

        同样也有改进的加权随机均衡(Weighted Random)。

        3.  DNS响应均衡(Flash DNS)

        分处在不同地理位置的负载均衡设备收到同一个客户端的域名解析请求,并在同一时间内把此域名解析成各自对应服务器的IP地址(与此负载均衡设备在同一位地理位置的服务器的IP地址)并返回,则客户端将以最先收到的域名解析IP地址来继续请求服务,而忽略其它的IP地址响应。这种均衡策略适合应用在全局负载均衡的情况下,对本地负载均衡是没有意义的。

        4.  响应时间策略(Response Time)

        记录每次请求所需的时间,得出平均的响应时间,然后根据响应时间选择最小的响应时间。这种策略能较好地反应服务器的响应时间,但是由于是平均响应时间的关系,时间上有滞后,无法满足快速响应的要求。因此在此基础之上,会有一些改进版本的策略,比如只计算最近若干次的平均时间的策略等。

        5.  最少连接数策略(Least Connection)

        客户端的每一次请求在服务器停留的时间可能会有较大的差异,随着工作时间加长,如果采用简单的轮循或随机均衡算法,每一台服务器上的连接进程可能会产生较大的不同,并没有达到真正的负载均衡。最少连接数策略对每个备选节点都有一个数据记录,记录了当前时刻正在处理的事务数,然后选择连接数最少的节点。该策略能够快速地反应服务器的当前状况,较为合理地将负责分配均匀,适用于长时处理的场景,如FTP。

 

 

  

参考自:

 

转载于:https://my.oschina.net/duofuge/blog/877074

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值