4.5 从七层负载均衡到网关

早期的七层负载均衡器(如 Nginx)依赖静态配置,仅具备基本的请求代理功能。随着微服务和容器化技术的兴起,负载均衡器开始承担更多职责,逐步从“流量工具”演变为“系统的边界控制层” —— 网关。

业界较流行的网关系统(高级负载均衡器)如表 4-1 所示。

表 4-1 业内网关系统代表

名称简介
OpenResty基于 Nginx 的高性能 Web 平台,集成了大量模块,用来处理 HTTP 请求,被许多企业作为内部网关的基础框架。
Kong构建在 OpenResty 上的网关平台,有丰富的插件体系,支持身份认证、限流、日志记录、监控等功能。
Spring Cloud GatewaySpring 框架下的 API 网关解决方案,与 Spring Cloud 生态(如 Eureka、Config Server)深度集成,广泛应用于 Java 技术栈的微服务项目。
Traefik专为容器化系统设计,可与 Kubernetes、Docker 无缝集成。支持自动服务发现、动态配置路由、请求限流、身份验证、可观测等。
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 脚本或集成第三方插件,可实现数据缓存、身份认证、安全防护、日志监控等自定义功能。

  • 高可用以及无状态设计:网关系统强调“无状态”(stateless)架构设计,即每个请求都被视为独立的,不依赖于任何先前的请求或存储在服务器上的会话信息。通过消除服务器状态依赖,系统能够轻松实现水平扩展!

总字数:967
Last Updated:
Contributors: isno