Theory · Microservice · API Gateway

API 网关

把 N 个服务的横切关注点收敛到一个入口 —— 路由 · 认证 · 限流 · 灰度 · 聚合,一次做对处处生效

一句话本质

系统对外的唯一门面:外部请求先到网关,网关完成通用治理后按路由规则转发给后端服务

价值公式

没有网关:每服务重复实现鉴权/限流/日志 ×N,且口径漂移;有网关:一处实现、集中管控、按路由生效

代表产品

APISIX(Apache,3.18)、Kong、Envoy Gateway、云厂商网关;上游底座常见 Nginx/OpenResty/Envoy

这份 deck 回答"外部流量怎么进来、怎么统一治理":从横切关注点收敛的本质讲起,到网关职责清单、与 Nginx 的区别、控制面/数据面架构、主流产品对比、BFF 与聚合、认证策略、网关自身高可用。限流与灰度在网关上的落地分别指向限流 deck 和服务网格 deck。

Why

为什么需要网关:横切关注点的收敛点

先算一笔账:3 个服务 × 认证/限流/日志/证书 4 件事 = 12 处实现;阈值从 100 调到 1000 要发 3 次版,第 4 个服务赶工上线时忘了接鉴权。这就是没有网关的日常。

网关收敛横切关注点 左侧无网关:客户端直连每个服务,认证、限流、日志、TLS 证书在每个服务重复实现且口径不一。右侧有网关:所有请求先经网关完成通用治理,再按路由转发给后端服务,后端只关心业务逻辑。 A · 无网关 —— 每服务重复实现 ×N 客户端 订单服务 auth·限流·日志·TLS 商品服务 auth·限流·日志·TLS 支付服务 auth·限流·日志·TLS 痛点:同一逻辑写 N 遍;口径漂移(A 服务限 100 QPS、B 限 1000);证书/漏洞修复要全服务滚动。 B · 有网关 —— 一处实现,按路由生效 客户端 API 网关 认证 · 限流 · 日志 · TLS 终止 路由 · 灰度 · 协议转换 · 聚合 一次实现 · 集中管控 · 统一口径 订单服务 只写业务逻辑 商品服务 只写业务逻辑 支付服务 只写业务逻辑 注意边界:网关收敛"对外横切关注点";服务之间的内部治理(发现/熔断/客户端 LB)不属于网关职责——那是 RPC 框架与 Mesh 的地盘。
这页讲网关的存在理由:没有网关时每个服务重复实现认证/限流/日志/TLS,写 N 遍且口径漂移;有了网关,通用治理一处实现、按路由生效,业务服务只写业务。注意职责边界的补充说明很关键:网关管对外流量,服务间内部治理是 RPC/Mesh 的地盘——这是面试常见的混淆点。

Prerequisites & Glossary

先把词认全:下面每一页都会用到它们

术语一句话理解(先记住这个,细节后面展开)
反向代理站在客户端和服务之间的"传话人":客户端以为在跟它说话,它转头去问真正的服务,再把答案交回来
路由 Route一条"什么样的请求发给谁"的规则:按域名 / 路径 / 请求方法把请求分派到某个后端服务
上游 Upstream网关后面那批真正干活的服务实例。注意方向:越靠近用户越"下游"的说法也有,本 deck 统一称后端服务为上游
横切关注点每个服务都需要、但跟业务无关的那些事(认证、限流、日志、TLS)——关键词是"每个服务都要"
TLS 终止HTTPS 的加密在网关这一层解开,网关到后端走内网;证书只需要在网关上管,不用 N 个服务各配一遍
控制面 / 数据面控制面"决定规则"(控制台 + 配置存储),数据面"执行规则转发流量"。分开之后改规则才不用重启转发节点
插件流水线一个请求在网关内部按顺序走过的处理步骤:改写 → 认证 → 限流 → 转发 → 记日志,按路由声明谁生效
JWT一种"自带签名的凭证":服务端签发给客户端,之后任何人都能验签确认它没被改过(只签名不加密)
南北向 / 东西向南北向 = 外部进出系统的流量(用户 → 服务);东西向 = 系统内部服务之间的流量。网关管南北向,Mesh 管东西向
BFFBackend For Frontends:给某一个前端(App / Web)单独写的薄后端,只做聚合与裁剪,不写业务规则

