第1章 API网关概述
什么是API网关
先问你个问题——你写微服务的时候,有没有被这种事烦过?每个服务都要自己做认证、做限流、做日志。代码写了一堆,最后发现逻辑全是重复的。我最早带团队做微服务改造时,就吃过这个亏。后来才意识到,我们需要一个“入口管家”。
所谓的API网关,说白了就是放在客户端和后端服务之间的一个中间层。它统一接管所有外部请求,然后做路由、过滤、安全校验,再分发给对应的后端服务。你想想看,这就像公司的前台——所有访客先登记、领牌,再由前台引导去不同办公室,而不是让每个部门自己雇个门卫。
在我见过的生产环境里,API网关几乎是微服务架构的标配。尤其是当服务数量超过10个,或者你对外暴露多个协议(HTTP、gRPC、WebSocket)时,没有网关的日子会很难过。
核心功能,一个个说
API网关不是银弹,但它确实帮你扛下了几个最头疼的活。我带你过一遍,心里就有数了。
1. 路由转发
最简单的功能。客户端请求进来,网关根据路径、Header、Method 等条件,把请求转到正确的上游服务。举个例子:/api/users 转给用户服务,/api/orders 转给订单服务。我在项目中见过有人用Nginx硬写location规则,服务一变就改配置,累得够呛。用网关后,改个路由规则就一行配置的事。
2. 认证与授权
这个不用多说。统一认证,不用每个服务重复写JWT校验。网关替你解析,如果过期直接返回401,根本没机会到后端。我踩过坑——早期我们让每个服务自己校验,结果有个服务忘了校验,被第三方直接调接口删了数据……嗯,从那以后我再也不让后端自己管认证了。
3. 限流与熔断
流量洪峰来了怎么办?限流就是给每个用户或每个API规定“每分钟最多请求100次”,超了就拒绝。熔断则是上游服务挂了,网关直接短路,避免级联崩溃。我记得在双十一大促前,我们给核心接口配置了限流策略,结果当天流量是平时20倍,网关帮我们挡住了80%的无效请求,后端服务稳稳的。
4. 监控与日志
所有请求都经过网关,所以它天生就是监控的完美入口。请求数、错误率、响应延迟,都能在网关层统一采集。我个人习惯把网关的访问日志直接打到ELK,排查问题时一搜就定位,不用跑多个服务去查日志。
5. 协议转换与聚合
有些场景下,客户端需要调用多个后端接口拼数据。网关可以帮你做聚合请求:客户端只发一次,网关并行调用三个服务,然后聚合结果返回。还能做协议转换,比如把gRPC转成REST,或者支持WebSocket。
常见网关产品及选型
市面上的网关很多,我挑三个最主流的给你分析分析。
| 特性 | Kong | Apache APISIX | Envoy |
|---|---|---|---|
| 核心语言 | Lua+OpenResty | Lua+多语言Plugin | C++ |
| 性能 | 中等(动态路由有代价) | 高(基于etcd) | 极高(C++调优) |
| 插件生态 | 成熟,官方+社区丰富 | 活跃,支持热插拔 | 通过filter扩展,偏底层 |
| 配置管理 | 数据库方式 | etcd + 声明式API | xDS协议(istio常用) |
| 学习门槛 | 低,文档多 | 中等,与Kong类似但更现代 | 高,适合基础设施团队 |
| 典型场景 | 中小团队快速接入 | 需要高性能+动态路由 | Service Mesh原生 |
怎么选?我个人的经验是分阶段看。
- 团队人数少、对性能要求不极致:选Kong,上手快,插件装装就能用。
- 性能敏感、需要频繁更新路由:APISIX用etcd做配置中心,动态更新非常快。我在一个日活千万的项目里用过APISIX,替换了之前的nginx+lua方案,高峰期延迟下降了30%。
- 已经在用Service Mesh,或者对可观测性要求极高:Envoy是Istio的数据面,底层能力极强,但需要懂C++或Lua Filter才能深度定制。
API网关在平台工程中的位置
讲到这里,你可能觉得网关只是个技术组件。但在平台工程里,它更是“统一入口”的落地载体。我们常说平台要提供“开发者自服务”的能力,网关就是那个暴露给开发者的管理面。开发者注册一个API、配一条路由、设一个限流阈值,不需要提工单给运维,直接通过平台控制台就能完成。
后面的章节我们会一步步实现这些能力。现在先让你对全局有个印象——来看下面这张图。
看到没?用户只和网关打交道,后端服务完全隐藏在后面。这既是安全边界,也是管理边界。后面章节提到的“扩展”,就是在网关这个边界上做文章。
最后给你一个忠告:别一上来就追求最牛逼的网关。先想清楚你的场景——是流量大、是路由复杂、还是需要深度定制?选一个你能驾驭的,跑起来,稳定了再优化。我曾经在一个只有5个服务的项目里架Kong,运维成本比服务本身还高。后来换成Nginx+Lua简单处理,反而更爽。适合自己的才是好网关。