API网关落地实践:从统一入口到运行时流量治理
刚入行做服务端那几年,我对API Gateway一直有个误解:以为它就是一台普通的反向代理,把请求转发给后端服务而已。直到系统规模上来,几十个服务各自暴露接口,鉴权、限流、日志到处重复写,出了故障互相甩锅,我才真正理解那句话——网关存在的意义,就是用相对稳定的入口,去消化下游层出不穷的变数。今天想聊我落地API Gateway从统一入口到运行时流量治理的完整心路:为什么需要它、怎么选型、运行时流量治理那些算法和真实场景,以及在线上踩过的坑。这篇文章适合后端工程师、应用架构师和做基础设施的运维同学,也适合正打算给团队引入网关的人参考。
1. 为什么非要有统一入口:API Gateway 的定位与价值
1.1 没有统一入口的日子,我经历过什么
先回忆一个没有网关的项目。服务大概二十个,每个服务都有自己的域名或者直接暴露IP端口,移动端、Web端、第三方开放平台各调各的。表面上看没什么问题,但维护成本是隐性的:
- 客户端要维护多套Base URL,服务端每个接口都要自写鉴权逻辑,公共参数校验重复三四遍;
- 某个服务突然出现慢查询或者限流需求,只能改那个服务代码,快则半小时慢则一上午;
- 有一次某个内部管理接口被裸奔到公网,没有统一入口做网络策略,差点被刷成肉鸡。
后来我们把所有请求收敛到一个统一入口,上面挂Nginx做基础转发,再配合一些Lua脚本做鉴权。那一瞬间的感受是:整个世界清净了。客户端只需要知道一个域名;服务端不再关心通用的横切逻辑;安全团队也只需要对单个入口做强管控。
1.2 统一入口解决的三件事:路由、通用能力、安全边界
从实际落地来看,API Gateway 作为统一入口,重点解决三个问题。
第一是路由与聚合。一个请求进来,网关知道它该去哪个服务,知道该走HTTP还是gRPC,知道是否需要合并多个后端返回。没有这层路由,客户端要自己拼装多个接口,体验和性能都差。
第二是通用能力的下沉。鉴权、限流、超时、重试、日志、监控埋点,这些横切逻辑几乎每个服务都需要。在网关上做一次,比在每个服务里重复造轮子稳定得多。有时候业务团队很抗拒在网关层做这些,原因是“改起来要等基础设施排期”,但等到线上流量突增,你才会发现集中管理比分散控制容易太多。
第三是安全边界的收敛。对外只需要暴露网关,内网服务不用开公网端口。不管是IP黑名单、WAF还是访问频率控制,都在入口收紧。这个价值很难量化,但一旦被薅羊毛或者被攻击,你会感谢有这层边界。
我在团队里常说一句话:统一入口是“不变”,下游服务和流量是“万变”。只要网关的转发逻辑够稳定,后面哪怕服务拆了、换了、扩了,客户端都不需要感知。
2. 统一入口的搭建与选型:不能只盯着性能
2.1 网关选型对比:从 Nginx 到云原生网关
真正开始选型的时候,你会发现市面上的网关并不少。我经历过几代产品,简单对比一下:
| 方案 | 性能 | 扩展性 | 动态更新 | 适用场景 |
|---|---|---|---|---|
| Nginx + Lua | 极高 | 靠Lua脚本,强度一般 | 需要reload或第三方模块 | 轻量级统一入口 |
| Kong | 高 | 插件机制成熟 | 支持声明式配置 | 多团队共用网关 |
| APISIX | 高 | 插件丰富,热更新 | 支持etcd,动态路由 | 云原生、需要平滑发布 |