前置 deck(本 deck 默认你已经知道)

HTTP 与 Protobuf → 请求长什么样、header/path/method 指什么
负载均衡 → 网关把请求转给"上游的哪一台"
服务注册与发现 → 上游实例列表从哪来
微服务总览 → 为什么会有 N 个服务需要被统一治理

本 deck 怎么用这些词

后面统一说"网关挡在客户端上游服务之间"。你只要记住一件事:网关做的事 = 所有服务都要做、但谁做都一样的事,搬到流量必经的那个入口去做一遍。

一个提前建立的直觉

网关的所有能力都能拆成同一个动作的两半:先看请求是谁、要去哪(匹配路由)再决定放不放行、转发给谁(执行插件 + 转发)。认证、限流、灰度、日志全都只是"在这一步里多查一次表"。

最小心智模型:网关 = 一栋楼的前台。访客不用知道每个部门在哪、也不用每个部门各自查身份证;前台统一登记、统一放行、统一指路——但前台不会替你谈业务。
前置页:十个术语先定义再使用,杜绝"如你所知"式跳跃。右侧给四条前置 deck 链接,并用"前台"隐喻给出最小心智模型,为第 4 页的职责清单与第 6 页的控制面/数据面铺路。

Responsibilities

网关的六大职责(面试按这个清单答)

回到第 2 页那张"无网关 vs 有网关"的图:下面这六件事,正是图里从三个服务里被搬出来、集中到门口的那些活。

1 动态路由

按 path/header/host/方法路由到服务集群;规则热更新不重启(控制面下发);服务发现联动——后端实例变化自动跟随

2 认证鉴权

JWT 验签、OIDC/OAuth2、API Key、HMAC 签名;会话在网关终止,下游只收内部用户上下文头(配合 mTLS/mesh 内部信任)

3 流量防护

全局限流(按 IP/用户/API)、WAF、防爬虫、防重放;保护后端免于突发流量与攻击——细节见限流 deck

4 灰度发布

按权重/header/用户标签把流量切到新版本;金丝雀的前置设施——发布策略详见服务网格 deck 流量管理部分

5 聚合与协议转换

BFF 聚合多后端响应减少客户端 RTT;REST↔gRPC 转码(grpc-gateway/Envoy transcoder);对外统一 API 形态

6 可观测与审计

入口统一埋点:生成 trace-id、打访问日志(审计)、输出指标(QPS/延迟/错误率)——全链路追踪的起点

网关职责六件套:动态路由、认证鉴权、流量防护、灰度发布、聚合与协议转换、可观测审计。下一页讲它的反面——三个"不做",边界感是懂架构的标志。

Boundaries

网关的三个"不做":边界感比能力清单更重要

上一页列的是"网关该做什么";这一页是它的反面——知道不做什么,才知道它该摆在架构的哪一格

网关"不做"的事(边界感)

  • 不做业务逻辑(网关出现 if 业务分支 = BFF 失控的开始)
  • 不做服务间治理(内部 RPC 的熔断/LB 是框架/Mesh 职责)
  • 不做数据存储(网关无状态化,会话放 token/Redis)

职责的分层实现

同一职责可在多层实现:限流在网关(粗粒度防刷)+ 在服务(细粒度保护自身)+ 在客户端(自适应);认证在网关(终止会话)+ 服务间 mTLS(内部零信任)。面试答"放哪层"先讲流量粒度与信任边界,再讲实现位置。

面试金句:网关是南北向流量的入口,不碰东西向;它做"每个服务都要做、但谁做都一样"的事。一旦某个判断需要业务数据("这个用户能不能看这条订单"),就该下沉到服务——那属于授权,不属于认证
边界页:三个"不做"(业务逻辑/服务间治理/状态)是区分"背概念"与"懂架构"的试金石;同一职责分层实现(限流三层、认证两层)是追问时的进阶答案。此页原是职责页的下半部分,因矮视口溢出拆出独立成页。

Positioning

网关 vs 反向代理:Nginx 是底座,网关是产品

