4.5 七层负载均衡技术

早期的七层负载均衡器(如 Nginx)采用静态配置,提供基本的请求代理功能。随着微服务和自动扩缩容等技术的发展,负载均衡器对配置管理和功能的需求不断增加。本节将简要概述一些现代七层负载均衡器的核心功能,供读者参考。

根据实现语言以及应用场景来说,业界较流行的七层负载均衡器如表 4-1 所示。

表 4-1 业内部分高级负载均衡器代表方案

网关特点
OpenResty基于 Nginx 和 LuaJIT 的高性能 Web 平台。通过 LuaJIT 引擎,OpenResty 允许用户在 Nginx 中编写 Lua 脚本。这使得开发者可以在请求处理的不同阶段(如 rewrite、access、content、log 等)动态地执行自定义逻辑 ,快速构造出高性能且功能强大的 Web 应用。
KongKong 是一个开源 API 网关和微服务管理层,具有负载均衡能力。它提供丰富的插件系统,支持身份验证、流量控制、监控等功能,是许多现代微服务架构的选择。
Spring Cloud GatewaySpring 生态系统中的网关解决方案,提供了灵活的路由、过滤、负载均衡和安全功能。
TraefikTraefik 是一种现代的开源反向代理和负载均衡器,适合动态、容器化和微服务环境。它支持自动服务发现、动态路由、TLS 卸载、动态配置等功能,并提供直观的仪表板以监控流量和服务状态。
EnvoyEnvoy 是 Lyft 开发的一款面向服务网格的高性能网络代理,支持高级的路由控制、负载均衡策略、服务发现和健康检查等。Envoy 与 Istio 等服务网格解决方案紧密结合,通常作为服务网格的数据平面出现。

这些高级负载均衡器各有各的特点,实现的功能也非常强大,笔者不再一一介绍,简单列举部分功能,以便读者对“强大”有个直观的感受。

  • 协议支持:负载均衡器对应用层协议了解的越多,就可以处理更复杂的事情,包括系统可观测、高级负载均衡和内容路由等。以高级负载均衡器 Envoy 为例,它支持如下协议:HTTP/1、HTTP/2、HTTP/3(QUIC)、gRPC、TCP、TLS、WebSocket、PostgreSQL、Redis、MongoDB、DynamoDB 等等。

  • 动态配置:随着分布式系统的动态性不断增强,需要在两个方面进行投资:一是动态控制,即实时调整系统行为;二是响应式控制,即根据环境变化做出快速反应。以 Istio 为例,其架构分为控制平面和数据平面:

    • 数据平面(负责动态控制):负责微服务之间的请求转发、负载均衡、熔断、重试、超时设置等流量管理策略。
    • 控制平面(负责响应式控制):集中配置和管理数据平面的行为,提供一个统一的接口来定义和修改流量管理策略。
  • 流量治理:在分布式架构中,服务间的通信治理(超时、重试、限速、熔断、流量镜像和缓存等)是必不可少的环节。作为集群的入口,负载均衡器提供统一的收敛处理,最大程度降低业务系统的运维成本。

  • 可观测性:在介绍通用负载均衡器的特性时提到:随着系统的动态性增强,调试难度也随之增加。现代七层负载均衡器最重要的能力之一是提供健全的协议级可观测性。如今,指标、链路追踪和日志等功能几乎已成为七层负载均衡解决方案的标配,如上面提到的 Envoy、Traefik,支持集成 Prometheus、Grafana、Jaeger 等监控和追踪工具。

  • 可扩展性:现代七层负载均衡器通常插件化的架构,允许开发者根据需求加载特定的插件。如 OpenResty,允许开发者编写 Lua 脚本或直接使用第三方插件实现数据缓存、认证授权、安全保护、日志监控等各类自定义功能。

  • 高可用以及无状态设计:现代高级负载均衡器在数据面和控制面的实现上都致力于无状态设计。通过一致性哈希技术,软件层面的无状态应用能够轻松实现水平扩展。

总字数:1157
Last Updated:
Contributors: isno