# 说说什么是 API 网关?它有什么作用?
10 min read
Table of Contents
说说什么是 API 网关?它有什么作用?
API 网关面试标准答案
【核心定义】
API 网关是一个位于客户端与后端服务之间的统一入口,负责请求的路由、组合、协议转换以及提供横切关注点(如安全、监控、限流)的集中管理。
【关键要点】
- 统一入口与路由:作为所有客户端请求的唯一接入点,根据预定义规则将请求路由到相应的后端微服务,实现客户端与后端服务的解耦。
- 协议转换与聚合:可处理不同协议(如 HTTP/HTTPS, WebSocket, gRPC),并能将多个后端服务的调用聚合成一个客户端请求,减少网络开销。
- 横切关注点集中化:将身份认证、授权、限流、熔断、监控、日志记录等公共功能从各个微服务中剥离,集中到网关层统一处理,提升系统可维护性。
- 安全防护:作为安全边界,实施身份验证(如 JWT 验证)、API 密钥管理、防止 SQL 注入与 DDoS 攻击等基础安全策略。
- 性能优化:通过响应缓存、请求压缩、负载均衡(如轮询、一致性哈希)等机制,提升系统整体响应速度与吞吐量。
【深度推导/细节】
核心矛盾:解耦与治理 vs 单点故障与性能瓶颈
- 逻辑拆解:
- 优势侧(解耦与治理):在微服务架构中,服务数量激增。若无网关,客户端需知晓所有服务地址与接口细节,耦合度高。网关通过提供抽象层,使客户端仅与网关交互。当服务内部架构变更(如服务拆分、合并、迁移)时,只需调整网关路由规则,客户端无需感知,极大提升了系统的灵活性与可维护性。同时,将限流、熔断等策略集中在网关,避免了在每个服务中重复实现,确保了治理策略的一致性。
- 风险侧(单点故障与性能瓶颈):网关作为单一入口,一旦宕机将导致整个系统不可用。同时,所有流量经过此处,可能成为性能瓶颈。
- 解决方案推导:
- 高可用:通过部署网关集群,结合负载均衡器(如 Nginx, F5)或 DNS 轮询,消除单点故障。
- 性能扩展:采用水平扩展,增加网关实例以分散流量压力。网关本身应设计为无状态,便于扩展。
- 性能优化:在网关层集成缓存(如缓存常用、低频变更的 API 响应)、实施异步非阻塞 I/O 模型(如 Netty)以支持高并发。
【关联/对比】
- API 网关 vs 负载均衡器:
- 负载均衡器(如 Nginx, LVS):核心功能是流量分发,主要工作在 OSI 四层(传输层)或七层(应用层),关注点在于将请求均匀分配到后端服务器,以保证服务可用性与扩展性。其功能相对单一。
- API 网关:是负载均衡器的功能超集。除了流量分发,更侧重于应用层的业务逻辑,如 API 生命周期管理、协议转换、身份认证、API 聚合、监控分析等。可以理解为“智能的、面向 API 的七层负载均衡器”。
- API 网关 vs 服务网格(Service Mesh):
- API 网关:处理南北向流量(即外部客户端到集群内部服务的流量),是边界控制器。
- 服务网格(如 Istio):通过 Sidecar 代理(如 Envoy)主要处理东西向流量(即集群内部服务间的流量),负责服务间通信的可靠性、安全与可观测性。
- 关系:在现代云原生架构中,两者常协同工作。API 网关作为外部入口,服务网格治理内部微服务网络,共同构成完整的流量管理体系。
『面试官追问』
- 网关如何实现动态路由?与配置中心如何配合?
- 答案要点:动态路由指不重启网关即可更新路由规则。通常将路由配置存储在外部配置中心(如 Nacos, Apollo, ZooKeeper)。网关客户端(或网关自身)监听配置中心的配置变更事件。当路由规则在配置中心更新后,配置中心推送通知,网关实时拉取新配置并更新内存中的路由映射表,从而实现动态生效。
- 网关限流常用的算法有哪些?令牌桶和漏桶的区别是什么?
- 答案要点:常用算法有计数器固定窗口、滑动窗口、令牌桶、漏桶。
- 令牌桶 vs 漏桶:
- 令牌桶:系统以恒定速率向桶中添加令牌。请求到达时需获取令牌,获取成功则处理,否则被限流。允许一定程度的突发流量(桶中有积存令牌时)。
- 漏桶:请求像水一样流入桶中,桶以恒定速率(漏出)处理请求。当桶满时,新请求溢出(被限流)。平滑输出流量,无法处理突发。
- 选择:令牌桶更适用于需要应对突发流量的场景(如秒杀);漏桶更适用于需要绝对平滑输出、保护下游的场景。
- 网关在熔断降级中扮演什么角色?如何与 Hystrix/Sentinel 集成?
- 答案要点:网关是实施熔断降级的理想位置。它可以监控后端 API 的调用情况(如错误率、响应时间)。当达到阈值(如 5 秒内错误率超过 50%),网关触发熔断,短时间内直接拒绝访问该 API,并快速失败返回降级内容(如默认值、友好提示)。熔断器会定期进入半开状态试探后端是否恢复。通常通过集成 Sentinel 或 Hystrix 的网关过滤器(Filter)来实现,这些组件提供了丰富的熔断规则配置与监控仪表盘。
- 如何保证网关自身的高性能与低延迟?
- 答案要点:
- 异步非阻塞架构:采用 Netty 等框架,避免线程阻塞,用少量线程处理大量连接。
- 响应缓存:对读多写少、一致性要求不高的 API 响应进行缓存。
- 连接池化:对后端服务的 HTTP 连接进行池化管理,避免频繁创建销毁连接的开销。
- 轻量级逻辑:将复杂的业务逻辑(如数据聚合、转换)尽量下放到 BFF(Backend for Frontend)或业务服务,网关只负责路由和通用横切逻辑。
- 硬件/网络优化:使用高性能硬件,优化网络拓扑。
- 答案要点:
【版本差异/技术选型】
- 主流开源网关对比:
- Spring Cloud Gateway:基于 Spring 5, Project Reactor, Spring Boot 2,使用异步非阻塞模型,性能优秀,与 Spring Cloud 生态无缝集成,功能可通过自定义过滤器灵活扩展。
- Netflix Zuul 1.x:基于同步阻塞模型(Servlet),每个请求占用一个线程,高并发下性能有瓶颈。Zuul 2.x 改为异步非阻塞,但 Netflix 已不再积极维护。
- Kong:基于 OpenResty (Nginx + Lua),性能极高,插件生态丰富,提供商业版与社区版,适合作为企业级 API 管理平台。
- Apache APISIX:基于 Nginx + etcd,动态路由、热加载能力极强,性能与 Kong 媲美,是目前非常活跃的云原生 API 网关。
- 选型建议:Spring Cloud 技术栈首选 Spring Cloud Gateway;追求极致性能、多语言环境、需要丰富插件生态,可选 Kong 或 Apache APISIX。