BFE和相关开源项目的对比

下面将BFE和一些相关的开源项目(Nginx/Envoy/Traefik)进行对比。需要说明的是,由于这些项目在活跃开发中,信息可能过期或有误。

项目的定位

在各开源项目的官网上对其定位描述如下:

  • BFE: BFE是一个开源的七层负载均衡系统。
  • Nginx: Nginx是HTTP服务、反向代理服务、邮件代理服务、通用TCP/UDP代理服务。
  • Envoy: Envoy是开源的边缘和服务代理,为云原生应用而设计。
  • Traefik: Traefik是先进的HTTP反向代理和负载均衡。

功能对比

协议支持

  • 这四个系统都支持HTTPS和HTTP/2, 并计划或正在开发支持HTTP/3

健康检查

  • BFE和Nginx只支持“被动”模式的健康检查。
  • Envoy支持主动、被动和混合模式的健康检查。
  • Traefik只支持“主动”模式的健康检查。

注:Nginx商业版支持“主动”模式的健康检查。

实例级别负载均衡

  • 这四个系统都支持实例级别负载均衡

集群级别负载均衡

  • BFE、Enovy、Traefik都支持集群级别负载均衡
  • Nginx不支持集群级别负载均衡

注:Envoy基于全局及分布式负载均衡策略

对于转发规则的描述方式

  • BFE基于条件表达式
  • Nginx基于正则表达式
  • Envoy支持基于域名、Path及Header的转发规则
  • Traefik支持基于请求内容的分流,但无法支持灵活的与或非逻辑

扩展开发能力

编程语言

  • BFE和Traefik都基于Go语言
  • Nginx使用C和Lua开发
  • Envoy使用C++开发

可插拔架构

  • 这4个系统都使用了可插拔架构

新功能开发成本

由于编程语言方面的差异,BFE和Traefik的开发成本较低,Nginx和Envoy的开发成本较高。

异常处理能力

由于编程语言方面的差异,BFE和Traefik可以对异常(在Go语言中称为Panic)进行捕获处理,从而避免程序的异常结束; 而Nginx和Envoy无法对内存等方面的错误进行捕获,这些错误很容易导致程序崩溃。

可运维性

内部状态展示

  • BFE对程序内部状态,提供了丰富的展示
  • Nginx和Traefik提供的内部状态信息较少
  • Envoy也提供了丰富的内部状态展示

配置热加载

  • 4个系统都提供配置热加载功能
  • Nginx配置生效需重启进程,中断活跃长连接

注:Nginx商业版支持动态配置,在不重启进程的情况下热加载配置生效