负载均衡

负载平衡(Load balancing)是一种计算机技术,用来在多个计算机(计算机集群)、网络链接、CPU、磁盘驱动器或其余资源中分配负载,以达到最优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。 使用带有负载平衡的多个服务器组件,取代单一的组件,能够经过冗余提升可靠性。负载平衡服务一般是由专用软件和硬件来完成。 主要做用是将大量做业合理地分摊到多个操做单元上进行执行,用于解决互联网架构中的高并发和高可用的问题。前端

基于互联网的服务

负载均衡最重要的一个应用是利用多台服务器提供单一服务,这种方案有时也被称为服务器农场。一般,负载平衡主要应用于Web网站,大型的Internet Relay Chat网络,高流量的文件下载网站,NNTP(Network News Transfer Protocol)服务和DNS服务。如今负载平衡器也开始支持数据库服务,称之为数据库负载平衡器。nginx

对于互联网服务,负载平衡器一般是一个软件程序,这个程序侦听一个外部端口,互联网用户能够经过这个端口来访问服务,而做为负载平衡器的软件会将用户的请求转发给后台内网服务器,内网服务器将请求的响应返回给负载平衡器,负载平衡器再将响应发送到用户,这样就向互联网用户隐藏了内网结构,阻止了用户直接访问后台(内网)服务器,使得服务器更加安全,能够阻止对核心网络栈和运行在其它端口服务的攻击。算法

当全部后台服务器出现故障时,有些负载平衡器会提供一些特殊的功能来处理这种状况。例如转发请求到一个备用的负载平衡器、显示一条关于服务中断的消息等。负载平衡器使得IT团队能够显著提升容错能力。它能够自动提供大量的容量以处理任何应用程序流量的增长或减小。数据库

DNS轮循

DNS轮循(或DNS的循环机制),是指一种负载分发,负载均衡或者容错性地提供多个冗余的IP服务主机的技术。编程

Scheduling算法

当前,负载均衡器有各类各样的工做调度算法(用于决定将前端用户请求发送到哪个后台服务器),最简单的是随机选择和轮循。更为高级的负载均衡器会考虑其它更多的相关因素,如后台服务器的负载,响应时间,运行状态,活动链接数,地理位置,处理能力,或最近分配的流量。后端

架构

高性能系统一般会使用多层负载均衡。另外专用的硬件负载均衡器以及纯软件负载均衡器,包括开源的,例如Apache Web服务器的mod proxy balancer扩展,nginx,Varnish和Pound反向代理和负载均衡器。使用Gearman将合适的计算任务分发给多台计算机,如此大量的任务就能够更快的完成了。浏览器

对于一个多层次架构体系,在负载均衡器或网络分发器后面有两种设计,术语称之为Bowties和Stovepipes。Stovepipe设计中,事务是从顶部分发的,而后从一个固定通道经过一系列硬件和软件设备,到达最终目的地。若是使用Bowties设计,在每一层中事务处理有多条路径可供选择。在事务处理的网络结构中可能会是Stovepipes,也能够是Bowties,或者根据每一层的实际需求采用杂货构架。缓存

持续性

负载均衡器须要处理的一个重要问题是:如何保存用户会话?若是会话信息保存在后台服务器,用户接下来的请求可能会被分配到不一样的后台服务器,此时用户会话就没法继续。负载均衡器能够缓存用户会话,而后将用户请求分发到不一样的后台服务器。可是这将带来负载均衡器的负载问题。安全

一个解决方案是将一个用户会话中的全部请求都发送到同一个后台服务器。即persistence或stickiness。这个方法的不足之处在于没法容错(故障转移),若是后台服务器故障,它提供的会话就会没法获取,任何依赖于它的会话都会丢失。这个问题一般与数据中心有关,尽管Web Service是非连接导向的,可是后端的资料库先天上仍是连接导向的。服务器

