API 网关与微服务:统一入口到底解决了什么

举报
海是岛思念的泪 发表于 2026/09/11 11:18:50 2026/09/11
【摘要】 微服务把单体拆成一堆小服务后,有个问题马上冒出来:客户端到底该连谁?如果前端直接去记 user-service、order-service、pay-service 的地址和端口,每加一个服务前端就改一遍,鉴权、日志、限流每个服务还得各写一套。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,链路追踪天然有起点。

image.png

三、一个完整的路由+限流配置

以常见网关(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 网关在微服务里扮演的是"统一门面":把客户端从一堆服务地址里解放出来,把鉴权、限流、日志这些横切逻辑收敛到一处。它的价值不在某个神奇功能,而在于让后端服务能专注业务、让前端只需面对一个稳定入口,还顺带把灰度发布和全链路追踪的起点也解决了。用的时候记住——网关做横切,业务归服务,别把门面变成又一个单体。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。