万亿级流量转发:BFE核心技术与实现
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.3 四层负载均衡和七层负载均衡

在传统的硬件网络负载均衡器中,包含了比较综合的功能。从协议的角度,包含了对 TCP、UDP流量的支持,也包含了对 HTTP、HTTPS等协议的处理。

而在大多数互联网公司中,普遍使用软件形态的负载均衡器,并且基于所处理的协议将其区分为两种不同的系统。

(1)四层负载均衡,也被称为网络负载均衡,仅用于对 TCP、UDP流量进行处理。四层负载均衡在转发中主要基于 IP地址、端口等信息。四层负载均衡的开源软件包括 LVS、DPVS等。

(2)七层负载均衡,也被称为应用负载均衡,支持 HTTP、HTTPS、SSL(Secure Sockets Layer,安全套接层协议层)、TLS等协议的处理。七层负载均衡在转发中可以利用应用层的信息,如 HTTP的请求头,而这些信息对四层负载均衡来说是不可见的。七层负载均衡的开源软件包括 Nginx、BFE、Traefik、Envoy等。

有一些软件同时支持了四层负载均衡和七层负载均衡,如 Nginx和HAProxy。但是在大规模部署场景中,一般会使用专用的四层负载均衡软件,主要原因是四层负载均衡和七层负载均衡这两个场景存在较大差异,适合使用不同的技术栈来实现。

四层负载均衡软件和七层负载均衡软件特点分析如下。

(1)四层负载均衡软件需要很强的处理能力,以达到较高的性价比,并用于抵御来自外网的 DDoS攻击。第2章中介绍的 BGW软件使用 C语言并基于 DPDK技术研发,在单台x86服务器上可以处理50Gb/s网络流量,每秒可以处理的新建连接超过100万个。要获得更高的性能,就需要软件的整体逻辑比较简单,并且没有高资源消耗的功能。同时,因为性能和稳定性方面的高要求,这样的软件其新功能研发的成本也比较高,开发新功能及变更上线的周期比较长。

(2)七层负载均衡软件的功能比较复杂,并且需要不断增加新的功能。七层负载均衡软件可以“看到”应用层的信息,功能的空间比四层负载均衡软件要大很多。由于它更贴近业务,也会不断收到来自业务的需求,需要不断地开发出新的功能特性;由于互联网业务的特性,需要更快的开发和上线速度,七层负载均衡软件对于性能方面的要求比四层负载均衡软件要低,从带宽吞吐方面来说,二者几乎差距一个量级。

图3.4中以百度的 BGW和 BFE为例,展示了四层负载均衡软件和七层负载均衡软件混合使用的场景。

图3.4 四层负载均衡软件和七层负载均衡软件混合使用的场景

(1)BGW和交换机的互联。BGW通过 BGP或 OSPF(Open Shortest Path First,开放式最短路径优先)路由协议和上游的交换机进行路由交互。交换机使用 ECMP(Equal-Cost Multi-Path routing,等价路由)机制,将流量哈希分发到多个 BGW实例。

对于某个 VS(Virtual Server,虚拟服务器,由 IP地址、协议、端口来标识),所有的 BGW实例都可以接收和处理其流量。通过这种方式,实现了 BGW的分布式容错,在单个 BGW实例故障的情况下,BGW集群仍能继续处理流量转发。

(2)BGW和下游服务的互联。每个 BGW实例按照轮询调度(Round Robin)或设定的其他策略,将流量转发给下游的 RS(Real Server,真实服务器)。

(3)BGW和 BFE的互联。在使用七层负载均衡的场景中,BGW把BFE当作 RS,将发往某个 VS的流量转发给下游的 BFE实例。在 BFE实例出现故障的情况下,BGW可以将有故障的 BFE实例自动摘除。

(4)BFE和下游服务的互联。每个 BFE实例按照轮询调度或设定的其他策略,将流量转发给下游的 RS。