2、API网关核心概念解析:路由、过滤、限流、鉴权与日志

API网关这东西,说白了就是所有外部请求进入系统的「第一道门」。我在做内部开发者平台时,最常被问的一个问题就是:「网关到底干了啥?」

其实就五件事:路由、过滤、限流、鉴权、日志。这五个概念就像网关的五脏六腑,缺一个都会出问题。今天咱们一个一个掰开看。

2.1 路由(Routing)——请求该去哪

路由是网关最基础的能力。客户端访问网关,网关根据请求的路径、方法、头部等信息,把请求转发到后端的某个服务实例。

我习惯这么理解:路由就是一个「交通警察」。你看,每个请求都带着目的地(URL),网关根据这张「地图」(路由表),告诉它该走哪条路。

避坑提醒: 我曾经遇到过一整个下午都在排查一个灰度发布问题,最后发现是路由规则写错了,版本号v2.1被匹配成了v2.10。建议路由配置里多用精确匹配,少用通配符,尤其是多个版本号共存时。

2.2 过滤(Filter / Interceptor)——请求的安检

过滤,就是请求经过网关时,被执行的一系列「安检」操作。比如修改请求头、校验签名、记录耗时、熔断降级等。

大部分网关(像Zuul、Spring Cloud Gateway、Kong)都支持过滤器链。你可以理解成一个管道,每个过滤器干自己的事,排队执行。我个人习惯把过滤器分为三类:

  • 前置过滤器:请求转发到后端之前执行,比如鉴权、参数校验。
  • 后置过滤器:后端返回响应后执行,比如打日志、修改响应头。
  • 路由过滤器:在路由匹配和转发时执行,比如重写路径、限流。

2.3 限流(Rate Limiting)——别让流量冲垮你

限流是保护后端服务的最后一道防线。你想想看,如果突然有100万次请求涌进来,后端服务不直接被打挂了?

常见的限流算法有四种:令牌桶、漏桶、滑动窗口、计数器。我项目中用得最多的是令牌桶,因为能应对突发流量,而且实现简单。

算法 特点 适用场景 缺点
令牌桶 允许一定突发,平均限流 大多数API 突发可能超出预期
漏桶 平滑输出,严格限流 数据库写入 无法处理突发
滑动窗口 精度高,内存友好 秒杀、抢票 时间片粒度不好调
计数器 最简单,内存最小 低并发场景 临界点拥塞
注意: 限流的返回值一定要统一。我曾经看到后端团队有的返回503,有的返回429,客户端根本没法统一处理。建议网关层统一用429 Too Many Requests,并在响应头里带上Retry-After。

2.4 鉴权(Authentication & Authorization)——你是谁,能干什么

鉴权分为两个层面:认证(你是谁)和授权(你能做什么)。网关一般只做认证,授权丢给业务服务自己处理。

常见的认证方式有:

  • JWT:无状态,适合微服务。我建议里只放用户ID和角色,不要放敏感信息。
  • OAuth2 / OIDC:适合第三方接入,有授权码、密码等流程。
  • :简单,但不安全,适合内部服务间调用。
  • Basic Auth:过时了,尽量别用。

嗯,这里要特别注意一点:绝不要在网关层做完整的权限校验。权限是业务逻辑,网关层只校验是否有效、角色是否匹配即可。细粒度的权限(比如查这个订单是不是自己的)交给业务服务,否则网关会变成性能瓶颈。

我的经验: 在内部开发者平台上,我们使用JWT+OAuth2组合。网关只验证JWT签名和过期时间,然后把用户信息放在请求头里传给后端。后端再用header里的信息做粗粒度权限校验。这样做既安全又高效。

2.5 日志(Logging)——干了什么都要记

日志这东西,平时没人看,一但出问题就是救命稻草。网关日志需要记录什么?我个人习惯记录这几项:

  1. 请求ID:每个请求生成一个唯一ID,串联所有上下游日志。
  2. 客户端IP、User-Agent:用于溯源和安全分析。
  3. 请求方法、路径、参数:关键输入。
  4. 响应状态码、耗时:用来分析性能。
  5. 错误信息:有异常时要把堆栈或错误码记录下来。

我曾经遇到过线上某个接口突然变慢,查了半天找不到原因。最后靠网关日志发现,该接口平均耗时从50ms飙到了800ms,而失败率几乎为零。进一步查下去,原来是后端服务里某条SQL没走索引。你想想看,没有网关日志,这问题可能到被用户投诉都发现不了。

2.6 核心概念关系图

我把这五个概念画了一张图,方便你理解它们之间的关系:

API网关五大核心概念关系图 API网关 路由 过滤 限流 鉴权 日志 路由决定请求去向,过滤做预处理/后处理,限流保护后端,鉴权识别身份,日志记录全过程

2.7 总结:这五个概念如何协作

一个请求进入网关后,实际的处理流程通常是这样:

  1. 路由匹配:根据URL匹配到对应的后端服务配置。
  2. 前置过滤:执行鉴权、参数校验、请求头改写等操作。
  3. 限流检查:判断是否超出限流阈值,超出则直接返回429。
  4. 转发请求:把请求发送到后端服务。
  5. 后置过滤:处理响应、记录日志、添加审计信息。
  6. 响应返回:把最终结果返回给客户端。

你看,这五个概念是串在一起的。你如果在项目里自己实现一个简易网关,记住这个顺序准没错。

一句话总结: 路由是地图,过滤是安检,限流是水闸,鉴权是门禁,日志是黑匣子。一个网关的好坏,就看这五件事做得牢不牢。