API 网关
API 网关提供外部流量的统一入口。本文负责路由匹配、过滤顺序和身份传递。
1. 面试核心
先记住这几条,再读正文2. 网关的作用
客户端依赖稳定域名与公开 API。网关按 host、path、method 或可信身份选择集群。服务拆分或迁移时,外部契约可以保持稳定。
实例选择依赖服务发现。网关因此需要同时观测路由匹配和上游连接结果。
3. 过滤器链
过滤器顺序需结合路由与策略配置。一个入口路径可以包含以下阶段:
- 终止 TLS,检查连接和报文大小。
- 校验外部 header,建立 trace context。
- 验证凭据的签名、发行者、受众与有效期。
- 匹配路由,执行该路由的鉴权与配额。
- 建立上游连接,转发请求并记录结果。
廉价的报文检查应尽早执行。鉴权前完整缓冲巨大请求体,会增加无效资源消耗。依赖路由元数据的过滤器需在路由可用后执行。
4. 路由规则
路由优先级取决于网关实现。Envoy 先按 host 或 :authority 匹配虚拟主机。使用 routes 列表时,再按顺序选首个匹配项。
| 配置顺序 | 匹配条件 | 结果 |
|---|---|---|
| 1 | 前缀 /api | 接收全部 /api 前缀请求 |
| 2 | 精确路径 /api/admin | 被前一条遮蔽 |
应将具体规则放在兜底前缀之前。这里的精确路径并无自动优先权。Envoy 的 matcher 树需按其独立规则评估。
路由测试覆盖 host、method、header 与路径边界。配置发布机制见控制平面与数据平面。
5. 身份验证与授权
网关验证身份后,传递主体、租户和 scope。外部 X-User-Id 等身份 header 应先清除。内部值通过受保护链路或签名传递。
订单修改权限取决于所有者和当前状态。订单服务需据此执行资源级授权。服务还要确认调用来源可信,覆盖绕过网关的路径。
6. 超时与重试
路由总时限约束转发过程,见超时。重试需共享剩余预算,规则见重试。
网关配置需与客户端约定主要重试层。访问日志分别记录上游 attempt 和最终响应。
7. 限流
网关可以按租户、API 和请求成本执行配额。全局额度和本地保护的取舍见限流。
路由配置需声明限流后端故障时的行为。高风险写接口可拒绝,公开读取可使用保守本地额度。
8. 网关的职责边界
价格计算与订单状态机由领域服务维护。网关保留协议和入口策略,减少跨业务发布耦合。
统一入口需要多实例与故障域隔离。每个实例设置连接、并发、队列和内存边界。容量验证还需覆盖上游变慢时的资源占用。
9. 网关指标
指标包含路由、集群、状态码和总耗时。上游耗时、连接池等待和重试次数需分别记录。
502 与 504 只描述对外错误类别。内部日志还需区分无健康实例、reset 和超时。用户 ID 放入受控日志或 Trace,避免指标标签无限增长。
10. 常见问题
10.1 内外部调用边界
外部网关负责南北向流量。内部调用可使用服务发现或内部代理。全部绕行外部入口会增加转发成本与共同故障点。
10.2 JWT 校验与资源授权
JWT 校验确认凭据和身份。服务仍需判断当前主体是否有权执行具体动作。异步消息与内部调用也遵守同一授权边界。
11 · 面试题卡片
11.1 API 网关应该承担哪些职责,哪些逻辑不应放在网关
出现公司:美团、阿里巴巴
考察重点
- 理解统一入口、路由、认证、限流和协议边界。
- 理解入口认证与资源级授权的差异。
- 理解网关高可用、超时重试和业务逻辑边界。
参考回答
API 网关承担统一入口、路由和通用流量策略。
TLS、身份验证、入口配额与访问日志适合集中处理。订单编排和价格计算由领域服务负责。
网关传递可信身份,资源授权由数据所属服务执行。路由需验证匹配顺序和目标集群。网关自身配置资源上限,并共享端到端调用预算。
11.2 Envoy 中精确路径一定比前缀路由先匹配吗?
出现公司:暂无已核验的公开来源(本站自测)
考察重点:首条匹配与兜底规则遮蔽。
相关内容:路由规则。
参考回答
使用 routes 列表时,Envoy 按配置顺序采用首个匹配项。
前置 /api 前缀会遮蔽后置 /api/admin 精确路径。把具体路由放到兜底规则之前,并验证边界请求。matcher 树则按自己的匹配配置评估。