Java面试要点:API网关鉴权、限流、路由、熔断、签名验签与流量治理
前言
API 网关是微服务入口。面试常问:
- 网关和 Nginx 有什么区别。
- 鉴权为什么放网关。
- 限流怎么做。
- 签名验签怎么设计。
- 网关出问题会不会拖垮全站。
网关职责
flowchart TD
A[客户端] --> B[API 网关]
B --> C[鉴权]
B --> D[限流]
B --> E[路由]
B --> F[熔断降级]
B --> G[日志审计]
B --> H[后端服务]
常见职责:
- 统一入口。
- 路由转发。
- 认证鉴权。
- 限流。
- 熔断降级。
- 黑白名单。
- 请求日志。
- 签名验签。
鉴权
网关通常做粗粒度身份识别:
- Token 校验。
- AppKey 校验。
- 租户识别。
- 用户上下文透传。
业务服务仍然要做细粒度权限和数据权限。
限流
限流维度:
- IP。
- 用户。
- AppKey。
- 租户。
- 接口。
常见算法:
- 固定窗口。
- 滑动窗口。
- 令牌桶。
- 漏桶。
令牌桶更适合允许一定突发流量的场景。
签名验签
开放 API 常用签名防篡改。
常见字段:
- appKey。
- timestamp。
- nonce。
- body hash。
- sign。
服务端要校验:
- appKey 是否有效。
- timestamp 是否过期。
- nonce 是否重复。
- sign 是否正确。
熔断降级
网关可以对异常服务做:
- 超时控制。
- 熔断。
- 返回降级结果。
- 快速失败。
但复杂业务降级通常仍要在业务服务内完成。
高频面试题
网关为什么不能只做转发?
因为企业入口需要统一鉴权、限流、安全、日志和流量治理。
鉴权放网关后服务还要鉴权吗?
要。网关做入口身份识别,服务做细粒度业务权限,避免绕过网关造成风险。
签名为什么要加 timestamp 和 nonce?
timestamp 防止旧请求长期有效,nonce 防止短时间重放。
网关如何避免成为瓶颈?
集群部署、无状态化、限流、熔断、监控和容量评估。
总结
API 网关的核心是统一入口和流量治理。面试回答要强调:网关适合做通用横切能力,业务语义仍然要在后端服务中校验。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Junly博客!
评论


