想象你管理着一座拥有 500 家店铺的巨型购物中心。开业之初,每家店都自己开一扇门直通大街,顾客想去哪家就推门进哪家,店主自己验会员、自己控制客流、自己记账。但随着店面越来越多,问题接踵而至:顾客在迷宫般的街道间迷路、各家店重复建设安保和收银系统、小偷四处流窜、管理层连“今天到底来了多少人”都说不清。 于是你决定建造一座中央总服务台——所有顾客从统一大门进场,在这里验证会员卡、被指引到心仪店铺的位置、高峰期门口分批放行、特殊区域有安保巡逻和广播预警。这座总服务台,就是微服务世界里的 API Gateway(API 网关)。 在微服务架构中,服务被拆成几十上百个,客户端如果直连每个服务,既要维护一大堆地址、又要分别处理认证和限流,成本完全失控。API 网关就是那个“总服务台”:它统一接收所有外部请求,负责任务分发、身份核验、流量管控和运行监控,让背后的微服务安心做好自己的生意。接下来,我们沿着这座总服务台的蓝图,逐步拆解它如何工作、如何设计、如何落地。
对 AI 从业者而言,网关是模型推理服务的“第一道门”——掌握它,你才能把 LLM API、推荐系统、风控服务安全稳定地暴露给业务方。
可视化演示
动态演示API Gateway的核心机制,通过概览/流程/对比/趋势四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
API Gateway:API网 API网关核心功能与微服务架构 API路由与请求转发机制 核心机制可视化 API Gateway整体架构与关键组件
网关概念
想象过去的商业街:每个店铺都对着大街开门,顾客直接进店,店主各自管账、各自安保。这就是单体应用时代的“直连”——客户端只需要知道几个服务的地址就行。可当一家公司把业务拆成几十个微服务后,客户端要维护几十个地址、处理几十种协议、和每个服务分别做认证——这就像一条街上突然开了 500 家店却没有任何统一入口,顾客会彻底迷路,管理也会失控。
微服务架构的本质是把“大而全”拆成“小而专”,但拆分也带来了新问题:服务地址频繁变动、重复的横切逻辑(认证、限流、日志)散落在各个服务里、客户端与内部结构过度耦合。于是 API 网关应运而生,它成为所有外部流量进入微服务系统的统一入口。客户端只需要知道网关的地址,剩下的路由、认证、限流都由网关代劳,内部服务甚至可以藏在内网,不对外直接暴露。
从数据流的角度看,网关把所有客户端请求汇聚在了一起。假设有 $n$ 个客户端,每个客户端每秒产生 $q_i$ 个请求,那么网关入口的每秒总流量就是:
这座“总服务台”不仅收拢了客流,更把“验票、指路、控流”这些本属于各店铺的重复工作全部收归一处。有了它,商场里的每家店铺才能安心做好自己的商品和服务——这正是微服务网关最根本的价值所在。
- 总流量 $Q_{gateway}$它表示网关每秒需要承接的请求总数,是衡量网关容量和限流阈值的核心指标,相当于商场的“每秒到访客流”。
- 求和运算符 $\sum$把每个客户端的流量一项一项累加起来。这里的累加意味着“集中汇聚”,正是“统一入口”的数学表达。
- 第 $i$ 个客户端的流量 $q_{client}^{(i)}$每个客户端(手机 App、网页、第三方系统)各自产生的请求速率,就像每个顾客进入商场的频率。
- 客户端的数量 $n$所有接入方的总数。$n$ 越大,网关的汇聚效应越明显,统一治理的价值也越大。
核心功能
总服务台每天要干四件事:给顾客指路(路由转发)、验证会员卡(身份认证)、高峰期控制入场人流(限流管控)、某区域出问题时广播封锁并引导去别处(熔断降级)。在微服务世界里,这四件事就是网关的核心功能,它们有一个共同的名字——横切关注点,即“每个服务都需要的通用能力”。
路由转发是网关最基础的功能。请求到达网关后,网关根据 URL 路径、请求头等信息,决定该转给哪个微服务,这和“根据顾客想去哪家店,服务台告诉你往哪个方向走”一样。身份认证则负责校验调用者是不是合法用户,常见的做法是验证 JWT Token 或 API Key,就像会员卡和门票必须核验一样。
限流管控是最容易被低估的功能。想象商场周末人潮汹涌,如果不限流,楼道会拥堵甚至发生踩踏。网关会用固定窗口、滑动窗口或令牌桶等算法控制单位时间内的请求数。假设一个时间窗口 $T$ 秒内最多放行 $N$ 个请求,那么限流速率就是:
此外,熔断降级是网关的“安全阀”:当某个微服务持续报错或响应超时,网关会临时切断到该服务的调用,改为返回兜底数据,避免故障像多米诺骨牌一样蔓延到整个系统。这就像商场发现某家店漏电,立刻封锁该区域并广播“请去其他店铺”,防止整栋楼停电。正是这四大功能,让每个微服务只写业务代码,而把通用治理交给网关这门“总闸”。
- 窗口时长 $T$限流统计的时间单位,比如 1 秒、1 分钟。它如同商场的“时段划分”,每分钟统计一次入场人数。
- 放行上限 $N$在一个窗口内允许通过的最大请求数,这是业务方根据服务容量测算出的安全值,相当于“每分钟限入 3000 人”的场馆承载上限。
- 限流速率 $R_{limit}$最终得到的每秒许可速率。若实际请求速率低于它,一切照常;高于它,多余的请求会被拒绝或排队,就像闸机挡住超员顾客。
路由机制
服务台之所以能准确指路,是因为它手里有一份实时更新的“商场地图”;网关之所以知道请求该转给谁,靠的是路由表和服务注册中心。微服务启动时会把自身地址注册到注册中心(如 Nacos、Consul),网关定期从注册中心拉取最新的服务实例列表,这就是动态路由——服务扩容缩容、地址漂移,网关无需重启即可感知。
拿到实例列表后,网关面临一个新问题:3 个订单服务实例,请求到底发给谁?这就轮到负载均衡登场了。最简单的策略是轮询——轮流选一个;更精细的策略是加权轮询,给性能强的机器更高的权重。假设服务 $S$ 有 $n$ 个实例,第 $i$ 个实例的权重为 $W_i$,那么它被选中的概率为:
除了负载均衡,网关还要处理协议转换——内部服务用 gRPC,外部客户端用 HTTP,网关负责“翻译”;以及请求转发的具体细节——包含超时设置、重试机制、请求头传递等。整个路由链路就像商场里的智能摆渡车系统:总服务台查询实时地图、评估各店承载量、把顾客高效分流到最合适的店面。没有这一机制,几百家店会旱的旱死、涝的涝死。
- 第 $i$ 个实例的权重 $W_i$权重表示该实例能承受流量的大小,通常由机器配置、网络带宽等决定,就像同一品牌的两家店,大店每小时能接待 200 人,小店只能接待 50 人。
- 所有实例权重之和 $\sum_{j=1}^{n} W_j$把全部实例的权重加起来作为分母,用于把各实例的权重归一化到 0~1 之间,确保概率总和为 100%。
- 被选中的概率 $P_i$网关在“决定下一单生意给哪个实例”时会按照这个概率分布随机选择。权重越高、被选中的可能越大,但低权重实例仍有机会被选中,这正是负载均衡的精髓。
设计模式
当商场规模足够大时,一个总服务台可能不够用:你会设置楼层服务台、VIP 专属通道、团购接待专区。微服务网关也有类似的设计模式,其中最著名的是 BFF(Backend for Frontend,面向前端的后端)模式。
BFF 的核心思想是:不同前端(手机 App、Web 网页、小程序)对数据的需求差异很大。手机端需要精简数据、省流量,网页端需要完整数据、方便调试。如果所有前端都打同一个通用网关,接口设计只能“取最大公约数”,谁都不满意。因此 BFF 为每种前端单独建一个网关,各自定制接口。这就像商场的“1 楼化妆品服务台”和“3 楼儿童区服务台”——各自服务各自的客群,指引更精准。
与 BFF 密切相关的是聚合模式:一个页面往往需要同时从用户服务、订单服务、商品服务拿数据。如果客户端依次调用 3 次,体验差且网络开销大;网关可以在后端并行调用这 3 个服务,把结果聚合成一个响应返回给客户端。假设 $n$ 个子请求全部并行发出,那么聚合接口的总耗时只取决于最慢的那个请求:
在更复杂的系统里,还会出现边缘网关(部署在 CDN 边缘节点,离用户更近)和网关分层(外层流量网关负责限流与安全,内层业务网关负责路由与聚合)。这些模式都遵循同一个理念:像大型商场分区管理一样,把“接待”这件大事拆成不同的专业服务台,各司其职、协同高效。
- 第 $k$ 个子请求耗时 $T_k$网关内部发起的每个子调用的耗时,例如获取用户信息的耗时、获取订单列表的耗时。
- 并行执行多个子请求同时发出,互不等待。这是聚合模式的关键前提——如果串行执行,总耗时将变成 $\sum T_k$,那可就慢了。
- 聚合总耗时 $T_{aggregate}$取所有子耗时中的最大值。这个公式告诉我们:优化聚合接口的重点是找出并优化那个“最慢的商店”,而非平均耗时。
主流实现
买门禁系统时,不同商场会选择不同品牌:有的追求极致性能,有的看重生态集成,有的干脆租用物业统一提供。API 网关的实现方案同样丰富,选型前先想清楚自己的技术栈和团队能力。
Kong 是基于 Nginx 和 OpenResty 构建的高性能云原生网关,支持插件化扩展(认证、限流、日志插件一应俱全),Kubernetes 生态中常通过 Kong Ingress Controller 使用。Spring Cloud Gateway 是 Java 技术栈的事实标准,基于 WebFlux 响应式编程,与 Spring Cloud 注册中心(Nacos/Eureka)无缝集成,适合大规模 Java 微服务。Zuul 是 Netflix 开源的老牌网关,经历过从 Zuul 1.x(阻塞式)到 Zuul 2.x(异步非阻塞)的演进,虽然现在风光不如从前,但存量系统仍大量使用。云托管网关(如 AWS API Gateway、阿里云云原生 API 网关)则提供免运维的托管服务,内置限流、鉴权、监控甚至计费能力,适合中小团队快速起步。
无论选哪款实现,都要关注网关引入的额外延迟。一次请求从客户端发出,要经历网络传输、网关处理、服务处理三段耗时:
选择网关实现不是“越贵越好”,而是“匹配即最优”:Java 团队选 Spring Cloud Gateway 学习成本低,云原生团队选 Kong 拓展性强,不愿意运维的直接上云托管。就像不同定位的商场选择不同的门禁品牌,但最终目的都是让顾客顺畅进门。
- 网络耗时 $T_{network}$请求在客户端与网关、网关与服务之间的网络传输时间,受物理距离和带宽影响,相当于顾客走到服务台的路程时间。
- 网关处理耗时 $T_{gateway}$网关执行路由、认证、限流等逻辑消耗的时间。选型核心指标之一,框架性能差异主要体现在这里。
- 服务处理耗时 $T_{service}$后端微服务真正执行业务逻辑的耗时,通常是三段中占比最大的部分。这个公式提醒我们:网关的开销必须被严格压到最小,不能成为新的瓶颈。
部署架构
一座超大型商场不可能只有一个入口:四面都有大门、地下车库直通、地铁层也有通道。为了保证任何方向来的顾客都能顺畅进入,你会部署多个门岗协同工作。API 网关同样需要集群部署——部署多个网关实例,前面挂负载均衡器统一分发流量,避免单点故障。
网关集群的核心要义是无状态:每个网关节点不保存用户的会话状态(Session),所有状态落在共享的认证中心或 Redis 里,这样任何节点都能处理任意请求。理论上,如果每个网关节点每秒能处理 $Q_{node}$ 个请求,集群有 $N_{node}$ 个节点,那么集群总吞吐量近似为:
在部署架构中,网关还需要与注册中心集成,保证路由表实时更新;与配置中心和日志平台打通,实现统一配置下发和链路追踪。更大型的系统会采用多级网关:入口的流量网关只管全局限流和防攻击,内部的业务网关负责具体路由和聚合。同时要重视东西向流量——微服务之间的互相调用也需要安全管控,不能只盯着南北向的外部流量。这就像商场不仅要管好大门,还要在各楼层安排巡逻保安,才能做到全方位安全。
- 节点数 $N_{node}$网关实例的数量,通常由流量峰值决定。大促前扩容网关节点是常规操作,就像节假日商场会临时增开安检通道。
- 单节点吞吐量 $Q_{node}$单个网关实例每秒能处理的请求数,取决于硬件配置和网关框架性能。
- 集群总吞吐量 $Q_{cluster}$所有节点叠加后的处理能力。注意这个公式成立的前提是负载均衡策略有效、节点之间无共享瓶颈,否则集群性能会打折扣。
实践要点
商场总服务台上线只是开始,持续运营才是长期挑战。你会发现某些时段客流暴增、某些指引路线绕路、偶尔还会出现停电等突发状况,这些都对应着网关的性能优化、日志监控、灰度发布和故障演练四大实践。
性能优化的要点包括:开启 HTTP 连接复用(Keep-Alive)、使用异步非阻塞模型减少线程占用、对频繁读取的配置和路由做本地缓存。日志监控则要求网关输出完整的访问日志和慢请求告警,通过 Prometheus 采集指标、通过 Jaeger/Zipkin 做链路追踪——没有这些“监控探头”,商场管理者就会变成瞎子。灰度发布是上线新功能时最稳妥的做法:先让一小部分流量走新版本,验证无误后再逐步放量。
灰度发布必须用数据说话。假设灰度批次内共有 $N_{total}$ 个请求,其中 $N_{success}$ 个成功返回,那么该批次成功率是:
最后,故障演练是“防火演习”——定期模拟服务宕机、网络抖动、限流触发等场景,验证网关的熔断和降级策略是否真的生效。每一次演练后的复盘,都是对总服务台流程的优化。记住:网关不是建完就完事的静态建筑,而是需要持续打磨的“商场大脑”。
---
- 成功请求数 $N_{success}$灰度期间返回状态码正常的请求数量,它是衡量新版本健康度的直接指标。
- 总请求数 $N_{total}$灰度流量池内所有请求的总数,包括成功、失败、超时的全部样本。
- 成功率 $S_{rate}$以百分比形式呈现的转化指标。$S_{rate}$ 越接近 100%,灰度批次越健康;一旦掉到阈值以下,自动触发回滚机制,把流量切回旧版本。
AI 应用场景
LLM 推理服务的统一接入网关
阶段:模型部署与在线推理服务
解决的问题:大语言模型(LLM)推理服务通常部署在 GPU 集群上,成本高且调用模式复杂(流式输出、长上下文、高并发)。如果业务方直接连模型实例,既无法控制成本,也无法对模型版本做灰度切换,更没法按部门做 Token 配额管理。
具体案例:某企业内部部署了 Llama 系列开源模型,通过 API 网关暴露一个与 OpenAI 兼容的 /v1/chat/completions 接口。网关层完成三件事:按部门限流(A 部门每分钟最多 1000 token)、模型路由(请求头带模型名,网关转发到对应 GPU 实例)、成本计量(每个请求消耗的 token 数记录到计费系统)。算法团队升级模型时,只需在网关切换路由权重,实现 0 代码灰度。
智能推荐系统的 BFF 聚合网关
阶段:在线推荐服务的特征聚合与编排
解决的问题:推荐系统的一次请求往往需要同时获取用户画像、召回候选集、排序特征等多路数据。如果让 App 客户端依次调用 3~5 个 AI 服务,首屏延迟会高达数秒,用户体验极差。
具体案例:某电商 App 的“猜你喜欢”页面,采用 BFF 模式部署一个专用推荐网关。App 一次请求进来后,BFF 并行调用画像服务、召回服务、排序服务,将结果聚合为 20 条推荐商品返回。依托 T_aggregate = max(T_i) 的并行聚合策略,首屏耗时从 1.8 秒降到 600 毫秒。
实时风控模型的网关联动
阶段:在线推理与安全策略执行
解决的问题:金融交易场景中,每笔交易在进入业务系统前都需要做实时风控评分。传统做法是业务代码里硬编码风控调用,改一处配一次、效率低且容易漏配;更重要的是,风控策略需要快速迭代,不能每次改规则都发版。
具体案例:某支付平台在 API 网关中集成了风控插件。每笔交易请求先由网关调用风控模型打分,分数低于阈值直接拦截并返回“交易存在风险”的提示;分数处于灰色地带则触发二次验证。整个风控决策不下发到业务服务,策略模型热更新时业务方完全无感知。
Python 演示
import time class ApiGateway: """Simplified API Gateway: routing + auth + rate limit.""" def __init__(self): self.routes = {} self.tokens = {} self.last_refill = {} self.rate = 2.0 self.capacity = 5 def register(self, path, handler): self.routes[path] = handler def auth(self, token): return token == "valid-token-123" def _refill(self, client): now = time.time() last = self.last_refill.get(client, now) delta = now - last self.tokens[client] = min( self.capacity, self.tokens.get(client, self.capacity) + delta * self.rate ) self.last_refill[client] = now def allow_request(self, client): """Token bucket: take one token to pass.""" self._refill(client) if self.tokens[client] >= 1: self.tokens[client] -= 1 return True return False def dispatch(self, path, token, client="127.0.0.1"): if not self.auth(token): return 401, "unauthorized" if not self.allow_request(client): return 429, "rate limited" handler = self.routes.get(path) if handler is None: return 404, "path not found" return 200, handler() def order_service(): return {"service": "order", "data": "order list"} def user_service(): return {"service": "user", "data": "user profile"} def run_demo(): gw = ApiGateway() gw.register("/api/orders", order_service) gw.register("/api/users", user_service) print("=== Fire 8 requests in 0.1s interval ===") for i in range(8): code, body = gw.dispatch("/api/orders", "valid-token-123") print(f"req {i+1}: {code} {body}") time.sleep(0.1) if __name__ == "__main__": run_demo()
self.routes = {}路由表,把 URL 路径映射到对应的处理函数,就像服务台手里的商场地图。self.auth(token)校验调用方身份,相当于总服务台检查会员卡,这里简化为对比一个合法 Token。def _refill(self, client)令牌桶的核心:按时间流逝往桶里补充请求配额,速率由self.rate控制。self.tokens[client] = min(self.capacity, ...)桶容量封顶,防止积攒过多令牌导致瞬时流量洪峰。def allow_request(self, client)请求进门必须消耗一枚令牌,消耗不了就返回 429 限流。if not self.allow_request(client): return 429, "rate limited"这就是“高峰期总服务台暂缓放行”,多余的请求直接吃到限流响应。handler = self.routes.get(path)按路径从路由表查到目标服务,没查到就返回 404,像服务台找不到对应店铺的指引。return 200, handler()认证、限流都没问题后,才真正把请求转发给微服务执行并原样返回结果。
常见误区
误区我加一层网关已经多了一次网络跳转,如果再部署多个网关集群,每个请求要经过更多节点,延迟肯定更高,所以一个实例最合适。
正解生产环境必须考虑高可用。网关是系统的单点入口,一旦宕机整个系统不可用——这就像商场只有一个大门,门坏了全商场停业。集群部署配合负载均衡后,请求并不会串行经过所有节点,而是只经过其中一个;单个实例的压力反而变小,性能和可用性都提升。真正的优化方向是压缩单个网关节点的处理延迟,而不是减少节点数。
为何常见:初学者容易把“多节点”误解为“请求要经过多跳”,实际上负载均衡器会把每个请求分发到某一个节点,集群只是多了并行选择。
误区Nginx 也是做转发,API 网关无非就是多几个转发规则,核心工作就是把 HTTP 请求原样扔给后端服务。
正解转发只是网关的起点。网关的核心价值在于把认证、限流、熔断、监控这些横切能力从各个服务中抽离出来集中管理。一个不做事只转发的网关等于只有一个“摆设服务台”,无法承载微服务治理的诉求。Nginx 重性能而轻治理,API 网关则内置了丰富的插件化治理能力。
为何常见:只看到“入站请求→出站转发”的同步链路,忽略了网关在异步、聚合、灰度、安全等策略上的编排能力。
误区所有外部流量都从网关进来,网关已经把坏人挡在门外了,服务之间的内部调用应该默认安全,不用再做鉴权。
正解网关只能管理南北向流量(外部客户端→服务)。而微服务之间的东西向流量(服务→服务)通常不走网关,攻击者一旦攻破一个服务,就能横向渗透到其他服务。正确的做法是:服务间采用 mTLS 双向认证,配合服务网格(如 Istio)实现东西向安全管控。否则就像商场大门安保森严,但内部各店铺之间却不上锁。
为何常见:把“边界防护”和“内部纵深防御”混为一谈,忽视了微服务架构“信任边界”已经下移的现实。
误区上线时把路由规则、限流阈值、证书这些都配好了,后续不用再管它,它自己会稳定运行。
正解网关是需要持续治理的动态系统:新服务上线要加路由、服务扩容要调权重、大促前要调整限流阈值、证书要定期轮换、安全漏洞要打补丁、灰度策略要反复调整。好的团队会把网关配置当作代码资产,纳入版本管理和 CI/CD 流程。没有持续运营的网关,就像从没更新过商场地图——早晚会把顾客带进死胡同。
为何常见:把网关看作静态基础设施,忽略了它与服务生命周期的高度耦合。
面试题
Q1. 在微服务架构中,API 网关通常扮演什么角色?
- A.数据存储层角色
- B.流量入口层角色← 正确答案
- C.业务计算层角色
- D.消息队列层角色
答案:B。API 网关是所有外部流量进入微服务系统的统一入口,负责路由、认证、限流等横切能力,相当于商场的总服务台。它不负责业务计算(选项 C),也不做数据持久化(选项 A)或消息中转(选项 D),因此正确答案是 B。
Q2. 下列哪一项不是 API 网关的核心功能?
- A.路由转发
- B.身份认证
- C.动态扩容← 正确答案
- D.限流管控
答案:C。路由、认证、限流都是网关的经典核心功能。动态扩容是指根据负载自动增减服务实例,这是容器编排平台(如 Kubernetes)或服务治理框架的职责,而不是网关的职责。网关负责“按需调度流量”,不负责“创建新的服务实例”。
Q3. 关于令牌桶限流算法,下列说法正确的是?
- A.完全禁止突发流量
- B.允许短时突发流量← 正确答案
- C.只限制非法请求
- D.必须人工补充令牌
答案:B。令牌桶的特点是桶里预先存放一批令牌,同时以固定速率持续补充。当桶里积攒了令牌时,瞬间可以消耗多枚令牌,因此允许一定程度的突发流量——就像商场高峰期闸机前积累了一批“放行券”,短时间能多放几人。完全禁止突发的是漏桶算法(漏桶固定速率流出),选项 A 错误。
Q4. 网关使用加权轮询做负载均衡时,实例的权重决定了什么?
- A.服务实例的响应速度
- B.被选中承担请求的概率← 正确答案
- C.网关路由表的条目数
- D.服务实例占用的端口数
答案:B。加权轮询中,权重表示实例相对其他实例能承载流量的比例大小,权重越高被选中的概率越大,公式为 $P_i = W_i / \sum W_j$。权重不决定响应速度,也不影响路由表条数或端口占用,因此只有 B 正确。
Q5. BFF 模式要解决的核心问题是什么?
- A.解决数据库读写性能瓶颈
- B.为不同前端定制聚合接口← 正确答案
- C.提升后端服务并发上限
- D.替代服务间的 RPC 协议
答案:B。BFF 的核心是为不同类型的客户端(App、Web、小程序)分别建立后端网关,按各自需求聚合和裁剪数据。手机端更省流量,网页端要完整信息。它不是数据库优化方案,也不替代服务间协议,更不直接提升后端并发,因此选 B。
Q6. 网关对下游服务做重试时,最应该注意什么?
- A.建议用 GET 替代 POST
- B.确保接口幂等且有限次重试← 正确答案
- C.重试时去掉请求头认证
- D.无限次重试直到成功
答案:B。重试最大的风险是“重复下单”:第一次请求实际已经成功,但响应超时,网关重试又发了一次,导致业务被重复执行。因此重试前必须确认接口是幂等的(多次调用结果一致),并设置有限重试次数(如 2~3 次),配合退避策略。无限重试会拖垮下游,去掉认证会导致鉴权失败。正确答案是 B。
Q7. 网关输出的访问日志和监控指标,最常被谁使用?
- A.数据库管理员
- B.研发和运维团队← 正确答案
- C.财务部门人员
- D.一线客服人员
答案:B。网关日志记录了每个请求的路由目标、响应码、耗时、限流次数等关键信息。研发团队用它们排查接口错误,运维团队用它们发现流量异常和容量瓶颈——正如商场的客流数据由运营团队分析。数据库管理员关注的是数据库层指标,财务和客服并不是日志的主要消费者。
Q8. 网关在做限流时,可以基于哪些维度设计限流策略?
- A.客户端 IP 地址← 正确答案
- B.用户 ID 标识← 正确答案
- C.API 路径特征← 正确答案
- D.服务器机箱温度
答案:ABC。限流维度决定了“谁被限”。常见的限流键包括:客户端 IP(防止单个 IP 攻击)、用户 ID(防止单个用户刷接口)、API 路径(对高开销接口单独限流)。服务器机箱温度是硬件监控指标,不会作为业务限流维度,故 D 不选。
Q9. 下列哪些是 API 网关可以承担的职责?
- A.熔断降级保护← 正确答案
- B.协议格式转换← 正确答案
- C.请求日志记录← 正确答案
- D.数据库主从复制
答案:ABC。熔断降级是网关的“安全阀”,协议转换(如 HTTP 转 gRPC)是路由机制的组成部分,日志记录是网关的监控基石。数据库主从复制属于数据层能力,与网关无关——网关只入口流量,不碰数据同步机制,故排除 D。
Q10. 构建网关高可用集群时,需要解决哪些关键问题?
- A.网关实例无状态化← 正确答案
- B.与注册中心动态集成← 正确答案
- C.配置同步与健康检查← 正确答案
- D.压缩集群节点数量
答案:ABC。无状态化保证任意节点可处理任意请求;与注册中心集成保证路由表实时更新;配置同步让所有节点规则一致,健康检查自动摘除故障节点——这三点是高可用集群的基石。压缩节点数量恰恰会降低可用性,除非是为了节省成本而做容量评估,故 D 不选。