第二个方案是依据用户名,客户端IP来分配提供服务的服务器,也能够随机分配。由于客户多是经过DHCP,NAT或者Web代理来链接Internet的,其IP地址可能常常变换,这使得这个方案的服务质量没法保障。随机分配由负载均衡器将会话信息存储保存。若是负载均衡器被替换或故障,这些信息可能会丢失;另外(负载均衡器)负载较高的时候,为保证分配表空间不会被耗尽,超时的分配信息必须被删除。随机分配方法也要求客户会维持会话状态,若是客户浏览器禁用了cookies的功能,就会引发问题。优秀的负载均衡器会使用多种持续(会话保持)技术,以免其中某些不能够用时引发故障。

另一个方案是将每一会话信息保存到一个数据库中。因为这个方案会增长数据库的负载,因此这个方案对性能的提升并很差。数据库最好是用来存储会话时间比较长的会话数据。为了不数据库出现单点故障,而且提升其扩展性,数据库一般会复制到多台服务器上,经过负载均衡器来分发请求到数据库服务器上。微软ASP.net中的状态服务器技术就是一个典型的会话数据库的例子。集群中的全部服务器都将它们的会话信息保存到状态服务器上,同时它们能够向状态服务器查询会话数据。

幸运的是有一种更有效的方法,一般客户浏览器能够保存用户的每一个会话信息。例如使用浏览器cookie,对数据加密并加上一个时间戳就能够保证安全了;URL重写。将会话信息存储在客户端一般是首选方案,由于这样负载均衡器就能够灵活的选择后台服务器来处理用户请求。然而这种方法不适应于一些较复杂的电子商务,由于电子商务中会话数据较大,并且须要服务器须要常常从新处理会话信息;与此同时URL重写因为用户能够改变会话流数据而存在安全问题;加密客户端cookies也一直存在着安全方面的争议,除非全部的会话都经过HTTPS,可是HTTP很容易遭到中间人攻击。

负载均衡器的特性

不管是软件负载均衡器,仍是硬件负载均衡器都有一系列的特性:

不对称负载调节。能够对后台服务器设置权重因子,权重因子用于控制服务器的请求处理量,进而控制服务器的负载。当后台服务器的处理能力不是等同的时候,这是一种控制服务器负载的简单方法。
    优先引导。当出现故障的服务器达到某个阈值,或者服务器负载太高时,备用服务器必需能够及时上线提供服务。
    SSL截断和加速。依赖服务器负载,处理加密数据或者经过SSL进行的受权请求会消耗Web服务器的大量CPU,随着需求增长用户会明显感受到响应时间变长。为了消除Web服务器上这部分(处理加密)负载,负载均衡器可能会将SSL通信截断在负载均衡器上。有些硬件负载均衡器上包含有专门用于处理SSL的硬件。当负载均衡器截断SSL链接请求,再将用户请求转发给后台前将HTTPS变为HTTP。只要负载均衡器不超载,这个特性不会影响用户体验。这种方法的负面效应是,因为全部SSL都由负载均衡器一台设备来处理,它会致使负载均衡器成为负载均衡体系的一个瓶颈。若是不使用这个特性,SSL请求将会分发给各个Web服务器处理。是否采用这一特性,须要分析比较二者的资金投入状况,含有处理SSL特殊硬件的负载均衡器一般价格高昂,而Web服务器通常比较廉价。增长少许的Web服务器的花费可能明显比升级负载均衡器要少。另外,一些服务器厂商如Oracle/Sun也开始在它们的CPU中加入加密加速模块,例如T2000。在负载均衡器上截断SSL的另外一个优势是容许负载均衡器能够对基于HTTPS请求数据进行负载均衡或内容交换。
    DDOS攻击防御。负载均衡器能够提供例如SYN cookies特性和延时绑定(在TCP握手完成以前,后台服务器不会与用户通信)来减缓SYN flood攻击,而且一般将工做从服务器分载到更有效的平台。
    HTTP压缩。使用gzip压缩HTTP数据,以减小网络上的数据传输量。对于响应时间较长,传输距离较远的用户,这一特性对于缩短响应时间效果明显。这个特性会要求更多一些的负载均衡器CPU,这一功能也能够由Web服务器来完成。
    TCP offload。不一样的厂商叫法可能不同。其主要思想是同样的,一般每一个用户的每一个请求都会使用一个不一样的TCP链接,这个特性利用HTTP/1.1未来自多个用户的多个请求合并为单个TCP socket再转发给后台服务器。
    TCP缓冲。负载均衡器能够暂存后台服务器对客户的响应数据,再将它们转发给那些响应时间较长网速较慢的客户,如此后台Web服务器就能够释放相应的线程去处理其它任务如直接整个响应数据直接发送给网速较快的用户。
    后台服务器直接响应用户(Direct Server Return)。这是不对称负载分布的一项功能,在不对称负载分布中请求和回应经过不一样的网络路径。
    (服务器)健康检查。负载均衡器能够检查后台服务器应用层的健康情况并从服务器池中移除那些出现故障的服务器。
    HTTP缓存。负载均衡器能够存储静态内容,当用户请求它们时能够直接响应用户而没必要再向后台服务器请求。
    内容过滤。有些负载均衡器能够按要求修改经过它的数据。
    HTTP安全。有些负载均衡器能够隐藏HTTP出错页面,删除HTTP响应头中的服务器标示信息,加密cookies以防止用户修改。
    优先队列。也可称之为流量控制。它能够对不一样的内容设定不一样的优先级。
    内容感知开关(Content-aware switching)。大多数负载均衡器能够基于用户请求的URL发送请求到不一样的后台服务器,不管内容是加密(HTTPS)仍是没有加密(HTTP)。
    用户受权。对来自不一样身份验证源的用户进行验证,而后再容许他们访问一个网站。
    可编程的流量控制。不仅一种负载均衡器容许使用脚本编程来定制负载均衡方法、任意的流量控制以及其它功能。
    防火墙功能。因为安全的缘由,不容许用户直接访问后台服务器。防火墙是由一系列规则构成,它们决定着哪些请求能够经过一个接口而哪些不被容许。
    入侵阻止功能。在防火墙保障网络层/传输层安全的基础上,提供应用层安全防范.

