4.5 负载均衡

在互联网时代的早期,网站流量还相对较小,业务也相对简单,单台服务器便可满足访问需要,但时至今日,互联网应用也好,企业级应用也好,一般实际用于生产的系统,几乎都离不开集群部署。信息系统不论是单体架构多副本还是微服务架构,不论是为了实现高可用还是为了获得高性能,都需要利用多台机器来扩展服务能力,希望用户的请求不管连接到哪台机器上,都能得到相同的处理。另一方面,如何构建和调度服务集群这件事,又必须对用户保持足够的透明,即使请求背后是由一千台、一万台机器来共同响应的,也无须用户关心,他们只需要记住一个域名地址即可。调度后方的多台机器,以统一的接口对外提供服务,承担此职责的技术组件被称为“负载均衡”(Load Balancing)。

真正大型系统的负载均衡过程往往是多级的。譬如,在各地建有多个机房,或机房有不同网络链路入口的大型互联网站,会从DNS解析开始,通过“域名”→“CNAME”→“负载调度服务”→“就近的数据中心入口”的路径,先将来访地用户根据IP地址(或者其他条件)分配到一个合适的数据中心中,然后才到各式负载均衡。在DNS层面的负载均衡与前面介绍的DNS智能线路、内容分发网络等在工作原理上是类似的,差别只是数据中心能提供的不只是缓存,而是全方位的服务能力。由于这种方式此前已经详细讲解过,后续我们所讨论的“负载均衡”就只聚焦于网络请求进入数据中心入口之后的其他级次的负载均衡。

无论在网关内部建立了多少级的负载均衡,从形式上来说都可以分为两种:四层负载均衡和七层负载均衡。在详细介绍它们是什么以及如何工作之前,我们先来建立两个总体的、概念性的印象。

·四层负载均衡的优势是性能高,七层负载均衡的优势是功能强。

·做多级混合负载均衡,通常应是低层负载均衡在前,高层负载均衡在后。

我们所说的“四层”“七层”指的是经典的OSI七层模型中的第四层传输层和第七层应用层。表4-1是维基百科上对OSI七层模型的介绍(笔者做了简单的中文翻译),这部分属于网络基础知识,这里就不多解释了。后面我们会多次使用到这张表,如你对网络知识并不是特别了解,可自行查阅相关资料。

表4-1 OSI七层模型

现在所说的“四层负载均衡”其实是多种均衡器工作模式的统称,“四层”是说这些工作模式的共同特点是维持同一个TCP连接,而不是说它只工作在第四层。事实上,这些模式主要都工作在第二层(数据链路层,改写MAC地址)和第三层(网络层,改写IP地址)上,单纯只处理第四层(传输层,可以改写TCP、UDP等协议的内容和端口)的数据无法做到负载均衡的转发,因为OSI的下三层是媒体层(Media Layer),上四层是主机层(Host Layer),既然流量都已经到达目标主机上了,也就谈不上什么流量转发,最多只能做代理。但出于习惯和方便,现在几乎所有的资料都把它们统称为四层负载均衡,笔者也同样称呼它为四层负载均衡,如果读者在某些资料上看见“二层负载均衡”“三层负载均衡”的表述,应该了解这是在描述它们工作的具体层次,与这里说的“四层负载均衡”并不是同一类意思。下面笔者将介绍几种常见的四层负载均衡的工作模式。