4.4.2 从负载均衡到网关
随着微服务架构、容器编排调度等技术的崛起,现代分布式系统已经越来越动态,这就意味着通过静态文件配置方式早已过时。作为分布式系统的入口,负载均衡器就需要转换角色,不仅仅作为一个代理,而是要承担提供更多现代化的功能。把这些功能统一前移某一层独立支持,实现 API Gateway as a Service,让各个服务直接接入,在管理平台上管理,可视化配置等等,这样就实现了一个全局的视图统一管理这些功能。
而这就是七层负载均衡的升级 -- 网关(API Gateway)。
API Gateway 在业内已经有非常多的成熟开源方案,如果按实现语言以及成熟度来讲,主流有以下几个方案。
语言 | 网关 | 特点 |
---|---|---|
Nginx + LuaJIT | OpenResty | 原始 Web 开发平台 |
Nginx + Lua | Kong | 社区活跃、成熟度高、Postgres 存储、二次开发成本高 |
Nginx + Lua | Apache/APISIX | 云原生化、使用 etcd 存储、性能高、二次开发成本低 |
Java | Spring Cloud Alibaba | Spring Cloud 生态、社区成熟度高、国内应用广泛 |
这些现代化的网关方案各有各的特点,实现的功能也非常强大,笔者不再逐一展开,下面简单列举部分实现,以便读者对它“强大功能”有个直观的感受。
协议支持 现代网关系统正在显式添加对更多协议的支持。负载均衡器对应用层协议了解的越多, 就可以处理越多更复杂的事情,包括观测输出、高级负载均衡和路由等等。例如,在写作本文时,Envoy 显式支持如下七层协议的解析和路由:HTTP/1、HTTP/2、gRPC、Redis、MongoDB、DynamoDB。
动态配置 服务管理的动态配置包括路由、上游服务(Upstream)、SSL证书、消费者等等,数据的替换和更新不会产生任何中断,从而将线上流量的影响降低到最低。
流量治理 在很多微服务架构中,流量治理都需要在七层中进行,譬如超时、重试、限速、熔断、流量镜像、缓存等等。现代网关系统在服务以及流量的管理上可对多业务进行收敛,统一处理,降低多套网关的运维成本。
可观测性:在互联网快速发展的今天,基础设施与应用的部署构建都发生了极大变化,特别是基于分布式、微服务的体系架构,传统的监控方式已经无法适应云原生的场景。服务治理的可观测性输出是网关系统提供的最重要的特性。系统度量、分布式跟踪以及自定义日志等功能现在几乎是七层负载均衡解决方案的标配。
可扩展性 例如典型的 OpenResty,通过编写可插拔的插件然后加载到负载均衡器,能够轻松地对网关系统实现各种流量处理和分发功能等自定义功能,比如流量限速、日志记录、安全检测、故障注入等等。
高可用以及无状态设计:现代网关系统不仅提供数据面实现,还提供控制面实现,二者目标都在朝向无状态设计,可以轻松地实现水平扩展。网关架构整体上也默认高可用,不存在单点故障。