负载均衡

✍ dations ◷ 2025-07-10 09:17:31 #路由,网络管理,服务器

负载平衡(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系统使用的热备份功能跟这是类似的作用。

相关

  • β-受体阻滞药β受体阻断药(英语:Beta blockers),又称Beta受体阻断药、β受体阻断剂、β受体阻滞剂、β受体拮抗剂或β阻断药、乙型阻断剂,是一类用来治疗心律不齐、防止心脏病发作后的二次心
  • 婴儿营养婴儿和新生儿营养,是指新生儿和婴儿日常饮食的营养需求。充分摄入营养丰富的食物,可以为婴儿提供了健康所需的能量和营养,其中缺乏基本卡路里、矿物质、营养液和维生素的婴儿饮
  • 阿乌尔阿乌尔(车臣语:oil;俄语:аул),突厥语解村落,是指高加索特别是达吉斯坦地区一种堡垒型村落。阿乌尔一般由石头建造有两层高,建在悬崖上,防止敌人入侵。同时通常向南,确保冬天温暖。
  • 保定专区保定专区,中华人民共和国河北省已撤销的行政区,在今河北省中部。1949年置,专员公署驻保定市,辖清苑、易县、满城、徐水、涞源、定兴、完县、唐县、望都、涞水、涿县、高阳、安新
  • 神田警察署神田警察署(かんだけいさつしょ)是日本东京都警视厅所管辖的警察局,属第一方面本部。署员约200名。识别章为MC。无驻在所。神田署旁是东京电机大学神田校区。正面道路名为“神
  • 阿里山玛翡咖啡阿里山玛翡咖啡(又名:邹族咖啡)属于精品咖啡,产于台湾省嘉义县大阿里区地带,属于高山咖啡中的精品咖啡。有阿里山区邹族原住民培育种植,玛翡(Mfeel)取自阿里山邹族原住民邹语,是很好
  • 马凤图马凤图(1888年-1973年),字健翔,河北省沧县孟村人,回族,武术家与中医,通备武学体系的集大成者,擅长劈挂拳与八极拳。为中华武士会创办者之一,曾任甘肃省政协委员。其弟马英图亦为著名武
  • 李建荣 (1926年)李建荣(이건영)((1926-09-02)1926年9月2日- )韩国前军人与前政治家 原籍咸平,生于江原道宁越郡,在江原道铁原郡度过幼年,号晚湖。《이건영 회고록:败者의 胜利》1996-5 进明文化社
  • 邵德孚邵德孚(1897年-1967年),男,山东沂水人,中华人民共和国政治人物,曾任山东省立医院院长,山东省医学院院长,山东省政协副主席。
  • NessusNessus为一款系统弱点扫描与分析软件。1998年,Nessus的创办人Renaud Deraison展开了一项名为"Nessus"的计划,其计划目的是希望能为互联网社群提供一个免费、威力强大、更新频