API 网关与微服务:统一入口到底解决了什么
微服务把单体拆成一堆小服务后,有个问题马上冒出来:客户端到底该连谁?如果前端直接去记 user-service、order-service、pay-service 的地址和端口,每加一个服务前端就改一遍,鉴权、日志、限流每个服务还得各写一套。API 网关就是来解决这个"入口碎片化"的:它在客户端和后端服务之间立一道门,所有请求先过网关,再由网关转给后面的服务。
一、没有网关时有多乱
设想前端要调三个服务,每个服务都得自己处理鉴权、限流、跨域、日志:
| 维度 | 无网关 | 有网关 |
|---|---|---|
| 客户端寻址 | 记住 N 个服务地址 | 只认一个网关地址 |
| 鉴权 | 每个服务各自实现 | 网关统一做 |
| 跨域 | 每个服务配 CORS | 网关统一处理 |
| 限流 | 分散、口径不一 | 集中策略 |
| 版本/灰度 | 客户端硬编码 | 网关路由分流 |
服务越多,无网关的代价指数上升,这也是为什么微服务架构基本都配网关。
二、网关到底干哪几件事
- 路由转发:根据路径或域名把请求分发到对应服务,比如
/user/*给 user-service,/order/*给 order-service。 - 统一鉴权:JWT 校验、API Key 校验放在网关,后端服务只管业务,不用每个都写一遍登录态判断。
- 限流熔断:对单个接口或某个调用方做 QPS 限制,后端扛不住时快速失败,保护下游。
- 协议转换:对外暴露 HTTP/REST,对内可能转成 gRPC 或内部私有协议。
- 灰度发布:按 header 或权重把一部分流量导到新版本,出问题立刻切回。
- 日志与观测:在入口统一收集访问日志、埋点、traceId,链路追踪天然有起点。

三、一个完整的路由+限流配置
以常见网关(Spring Cloud Gateway、Kong、或华为云 APIG)为例,路由规则通常就是"匹配条件 + 目标服务":
routes:
- id: user_route
uri: lb://user-service
predicates:
- Path=/api/user/**
filters:
- StripPrefix=2 # 去掉 /api/user 前缀再转发
- name: RequestRateLimiter
args:
redis-rate-limiter:
replenishRate: 10 # 每秒补充 10 个令牌
burstCapacity: 20 # 桶容量 20,允许突发
- id: order_route
uri: lb://order-service
predicates:
- Path=/api/order/**
filters:
- StripPrefix=2
这段配置表达的就是:/api/user/** 的请求去掉前缀后转发给 user-service,并对它做令牌桶限流(每秒 10、突发 20)。前端完全不用知道 user-service 在哪、有几个实例。
四、鉴权放在网关怎么落地
常见的几种做法:
- JWT 校验:网关验签名和过期时间,把解析出的用户身份放进请求头(如
X-User-Id)转给后端,后端直接信。 - API Key:给每个调用方发 key,网关校验通过后放行,适合开放平台/第三方对接。
- OAuth2 / OIDC:对接统一认证中心,网关做 token introspection。
把鉴权收敛到网关后,后端服务可以做成"零鉴权信任内网",部署和开发都简单很多。
五、灰度发布在网关怎么做
新版本上线最怕直接全量。网关可以按规则切流:
# 例:带 x-canary: true 的请求走新版本
- id: order_route_canary
uri: lb://order-service-v2
predicates:
- Path=/api/order/**
- Header=X-Canary, true
filters:
- StripPrefix=2
这样内部测试或按比例放量时,只让特定流量进新版本,监控没问题再逐步扩大,出事立刻删规则回退。
六、几个使用网关的注意点
第一,网关别写重业务逻辑。它该做的是横切关注点(鉴权、限流、日志),业务规则留给后端服务,否则网关会变成新的单体瓶颈。
第二,超时和重试要谨慎。网关层重试可能放大下游压力,尤其是写操作,重试要区分幂等与否。
第三,网关自身要高可用。它是所有流量的咽喉,一旦挂了全站不可达,通常要至少双节点 + 健康检查。
第四,链路追踪要打通。网关注入 traceId,让一次请求从入口到每个后端服务都能串起来,排障时才不会两眼一抹黑。
小结
API 网关在微服务里扮演的是"统一门面":把客户端从一堆服务地址里解放出来,把鉴权、限流、日志这些横切逻辑收敛到一处。它的价值不在某个神奇功能,而在于让后端服务能专注业务、让前端只需面对一个稳定入口,还顺带把灰度发布和全链路追踪的起点也解决了。用的时候记住——网关做横切,业务归服务,别把门面变成又一个单体。
- 点赞
- 收藏
- 关注作者
评论(0)