网关的常见职责有哪些?路由、鉴权、限流分别怎么做?
结论先行:网关是微服务流量的统一入口,把横切逻辑从业务服务中抽离出来集中实现。核心职责是路由转发、鉴权认证、限流熔断,此外还有灰度发布、协议转换、日志监控、跨域处理等。网关本身无状态、可水平扩展,是最适合做"流量治理"的一层。
一、常见职责与实现
| 职责 | 说明 |
|---|---|
| 路由转发 | 按路径/请求头把请求转发到对应服务,支持负载均衡与重试 |
| 鉴权认证 | 校验 JWT/OAuth2 Token,白名单放行登录、注册等公开接口 |
| 限流熔断 | 按 IP/用户/接口维度限流,下游故障时熔断降级 |
| 灰度发布 | 按版本号、流量比例把请求导流到新版本服务 |
| 协议转换 | HTTP 与 RPC 协议互转、请求/响应改写 |
| 横切能力 | 统一日志、监控埋点、跨域、参数校验、防刷 |
二、限流的常用算法
- 固定窗口计数:实现简单,但窗口临界点可能瞬间放行两倍流量;
- 滑动窗口:按时间片滚动统计,精度更高;
- 漏桶算法:恒定速率出水,能削峰但不能应对突发;
- 令牌桶:按速率放令牌、桶内可积攒,允许一定突发,最常用;
- 分布式限流:多实例共享计数,用 Redis + Lua 保证原子性。
三、路由配置示例
# Spring Cloud Gateway 路由示意:/api/order/** 转发到 order-service
spring:
cloud:
gateway:
routes:
- id: order-route
uri: lb://order-service
predicates:
- Path=/api/order/**
filters:
- StripPrefix=1
常见追问 / 记忆点
- 追问:网关和 Nginx 有什么区别?答:Nginx 偏流量接入层(L4/L7 转发),网关偏业务治理层(鉴权、限流、灰度),生产常 Nginx 在前、业务网关在后。
- 追问:网关会变成性能瓶颈吗?答:网关必须无状态 + 水平扩展,转发尽量用异步非阻塞模型,避免在网关层做重业务。
- 追问:限流在网关做还是在服务做?答:网关做全局入口限流,服务内再做精细业务限流,两层配合。
- 记忆点:路由、鉴权、限流三件套 + 无状态水平扩展;限流算法里令牌桶最常用、Redis+Lua 落地分布式。