4.4.2 从七层代理到网关系统

随着微服务架构、容器编排调度等技术的崛起,现代分布式系统已经越来越动态,这就意味着通过静态文件配置方式早已过时。

作为分布式系统的入口,七层负载均衡(代理)就需要转换角色,不仅仅作为一个代理,而是要承担提供更多现代化的功能。把这些统一的功能前移某一层独立支持,实现 API Gateway as a Service,让各个服务直接接入,在管理平台上管理,可视化配置等等,这样就实现了一个全局的视图统一管理这些功能,这就是七层负载均衡的升级 —— 网关(API Gateway)

网关在业内已经有非常多的成熟开源方案,如果按实现语言以及成熟度来讲,主流的方案如表 4-1 所示。

表 4-1 业内网关代表方案

网关特点
OpenResty基于 Nginx 和 LuaJIT 的高性能 Web 平台。通过 LuaJIT 引擎,OpenResty 允许用户在 Nginx 中编写 Lua 脚本。这使得开发者可以在请求处理的不同阶段(如请求、响应、重写、日志等)动态地执行自定义逻辑 ,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。
Kong社区活跃、成熟度高、Postgres 存储、二次开发成本高
Spring Cloud GatewaySpring Cloud Gateway 是 Spring 生态系统中的一个网关解决方案,适用于 SpringBoot 和 SpringCloud 构建的微服务系统
TraefikDocker、Kubernetes 等容器编排系统紧密结合。
EnvoyEnvoy 是 Lyft 开发的一款面向服务网格的高性能网络代理,支持高级的路由控制、负载均衡策略、服务发现和健康检查等。Envoy 与 Istio 等服务网格解决方案紧密结合,通常作为它们的数据平面代理使用。

这些现代化的网关方案各有各的特点,实现的功能也非常强大,简单列举部分网关功能,以便读者对“强大功能”有个直观的感受。

  • 协议支持:网关对应用层协议了解的越多,就可以处理越多更复杂的事情,如系统可观测、高级负载均衡和路由等。云原生网关的典型代表 Envoy 支持如下七层协议的解析和路由:HTTP/1、HTTP/2、gRPC、Redis、MongoDB、DynamoDB 等等。

  • 动态配置: 服务管理的动态配置包括路由、上游服务(Upstream)、SSL证书、消费者等等,数据的替换和更新不会产生任何中断,从而将线上流量的影响降低到最低。

  • 流量治理:很多微服务架构中,流量治理都需要在七层中进行,譬如超时、重试、限速、熔断、流量镜像、缓存等等。现代网关系统在服务以及流量的管理上可对多业务进行收敛统一处理,降低多套网关的运维成本。

  • 可观测性:互联网快速发展的今天,基础设施与应用的部署构建都发生了极大变化,特别是基于分布式、微服务的体系架构,传统的监控方式已经无法适应云原生的场景。服务治理的可观测性输出是网关系统提供的最重要的特性。系统度量、分布式跟踪以及自定义日志等功能现在几乎是七层负载均衡解决方案的标配。需要指出的是,丰富的可观测数据并不是没有代价的,负载均衡器需要做一些额外的工作才能产生这些数据。但是,这些数据带来的收益要远远大于为产生它们而增加的那点性能损失。

  • 可扩展性:例如典型网关 OpenResty,通过编写可插拔的插件能够轻松地对网关系统实现各种流量处理以及各类自定义功能,譬如流量限速、日志记录、安全检测、故障注入等等。

  • 高可用以及无状态设计:现代网关系统不仅提供数据面实现,还提供控制面实现,二者目标都在朝向无状态设计,可以轻松地实现水平扩展。网关架构整体上也默认高可用,不存在单点故障。

总字数:1131
Last Updated:
Contributors: isno