概述
你已经把系统拆成了多个微服务:用户服务、订单服务、商品服务......一切看起来很美好。
但很快,新问题来了:
- 客户端(App、网页)要记住每个服务的地址?
- 每个服务都要自己处理登录验证?
- 怎么防止恶意请求攻击某个服务?
- 想做个访问统计,得去每个服务里加代码?
这就像一栋大楼有十几个门,访客不知道该走哪个,保安也得在每个门口站岗------太乱了!
这时,你需要一个大门卫 来统一管理进出,它就是:API 网关(API Gateway)
什么是 API 网关
API 网关 是所有客户端访问微服务的唯一入口 。
它不提供业务功能,而是负责转发请求、安全管理、监控流量
客户端 → [API 网关] → 用户服务
↓
订单服务
↓
商品服务
API 网关的 5 大职责
1. 路由转发
客户端不再需要知道每个服务的地址。
- 请求
/api/users→ 转发给 用户服务 - 请求
/api/orders→ 转发给 订单服务 - 请求
/api/products→ 转发给 商品服务
对外只暴露一个域名(如 api.yourapp.com),内部怎么拆,客户端不用管。
2. 身份认证
网关可以统一检查用户是否登录(如验证 JWT Token)。
text
客户端请求 → 带上 Token → 网关验证 → 通过则放行,否则拒绝
好处:每个微服务不用重复写鉴权逻辑,专注业务。
3. 限流与熔断
防止有人恶意刷接口(比如一秒发 1000 个请求)。
- 限流:每人每秒最多 10 次请求,超了就拒绝
- 熔断:某个服务挂了,网关快速失败,不一直重试
保护后端服务不被压垮。
4. 日志与监控
网关可以记录:
- 谁在访问?
- 访问了什么?
- 响应时间多长?
这些数据可用于:
- 分析用户行为
- 发现性能瓶颈
- 告警异常流量
5. 请求聚合
有些页面需要同时调用多个服务(如首页要展示用户信息 + 最近订单 + 推荐商品)。
网关可以:
- 接收一个请求
- 同时调用多个服务
- 把结果合并后返回
减少客户端请求次数,提升加载速度
没有网关 vs 有网关
| 场景 | 没有 API 网关 | 有 API 网关 |
|---|---|---|
| 客户端调用 | 直接连各个服务,地址分散 | 只连网关,统一入口 |
| 权限校验 | 每个服务自己验证 | 网关统一验证 |
| 限流防护 | 每个服务自己实现 | 网关集中控制 |
| 服务变更 | 客户端可能要改代码 | 内部调整,客户端无感 |
| 监控分析 | 分散在各服务 | 集中收集,全局视图 |
常见的 API 网关工具
| 工具 | 特点 |
|---|---|
| Kong | 开源、插件丰富、基于 Nginx |
| Traefik | 云原生友好,自动发现 Docker 服务 |
| Nginx + Lua | 高性能,灵活定制 |
| Spring Cloud Gateway | Java 生态,适合 Spring Boot 项目 |
| AWS API Gateway | 云服务商提供,免运维 |
新手推荐从 Traefik 或 Kong 入手,集成 Docker 非常方便
总结
API 网关不是"功能服务",而是"治理中枢" 。
它让微服务架构更安全、更整洁、更易维护。