反向代理 Nginx(含 OpenResty)

  • 核心能力:四/七层转发、静态资源、TLS 终止、负载均衡
  • 配置静态(reload 生效),路由规则靠 location 手写
  • 无控制面:没有管理后台/审计/多团队协作模型
  • 插件化弱:OpenResty + Lua 可编程但工程化成本高
  • 性能极好、极稳定——所以大多数网关产品底层就是它

API 网关(APISIX/Kong/云网关)

  • 面向 API 的管理面:路由/插件/证书的动态下发 + 控制台
  • 插件生态:认证/限流/灰度/日志开箱即用,可自研插件
  • 多租户与治理流程:按团队划分路由组、变更审计、灰度验证
  • 云原生集成:K8s Ingress/Gateway API、服务发现联动
  • 代价:控制面组件多一层,复杂度高于裸 Nginx

一句话定位

Nginx 回答"请求怎么转发";API 网关回答"API 怎么被管理"——路由只是其一,管控与生态才是差异

选型判据

单团队 + 路由简单 → Nginx 足够;多团队 + API 数量百级以上 + 需要自助管理 → 上网关产品

架构事实

APISIX = OpenResty(Nginx+LuaJIT) 数据面 + etcd 控制面;Kong = Nginx/OpenResty + Postgres/Redis 控制面——"网关 vs Nginx"实为"管理面有无"

网关与 Nginx 的区别是高频题。定位一句话:Nginx 回答转发问题,API 网关回答 API 管理问题。差异三点:动态配置与控制台、插件生态、多租户治理流程。架构事实最有说服力:APISIX/Kong 的数据面本身就是 Nginx/OpenResty——差别在管理面。选型判据按团队规模与 API 数量。

Architecture

网关架构:控制面/数据面分离

API 网关控制面与数据面架构 控制面包含管理控制台与配置存储 etcd,管理员通过控制台下发路由与插件规则,etcd watch 通知数据面节点热更新。数据面是多个无状态网关节点组成集群,承接客户端流量,完成认证限流后按路由转发给后端服务,并联动服务发现获取实例列表。 CONTROL PLANE · 管控面 Admin 控制台 路由/插件/证书 · 审计 配置存储 etcd watch 秒级推送 · 版本化 变更 → 存储 → watch 通知(不重启数据面) DATA PLANE · 无状态网关集群 Gateway ① 插件流水线 Gateway ② 插件流水线 Gateway ③ 插件流水线 LB 前挂多副本 · 无状态可横向扩 · 配置本地热生效 客户端 请求 后端服务(注册中心联动) order ×N product ×N payment ×N 网关经服务发现拿实例列表(或对接 K8s Service) 插件流水线 rewrite→auth→ limit→proxy→log 按路由声明 关键收益:规则变更不打断流量(热更新)、数据面无状态可扩缩、配置有版本可回滚——与"配置中心/服务网格"是同一套控制面思想(声明式配置 + watch 下发)。
控制面/数据面分离是所有现代网关的统一架构:Admin 控制台管理路由与插件,规则存 etcd,watch 秒级推送数据面热更新;数据面是无状态网关集群(多副本挂 LB),插件流水线按路由声明(rewrite→auth→limit→proxy→log)。这套思想与配置中心、服务网格同源:声明式配置 + watch 下发。讲架构时强调"变更不打断流量"。

Landscape

主流网关对比:Nginx / Kong / APISIX / Envoy 系

产品数据面引擎配置存储生态与特点适用
Nginx自有 C 模块静态文件 reload性能/稳定性标杆;插件靠 C/Lua,管理面缺位单团队、路由简单、入口静态
KongNginx/OpenRestyPostgres/DB-less最老牌网关产品,插件多(Lua/Go);社区版功能受限较多多语言插件需求、成熟生态
APISIXNginx+LuaJITetcd(watch 热更)Apache 项目;动态路由秒级生效;插件 Lua/多语言 Plugin Runner;控制台完善;3.18(2026-08)国内主流选择、云原生、需要极致动态性
Envoy / Gateway APIEnvoy(C++)xDS(控制面下发)云原生标准数据面;xDS 协议被 Mesh 共用;配置复杂度高K8s 深度用户、与 Istio 统一数据面
Traefik / CaddyGo / Go自动发现(labels/CRD)轻量、易用;性能与插件生态弱于前四者中小规模、开发友好
云厂商网关托管托管控制台免运维、计费弹性;深度绑定云生态(鉴权/日志/监控)不养平台团队、云上优先

