负载均衡

✍ dations ◷ 2025-06-10 00:40:41 #路由,网络管理,服务器

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

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

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

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

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

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

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

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


负载均衡器需要处理的一个重要问题是:如何保存用户会话?如果会话信息保存在后台服务器,用户接下来的请求可能会被分配到不同的后台服务器,此时用户会话就无法继续。负载均衡器可以缓存用户会话,然后将用户请求分发到不同的后台服务器。但是这将带来负载均衡器的负载问题。

理想下,在负载均衡后面的服务器集群(Server cluster)不应该保存会话(session-aware),如此一来,一个用户不管什么时候连接任何一个后端服务器都不会收到影响。常用的方案是通过一个磁盘数据库(传统数据库)或者一个内存数据库(如: Memcached),实例可参考:Django 缓存框架。 将会话信息存到磁盘数据库的这个方案由于会增加数据库的负载,所以这个方案对性能的提高并不好。磁盘数据库最好是用来存储会话时间比较长的会话数据。

为了避免数据库出现单点故障,并且提高其扩展性,数据库通常会复制到多台服务器上,通过负载均衡器来分发请求到数据库服务器上。微软ASP.NET中的状态服务器技术就是一个典型的会话数据库的例子。集群中的所有服务器都将它们的会话信息保存到状态服务器上,同时它们可以向状态服务器查询会话数据。

另一个简单的解决方案是,将一个指定的用户的的今后的所有请求都会发送到同一个后台服务器——这种方案也被称为“粘性(sticky)会话”或者“持续化(persistence)”。但该方案的不足之处在于:无法容错(故障转移),假如后台服务器故障,该用户的所有的会话的访问,自然地会话本身也将丢失。即便是数据库服务器也发生该情况。虽然Web服务(Web Service)不存在状态和粘性(sticky),但是用户和数据库存是绑定的(存在粘性)。

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

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


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

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

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

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

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

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

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

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

相关

  • 北高加索北高加索又称内高加索,指的是高加索山脉以北的欧亚交界区域。在政治概念上包括了格鲁吉亚和阿塞拜疆的部分地区,及俄罗斯的克拉斯诺达尔边疆区、斯塔夫罗波尔边疆区、阿迪格共
  • 范德华方程范德华方程(van der Waals equation)(一译范德瓦耳斯方程),简称范氏方程,是荷兰物理学家范德华于1873年提出的一种实际气体状态方程。范氏方程是对理想气体状态方程的一种改进,特点
  • 民主德国德意志民主共和国(德语:Deutsche Demokratische Republik;英语:German Democratic Republic),简称民主德国(DDR)、东德或民德,是存在于1949年至1990年的中欧社会主义国家。1949年10月
  • 各国人口出生率列表这篇文章包括2个出生率的版本,出生率是指每年、每一千人当中的新生人口数。第一个列表依据联合国人口司五年期的估计和预测。使用的数据是2005年-2010年假设值的中位数,整个世
  • 爱德华·艾伯尔爱德华·华尔特·艾伯尔(英文:Edward Walter Eberle,1864年8月17日-1929年7月6日)海军上将,美国第三任海军作战部长。艾伯尔出生于德州丹顿市,父母为约瑟夫与玛丽·艾伯尔。艾伯尔
  • 若雪·柯利雷切尔·爱力恩·科里(Rachel Aliene Corrie,1979年4月10日-2003年3月16日),美国和平工作者、国际团结运动(ISM)成员,在加沙地带南部拉法赫,遭以色列国防军(IDF)的武装推土机辗死。她生
  • 佩皮斯图书馆佩皮斯图书馆(Pepys Library)是剑桥大学莫德林学院的图书馆。图书馆收藏了塞缪尔·皮普斯的个人藏书,他在过世后将这些藏书全部捐给学院。图书馆藏书中不乏珍品图书。佩皮斯图
  • 罗森·普列夫内利耶夫罗森·阿森诺夫·普列夫内利耶夫(Rosen Asenov Plevneliev,保加利亚语:Росен Асенов Плевнелиев;1964年5月14日-),2012年1月以来担任保加利亚总统。他是在2
  • 孟乔芳孟乔芳(?年-1656年),字心亭,直隶省永平府卢龙县(今河北省卢龙县)人,中国明清年间将领。父孟国用是明宁夏总兵官。孟乔芳为副将,因事被罢职居家。清天聪四年(1621年),清兵入塞,皇太极攻取
  • 为恭纪念医院为恭纪念医院(全名:为恭医疗财团法人为恭纪念医院),是位于台湾苗栗县头份市的大型教学医院,1994年创立。为恭纪念医院的前身为“矿工医院头份分院”,由前省议员林佾廷创立于1984