API网关核心架构:代理、负载均衡、限流、认证授权

谈到API网关的核心架构,我得先说说一个常见的误区:很多刚入门的朋友以为API网关就是个路由器,把请求转发到后端就完事了。其实,真正的难点在于——四个核心功能怎么有机地组合在一起。如果拆开来单独实现,每个都很简单,但把它们集成得高效又稳定,这里面可有不少门道。

代理模式

代理是API网关最基础的能力。说白了,就是前端请求和后端服务之间的一个中间层。我个人习惯把代理分为两种模式:正向代理和反向代理。在API网关场景下,我们讨论的几乎都是反向代理。

反向代理的核心价值

  • 隐藏后端服务结构,对外统一暴露网关地址
  • 实现请求报文的改写和协议转换
  • 提供集中式的安全和监控接入点

我记得在早期的一个项目中,后端用的是古老的XML-RPC协议,前端要统一走RESTful接口。如果没有网关做协议转换,每个前端团队都要自己去实现XML-RPC的解析器,想想就头疼。

这里有一个避坑指南:我曾经在配置代理路径重写时,把正则写错了,结果所有带有参数的GET请求都被转发到了错误的端点。调试了整整一个下午,才发现是路径匹配的优先级出了问题。所以,路径匹配规则一定要先写精确匹配,再写模糊匹配,这个顺序很重要。

负载均衡

负载均衡解决了什么问题?一句话:后端服务扛不住的时候怎么办。

常见的负载均衡算法,我在生产环境中基本都踩过坑,直接给你看一个对比表:

算法 适用场景 我踩过的坑
轮询(Round Robin) 后端实例配置相同,请求处理时间相近 某个慢节点会拖慢整体
最少连接(Least Connections) 长连接服务,请求处理时间差异大 短连接场景下频繁统计,性能损耗
IP哈希(IP Hash) 需要会话粘滞的场景 客户端通过NAT访问时,哈希效果失效
加权轮询(Weighted Round Robin) 后端实例配置不均匀 权重计算不当导致流量倾斜

你想想看,假设你有三台后端实例,其中一台是新扩容的,CPU性能比另外两台高一倍。如果还用普通的轮询,新机器就白浪费了。加权轮询这时候就派上用场了。

我的建议:在生产环境中,不要默认使用轮询。至少要根据后端实例的CPU或内存使用率来实现动态权重调整。我在一个日活千万的电商平台就是这么做的,效果很明显。

限流策略

限流,是API网关里最容易引发线上故障的功能——没有之一。

为什么这么说?因为我遇到过太多次因为限流阈值设置不合理导致的误杀事故。

常见的限流算法有三种,它们的优劣很明显:

  • 令牌桶( Bucket):可以应对突发的流量峰值,但实现稍复杂。我比较推荐这个。
  • 漏桶(Leaky Bucket):流量整形能力强,适合保护下游系统,但不够灵活。
  • 滑动窗口(Sliding Window):统计精度高,但内存开销大,分布式场景下不好做。

注意:限流的粒度很重要。我曾经遇到过这样的情况:对一个API接口设置了全局限流1000 QPS,结果某个大客户单枪匹马占了800 QPS,其他客户全被拒了。所以,一定要区分全局限流和用户级别限流。

限流的阈值设置,建议从业务指标反推。比如,你的后端服务最大能承受2000 QPS,你可以试试:网关层先限制在1500 QPS,保留一些缓冲。

认证与授权

认证和授权,我习惯把它们分开来看:

  • 认证(Authentication):你是谁?——校验身份
  • 授权(Authorization):你能做什么?——校验权限

在API网关层做认证,常见的方式有几种:

认证方式 安全性 适用场景
Basic Auth 低 内部服务调用,配合HTTPS使用
中 第三方开放API
JWT 高 分布式微服务架构
OAuth 2.0 高 第三方授权登录

我记得有一次,团队把JWT的签名密钥硬编码在配置文件中,结果被一位离职员工泄露了。从那天起,我坚持用专门的密钥管理服务,比如Vault或者云厂商的KMS,绝不把密钥放在配置文件里。

授权方面,细粒度的RBAC(基于角色的访问控制)是我比较推崇的方式。举个例子:

# 权限模型示例
role: admin
  - permission: api:/v1/users:GET
  - permission: api:/v1/users:POST
  - permission: api:/v1/users:DELETE

role: viewer
  - permission: api:/v1/users:GET

在API网关层做RBAC,重点在于权限缓存的更新机制。我建议不要每次请求都查一次数据库,那样性能太差了。可以用本地缓存配合Redis,缓存失效时间控制在5-10分钟。

整体来看,API网关的四大核心能力是这样的关系:

代理是基础,负载均衡保稳定,限流防崩溃,认证授权守边界。缺一个,你的微服务体系就可能出问题。

API网关核心架构总览 管理平面(配置下发、监控告警、日志收集) 1. 代理转发 反向代理 | 路径重写 协议转换 | 请求改写 2. 负载均衡 轮询 | 最少连接 IP哈希 | 加权轮询 3. 限流降级 令牌桶 | 漏桶 滑动窗口 | 熔断 4. 认证授权 JWT | OAuth 2.0 | RBAC ⚠️ 核心原则:先代理 → 再负载均衡 → 再限流 → 最后认证授权 每个阶段都有缓存、熔断、降级策略,顺序执行不可颠倒 下游:微服务集群 | 数据库 | 外部API 熔断反馈 / 降级通知