在电信行业的应用

负载均衡对通信链路的冗余是很是有用的。例如,一家公司可能有多条互联网接入线路以保证某一条故障时仍能够正常接入互联网。

故障转移的架构意味着一条链接正常使用,另一条链接做为备用,当第一条出现故障时才会被启用。

使用负载均衡器,两条(多条)链接能够都投入使用。有一个设备或者程序实时监控着全部链接的连通性,而且对正在发送的包进行选路。同时使用多条链接能够增长带宽。

许多电信公司在其内部网络或链接到外部网络(其它电信网络)都有多条线路可使用。为避免某条链路出现网络堵塞,最小化链接其它网络的费用或者提升网络的可靠性,它们使用负载均衡将流量从一条链路转移到另外一条链路。IEEE 802.1aq - Shortest Path Bridging

负载均衡的另外一个用途是监控网络活动。负载均衡器能用于将巨大的网络流量分割为几个子流并使用网络分析器,每一个都读取原始数据的一部分。这对于监视10GbE, STM64高速网络很是有用,在这些网络上因为数据量太大进行复杂的数据处理几乎是不可能的。

在电子邮件服务器的应用 Anti-spam Gateway或Anti-spam服务端软件 与备援关系 系统日志案的扫描(log scan)

与故障转移的关系

负载均衡常常被用于实现故障转移-当一个或多个组件出现故障时能持续提供服务这些组件都在持续监控(例如:Web服务器经过请求一个已知页面来监控是否正常工做)中,当一个组件没有响应,负载均衡器就会发现并再也不向其发送数据。一样当一个组件从新上线,负载均衡器会从新开始向其发送数据。为了可以如前所述正常工做,负载均衡体系中至少要有一个冗余服务。采用一用一备方案(一个组件提供服务,一个备用,当主组件故障时备用组件将接管继续提供服务)比故障转移方案更加经济,灵活。有些类型的RAID系统使用的热备份功能跟这是相似的做用。

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息