1. 问题的提出
负载均衡并不是一个很新的技术方向。硬件形态的负载均衡器至少已经存在了二十年。在传统的硬件网络负载均衡器中,包含了比较综合的功能。从协议的角度,包含了对TCP、UDP流量的支持,也包含了对HTTP、HTTPS等协议的处理。
而在大多数互联网公司中,普遍使用软件形态的负载均衡器,并且基于所处理的协议区分为两种不同的系统:
(1) 四层负载均衡,也被称为网络负载均衡,仅用于对TCP、UDP流量进行处理。四层负载均衡在转发中主要基于IP地址、端口等信息。四层负载均衡的开源软件包括LVS、DPVS、Katran等,代表了三种方案:Linux内核,DPDK,eBPF(Extended Berkeley Packet Filter)。
(2) 七层负载均衡,也被称为应用负载均衡,支持HTTP、HTTPS、SSL、TLS等协议的处理。七层负载均衡在转发中可以利用应用层的信息,如HTTP的请求头部,而这些信息对四层负载均衡来说是不可见的。七层负载均衡的开源软件包括Nginx、BFE、Traefik、Envoy、HAProxy等。
随着对于流量管理需求的提升,七层负载均衡的重要性越来越高。很多公司都在加强七层负载均衡接入层的建设。而目前这方面的软件方案比较多,应该如何选型呢?
2. 七层负载均衡的生态
七层负载均衡的功能要比四层负载均衡复杂的多,独立研发非常困难,一般都要依托于一个强大的生态才能发展起来。
目前,在七层负载均衡领域,有3个比较强大的生态:
(1) Nginx / OpenResty 生态
Nginx是一个使用非常广泛的Web Server开源软件,后来也被用做反向代理。经过多年的发展,在Nginx上积累了大量的功能。为了解决Nginx功能开发成本高的问题,由章亦春在Nginx上增加了Lua执行模块,形成了OpenResty的生态。之后有一些软件基于OpenResty来开发,如APISIX。
(2) Envoy生态
Envoy最早由Lyft公司研发,后来Google也参加进来。与Nginx相比,Envoy做了一些调整和优化。Envoy最早被设计用于Service Mesh,作为sidecar网关。后来也逐步用于其它七层负载均衡的使用场景。
(3) Go语言生态
Go语言具有开发成本低、安全性和稳定性高的特点,并且Go语言有大量的开源代码库,这使得一些公司选用Go语言来实现七层负载均衡ÿ