选型话术(按场景给结论)

K8s 环境优先 Envoy 系(Gateway API + 与 Mesh 同底座);国内自建多选 APISIX(动态性 + 控制台 + 社区);需要大量定制插件且团队熟 Lua/Go → Kong 或 APISIX 都行;规模小直接 Nginx/云托管。

K8s 的 Gateway API(趋势点)

Ingress 注解语义碎片化 → Gateway API(SIG-Network)用角色分离重新设计:GatewayClass(平台方)/Gateway(运维方)/HTTPRoute(开发者)三层对象,厂商实现为数据面(Envoy/APISIX/Kong 都有实现)——新项目选型时的现代答案。

产品对比六行:Nginx(底座,缺管理面)、Kong(老牌生态)、APISIX(etcd 动态热更,国内主流)、Envoy 系(云原生标准 + xDS)、Traefik/Caddy(轻量)、云厂商(免运维)。对比主线三条:数据面引擎、配置动态性、插件生态。Gateway API 的角色分离设计是新项目选型的现代答案,值得主动提。

BFF

BFF:面向体验的聚合层(网关的"厚"形态)

BFF 解决什么问题

  • 多端差异:App 要少字段、Web 要全量、小程序要裁剪——同一后端 API 服务多端时口径打架
  • 请求瀑布:页面需要 5 个服务的数据,客户端串行 5 次 RTT;BFF 在内网并行聚合,1 次 RTT 返回
  • 适配层:后端领域模型 ↔ 前端视图模型的翻译(DTO 组装)收拢到一层
  • 出处:SoundCloud 团队 2015 年提出 BFF(Backend For Frontends)模式

BFF 的正确打开方式

  • 每个端一个 BFF(app-bff/web-bff),由对应前端团队拥有——"为前端的后端"
  • BFF 只做编排与裁剪(并行调用、字段映射、缓存),不写业务规则——业务规则下沉领域服务
  • 实现载体:轻量服务(Go)或 GraphQL Server;两者常组合
  • 治理:BFF 挂在网关后面,内网调用全部带 deadline + 熔断

GraphQL 与 BFF 的关系

GraphQL 是 BFF 的一种强表达实现:客户端声明需要什么字段,服务端按 query 聚合——天然解决"多端字段差异"与"过度获取"。代价:缓存(HTTP 语义失效需 DataLoader/CDN 特殊处理)、N+1 与查询复杂度治理、权限模型更细。选型:字段组合爆炸时上 GraphQL,简单聚合用轻量 Go 服务即可。

BFF 的风险与收敛

风险:BFF 变厚——业务逻辑偷偷住进 BFF,改一端要动领域服务+BFF 两层;多团队 BFF 复制粘贴同样的聚合逻辑。收敛手段:聚合能力组件化(统一并行调用框架+熔断)、领域服务提供"聚合友好"的查询接口(面向视图的只读查询/CQRS 读模型)。

BFF 三个动机:多端字段差异、客户端请求瀑布(内网并行聚合一次返回)、视图模型适配。正确姿势:每端一个 BFF、只编排不写业务、挂网关后带 deadline 熔断。GraphQL 是 BFF 的强表达实现,代价在缓存与复杂度治理。风险收敛:防 BFF 变厚——聚合组件化 + 领域服务提供读模型。

AuthN/AuthZ

网关上的认证:JWT 终止还是透传

方案 A:网关终止认证(主流)

  • 网关验 JWT 签名/过期/issuer → 通过后剥离 token,注入内部头(x-user-id/x-tenant)转发
  • 下游只信任网关注入的头 + 内网 mTLS/网络隔离保证请求确实来自网关
  • 优点:下游零认证代码;密钥/吊销只在网关管;审计统一
  • 前提:内网必须不可被直连访问(否则伪造 x-user-id 即越权)——K8s NetworkPolicy/mesh mTLS 兜底

