文章目录
-
- [一、API 网关的作用](#一、API 网关的作用)
-
- [1. 业务层面:简化调用复杂性](#1. 业务层面:简化调用复杂性)
- [2. 系统层面:屏蔽客户端调用差异](#2. 系统层面:屏蔽客户端调用差异)
- [3. 其他方面:](#3. 其他方面:)
- [二、API 网关的技术原理](#二、API 网关的技术原理)
-
- [1. 协议转换](#1. 协议转换)
- [2. 链式处理](#2. 链式处理)
- [3. 异步请求机制](#3. 异步请求机制)
-
- [1. Zuul1:同步阻塞处理](#1. Zuul1:同步阻塞处理)
- [2. Zuul2:异步非阻塞处理](#2. Zuul2:异步非阻塞处理)
- [三、 API 网关与负载均衡的关系](#三、 API 网关与负载均衡的关系)
API 网关在微服务架构中不仅可以汇总微服务调用,还包括路由、负载均衡、限流、缓存、日志等功能。本文将从业务、系统等层面分析 API 网关的作用。
一、API 网关的作用
1. 业务层面:简化调用复杂性
在微服务架构中,一个客户端调用可能会混合多个微服务。比如,在一个下单场景中,客户端需要调用商品查询、库存减少和订单更新等多个服务。API 网关可以集成这些服务,客户端只需向 API 网关发起请求,就能完成一个业务操作,从而减少客户端和微服务之间的网络调用处理复杂度。
![](https://i-blog.csdnimg.cn/direct/109825eb084a426c9ecb62c9433137cd.png)
2. 系统层面:屏蔽客户端调用差异
在任何一个应用系统中,为了安全性和接口统一性,都需要将功能对外暴露成 API。API 网关作为系统之间的中介,一方面调度不同服务之间的合作,另一方面为外部系统提供一致的 API 规范,如 OpenAPI 接口。
在实际开发中,不同类型的客户端如 iOS、Android、PC和小程序,可能对同一功能的请求格式不同。API 网关通过层级化展示,为不同类型的客户端提供相应的 API,尽量减少不同平台间的调用差异。
3. 其他方面:
由于 API 网关处在客户端与微服务系统的交界,因此它还包括路由、负载均衡、限流、缓存、日志、发布等功能。
二、API 网关的技术原理
1. 协议转换
在多种协议存在的环境中,API 网关可以通过泛化调用,将不同协议转换为通用协议(如 JSON ),再将其转换为本地系统识别的协议。
![](https://i-blog.csdnimg.cn/direct/a22a13bb8e9748e787a33ed1a8433612.png)
2. 链式处理
设计模式中有一种责任链模式,该模式将"处理请求"和"处理步骤"分开。每个处理步骤都只关心自己需要完成的操作,各个处理步骤存在先后顺序。消息从第一个处理步骤流入,从最后一个处理步骤流出,每个处理步骤对流过的消息进行相应处理,整个过程形成一个链条。
API 网关在处理请求时,采用负载过滤器链式处理模式,包括如下几个步骤:
比如:在 Zuul 的设计中,消息从流入网关到流出网关需要经历一系列过滤器,这些过滤器之间有先后顺序,并且每个过滤器需要进行的工作各不一样。
- pre 过滤器:水平缓冲,限流、鉴权、缓存。
- routing 过滤器:实现路由与协议转换。
- post 过滤器:返回响应时处理日志和统计。
- error 过滤器:处理异常信息。
![](https://i-blog.csdnimg.cn/direct/2edf0391e7aa4d1bbe0674e6a51b0fa6.png)
3. 异步请求机制
在高并发场景下,API 网关如何高效处理请求是关键问题。以 Zuul 为例,其请求处理方式经历了从 Zuul1(同步阻塞) 到 Zuul2(异步非阻塞) 的演进,以提高吞吐量和响应速度。
1. Zuul1:同步阻塞处理
在 Zuul1 版本中,每个请求都会由一个独立的线程处理,该线程负责:
- 接收客户端请求
- 调用后端微服务获取响应
- 将结果返回给客户端
但由于网络请求属于 I/O 操作 ,线程在等待后端服务返回数据时会 被阻塞 ,导致资源浪费。当并发量较高时,API
网关的线程池可能被耗尽,系统吞吐量下降,影响整体性能。
2. Zuul2:异步非阻塞处理
为了解决线程阻塞问题,Zuul2 引入了 异步请求处理机制 ,其核心思想是 事件驱动+回调机制,主要流程如下:
- 请求进入网关 ,被包装成一个 事件;
- CPU 内核中的监听器 持续轮询 请求事件队列;
- 一旦检测到有新的请求事件,就立即触发 异步调用后端微服务,无需等待;
- 后端微服务处理完请求后,将结果存入 指定的缓冲区;
- API 网关发送通知事件,告知客户端数据已就绪,客户端可直接获取结果。
这样,API 网关的 请求线程无需同步等待后端服务返回数据,从而释放系统资源,提高并发处理能力。
三、 API 网关与负载均衡的关系
API 网关不仅提供 服务聚合 ,简化客户端调用多个微服务的复杂性,还能进行 路由、负载均衡 等功能。在本质上,它与负载均衡器的作用存在相似之处,均可用于请求分发。但 API 网关更关注业务层面的流量管理和协议转换 ,而 负载均衡器更侧重于网络层面的流量均衡。在实际应用中,两者可以互补使用,以优化系统性能。