方案 B:JWT 透传(多级调用/零信任)

  • token 逐跳传递,每个服务自行验签——服务可独立对外(不经过网关)时的安全兜底
  • 代价:每个服务都要密钥管理/JWKS 拉取;CPU 开销(验签)×N
  • 折中主流:网关验一次 + token 继续携带(服务端抽查/敏感接口再验);或双 token:对外 JWT、对内短时效内部 token(STS 交换)

JWT 结构速记

header.payload.signature;payload 只签名不加密——敏感信息放不进 JWT;alg:none 与弱密钥是经典漏洞;吊销靠短有效期 + 黑名单/refresh token

OAuth2/OIDC 位置

OIDC 是"登录协议"(ID Token 证明你是谁),OAuth2 是"授权协议"(access token 允许干什么);网关对接 IdP(Keycloak/企业 IdP)做 code 交换,bff/SPA 拿 token 再访问 API

API 对外认证

开放平台:API Key + HMAC 签名(防篡改防重放:timestamp+nonce);机器对机器:mTLS 或 OAuth2 client_credentials;配额与计费挂在 API Key 维度

答题结构:先分 AuthN(你是谁)/ AuthZ(你能干什么)——网关做 AuthN + 路由级粗粒度 AuthZ,数据级授权必须下沉服务;再讲方案 A/B 的取舍与内网信任假设。

认证方案 A(网关终止)是主流:验签后剥离 token 注入内部头,下游零认证代码,但内网必须网络隔离或 mTLS 背书,否则伪造头即越权——这是必考的信任边界问题。方案 B 透传用于多级调用与零信任,折中是"验一次+继续携带"或双 token。三件补充:JWT 只签名不加密、OIDC 登录与 OAuth2 授权的分工、开放平台的 HMAC 防重放。AuthN/AuthZ 分层回答。

Resilience

网关自身的高可用:入口不能是单点

部署层:多副本 + 分层收敛

  • 网关多副本无状态,前面挂 L4 LB / Anycast / DNS 轮询;跨可用区部署
  • 多级入口常见形态:DNS → 云 LB(四层)→ 网关集群(七层)→ 服务
  • 每一层都要独立扩缩:突发流量先打满的是入口带宽与连接数
  • K8s 部署:Gateway API + HPA 按 QPS/连接数扩容,PodDisruptionBudget 保滚动可用

能力层:网关自身要容错

  • 规则加载失败不阻塞转发:配置拉取失败沿用最后已知良好配置(last-known-good)
  • 上游全挂时的网关级降级:返回静态兜底页/友好错误/排队页
  • 网关限流保护的不只是后端,也是网关自己(连接数/内存自保)
  • 健康检查与摘除:网关实例异常主动从 LB 摘除(对齐服务发现 deck 的优雅上下线)

多级网关的代价(反模式预警)

接入网关 → 业务网关 → API 网关层层叠加,每层加延迟、加配置分裂、加排障难度。原则:七层网关只过一次,特殊需求用插件扩展而不是再加一层;确需多级(如集团统一接入 + 事业部自治),每级职责要写进架构文档并被执行。

变更安全

网关是"一改全站抖"的地方:路由/插件变更走预览+灰度生效(先灰一个节点/一条路由);配置回滚要秒级;对配置存储(etcd)做变更审计——与配置中心 deck 的灰度与审计思想完全一致。

网关高可用三层:部署层(多副本+L4 收敛+跨 AZ)、能力层(last-known-good 配置、网关级降级、自保限流)、变更层(预览+灰度生效+秒级回滚+审计)。多级网关反模式要点名:七层只过一次,每层延迟与配置分裂都是代价。这些点与配置中心、服务发现的优雅上下线思想相通,可以互链着讲。

Cheat Sheet

一页带走:本质、职责、边界、选型、避坑

① 一句话本质与价值

本质系统对外的唯一门面:横切关注点从 N 个服务搬到流量必经的入口
价值公式没有网关:鉴权/限流/日志/TLS 各写 N 遍且口径漂移;有网关:一处实现、集中管控、按路由生效
三个"不做"不做业务逻辑、不做服务间治理、不存状态——边界感是懂架构的试金石

② 六大职责清单(按这个答)

动态路由按 path/host/header 转发,规则热更新,联动服务发现
认证鉴权网关做 AuthN + 路由级粗粒度 AuthZ;数据级授权必须下沉服务
流量防护按 IP/用户/API 全局限流 + WAF + 防重放(HMAC + timestamp/nonce)
灰度发布权重灰度(1% 到 v2)+ 标签灰度(按 uid/header 精准放量)
聚合与转码BFF 聚合减 RTT;REST ↔ gRPC 转码;HTTP/2 透传要放行 metadata
可观测与审计入口生成/透传 trace-id;按路由打 RED 指标;访问日志脱敏

③ 选型速判

小规模 / 路由简单Nginx 或云托管网关足够
K8s 深度用户Envoy 系 + Gateway API(与 Mesh 共用数据面)
自建 / 要极致动态APISIX(etcd watch 秒级热更 + 控制台)
定制插件多Kong / APISIX(Lua / Go Plugin Runner)

④ 认证两方案怎么选

A 网关终止(主流)验签 → 剥离 token → 注入 x-user-id 等内部头;必须配内网隔离/mTLS,否则伪造头即越权
B JWT 透传每服务自验签,服务可独立对外;代价是密钥管理与验签成本 ×N

⑤ 高可用三板斧 + 两个坑

· 部署层:多副本无状态 + L4/Anycast 收敛 + 跨 AZ + HPA
· 能力层:last-known-good 配置、网关级降级、自保限流
· 变更层:预览 + 灰度生效 + 秒级回滚 + 变更审计
坑一:多级七层网关叠加(延迟 + 配置分裂)——七层只过一次
坑二:BFF 变厚(业务住进 BFF)——只编排,不写业务规则
一句话背下来:网关 = 把"每个服务都要做一遍、但谁做都一样"的事搬到流量必经的入口做一次;管南北向不管东西向,做认证不做授权,做路由不做业务
速查页是"可检索性优于一次性"原则的落点。五块按使用顺序排:先本质与边界、再职责清单、再选型速判、再认证取舍、最后高可用三板斧与两个反模式。

Interview QA

高频 QA(一)

先盖住答案自己答一遍,再往下对照——想不起来比看得顺眼记得牢;答不出的直接翻回上一页速查表。

Q1 网关和反向代理的区别?

管理面API 视角

反向代理解决"转发"(Nginx 的 location/proxy_pass,静态配置);API 网关面向"API 的管理":动态路由控制台、插件生态(认证/限流/灰度开箱即用)、多租户与审计。多数网关的数据面就是 Nginx/Envoy——差别在控制面与生态。规模判据:API 过百、多团队协作时网关产品收益才显现。

Q2 网关会不会成为性能瓶颈/单点?

多副本弱依赖化

部署上无状态多副本 + L4 收敛 + 跨 AZ,横向扩容;架构上网关依赖(认证服务/配置中心)要设计成弱依赖:认证缓存本地、配置 last-known-good、下游发现列表缓存——任何依赖抖动网关都能先扛住。压测瓶颈常在连接数与 TLS 握手,用连接复用与会话恢复解决。

Q3 为什么认证放网关?放服务里行不行?

收敛 vs 独立信任边界

放网关:收敛实现、统一审计、下游减负,但要求内网隔离防伪造头。放服务:每服务自治(可独立对外),但密钥管理与验签成本 ×N。主流混合:网关做 AuthN+路由级 AuthZ,服务做数据级授权;敏感服务可要求 token 透传二次验签。判据是信任边界与团队边界

Q4 BFF 和普通聚合服务有什么区别?

端归属薄编排

聚合服务是技术视角(把 N 个响应拼起来);BFF 是组织视角(为某个端、由该端团队拥有、按该端视图裁剪数据)。BFF 的纪律是只编排不写业务。没有多端差异与聚合 RTT 痛点时,不需要 BFF——别为了模式而模式。

Q5 网关如何做到路由配置热更新?

watch 下发原子切换

控制面把路由/插件规则写进配置存储(etcd),数据面 watch 到变更后在内存里原子切换路由表(先构建新表再原子替换指针),请求无感。APISIX 用 etcd watch + Lua 热加载;Envoy 用 xDS 的 versioned config 原子应用。回滚 = 把版本指回去。

Q6 网关层限流和服务层限流怎么分工?

粗防刷细保护

网关限流:粗粒度、面向调用方(IP/用户/API Key/租户),防刷防攻击、全站预算;服务层限流:细粒度、面向自身容量(按接口/按资源),防止某个接口打满服务。两层阈值独立调优,网关阈值 ≥ 服务层总和。算法与实现见限流 deck。

六题:定位(管理面差异)、可用性(无状态+弱依赖化)、认证归属(信任边界与团队边界)、BFF(组织视角而非技术视角)、热更新(原子切表+xDS 版本化)、限流分工(粗防刷细保护)。每题都先给原则再给实现,避免只背产品名。

Interview QA · continued

高频 QA(二)

同样先自答。这一页每题都需要"结论 + 一句代价/边界"才完整——只答结论会被追问。

Q7 网关怎么支持 gRPC 对外?

透传转码

两条路:透传(网关原生支持 HTTP/2 与 gRPC 帧,按 :path 路由,性能无损);转码(Envoy transcoder/grpc-gateway 把 REST/JSON 翻成 gRPC,一份 proto 双协议)。注意:网关必须放行 grpc-timeout/traceparent 等 metadata 的传递,否则下游治理失效。

Q8 网关聚合后,一个下游挂了怎么办?

部分失败超时预算

聚合接口必须定义部分失败语义:非关键数据失败 → 置空/占位返回(200 + degraded 标记);关键数据失败 → 快速失败。并行调用共享 deadline 预算(谁慢谁先被砍),配熔断防止雪崩——聚合把 N 个依赖的故障域合并了,治理必须跟着升级。

Q9 灰度发布在网关层怎么做?

权重标签路由

两级:权重灰度(order 服务 1% 流量到 v2,网关按上游分组分流);精准灰度(按 header/uid 白名单把指定用户导到新版本)。实现靠路由规则 + 后端版本分组(K8s 中两个 Deployment/Service 或 Mesh DestinationRule)。放量与回滚决策看错误率/P99,自动化触发。

Q10 你们网关的技术选型过程是怎样的?

场景先行三条主线

按三条主线答:① 形态——K8s 深度用户选 Envoy/Gateway API 系,自建多选 APISIX(动态性+控制台),小规模 Nginx/云托管;② 插件需求——认证/限流/自定义逻辑的开箱程度与自研成本(Lua/Go Runner/WASM);③ 运维能力——配置灰度、审计、监控、多集群。结论跟场景走,没有绝对最优。

Q11 防重放/防篡改在网关怎么做?

HMAC 签名timestamp+nonce

开放 API 用签名方案:客户端对 method+path+body+timestamp+nonce 做 HMAC-SHA256 签名;网关重算比对(防篡改),校验 timestamp 窗口(如 5 分钟)+ nonce 短期存储去重(防重放)。HTTPS 只保护传输,签名保护的是"业务请求本身"——两者叠加才完整。

Q12 网关的观测要采什么?

访问日志RED入口 trace

入口是 trace 起点:生成/透传 trace-id 进访问日志;指标按 RED 三元组(Rate 错误率、Errors、Duration P50/P95/P99)按路由维度打点;日志含 method/path/上游/code/延迟/用户维度(脱敏)。网关指标是"全站健康第一屏"——错误率突增先看入口再看服务。

六题进阶:gRPC 对外(透传 vs 转码,metadata 透传别丢)、聚合的部分失败语义(degraded 标记+deadline 预算)、网关层灰度两级(权重+标签)、选型三主线(形态/插件/运维)、防重放(HMAC+timestamp+nonce,与 HTTPS 叠加)、观测(trace 起点+RED+按路由打点)。

Related & References

相关知识点与参考

本领域相关 deck

跨领域相关 deck

参考链接(一手来源)

收尾链接:领域内指向限流(网关防护算法)、发现(寻址)、负载均衡(分流策略)、RPC(gRPC 对外)、Mesh(南北向/东西向分工)、配置中心(动态规则同源)、可观测(入口埋点);跨领域是 HTTP/TCP 协议层。参考:APISIX/Kong/Envoy Gateway 官方文档、Gateway API、BFF 原文、OWASP API Security Top 10 与 JWT/OAuth2 RFC。