【分布式架构理论4】分布式调用(2):API 网关分析

API 网关在微服务架构中不仅可以汇总微服务调用,还包括路由、负载均衡、限流、缓存、日志等功能。本文将从业务、系统等层面分析 API 网关的作用。


一、API 网关的作用

1. 业务层面:简化调用复杂性

在微服务架构中,一个客户端调用可能会混合多个微服务。比如,在一个下单场景中,客户端需要调用商品查询、库存减少和订单更新等多个服务。API 网关可以集成这些服务,客户端只需向 API 网关发起请求,就能完成一个业务操作,从而减少客户端和微服务之间的网络调用处理复杂度。

在这里插入图片描述

2. 系统层面:屏蔽客户端调用差异

在任何一个应用系统中,为了安全性和接口统一性,都需要将功能对外暴露成 API。API 网关作为系统之间的中介,一方面调度不同服务之间的合作,另一方面为外部系统提供一致的 API 规范,如 OpenAPI 接口。
在这里插入图片描述

在实际开发中,不同类型的客户端如 iOS、Android、PC和小程序,可能对同一功能的请求格式不同。API 网关通过层级化展示,为不同类型的客户端提供相应的 API,尽量减少不同平台间的调用差异。

 

3. 其他方面:

由于 API 网关处在客户端与微服务系统的交界,因此它还包括路由、负载均衡、限流、缓存、日志、发布等功能。


 

二、API 网关的技术原理

1. 协议转换

在多种协议存在的环境中,API 网关可以通过泛化调用,将不同协议转换为通用协议(如 JSON ),再将其转换为本地系统识别的协议。

在这里插入图片描述

 

2. 链式处理

设计模式中有一种责任链模式,该模式将“处理请求”和“处理步骤”分开。每个处理步骤都只关心自己需要完成的操作,各个处理步骤存在先后顺序。消息从第一个处理步骤流入,从最后一个处理步骤流出,每个处理步骤对流过的消息进行相应处理,整个过程形成一个链条。

API 网关在处理请求时,采用负载过滤器链式处理模式,包括如下几个步骤:

比如:在 Zuul 的设计中,消息从流入网关到流出网关需要经历一系列过滤器,这些过滤器之间有先后顺序,并且每个过滤器需要进行的工作各不一样。

  • pre 过滤器:水平缓冲,限流、鉴权、缓存。
  • routing 过滤器:实现路由与协议转换。
  • post 过滤器:返回响应时处理日志和统计。
  • error 过滤器:处理异常信息。

在这里插入图片描述

 

3. 异步请求机制

在高并发场景下,API 网关如何高效处理请求是关键问题。以 Zuul 为例,其请求处理方式经历了从 Zuul1(同步阻塞)Zuul2(异步非阻塞) 的演进,以提高吞吐量和响应速度。

1. Zuul1:同步阻塞处理

Zuul1 版本中,每个请求都会由一个独立的线程处理,该线程负责:

  1. 接收客户端请求
  2. 调用后端微服务获取响应
  3. 将结果返回给客户端

但由于网络请求属于 I/O 操作,线程在等待后端服务返回数据时会 被阻塞,导致资源浪费。当并发量较高时,API
网关的线程池可能被耗尽,系统吞吐量下降,影响整体性能

 

2. Zuul2:异步非阻塞处理

为了解决线程阻塞问题,Zuul2 引入了 异步请求处理机制,其核心思想是 事件驱动+回调机制,主要流程如下:

  1. 请求进入网关,被包装成一个 事件
  2. CPU 内核中的监听器 持续轮询 请求事件队列
  3. 一旦检测到有新的请求事件,就立即触发 异步调用后端微服务,无需等待;
  4. 后端微服务处理完请求后,将结果存入 指定的缓冲区
  5. API 网关发送通知事件,告知客户端数据已就绪,客户端可直接获取结果。

这样,API 网关的 请求线程无需同步等待后端服务返回数据,从而释放系统资源,提高并发处理能力。

 

三、 API 网关与负载均衡的关系

API 网关不仅提供 服务聚合,简化客户端调用多个微服务的复杂性,还能进行 路由、负载均衡 等功能。在本质上,它与负载均衡器的作用存在相似之处,均可用于请求分发。但 API 网关更关注业务层面的流量管理和协议转换,而 负载均衡器更侧重于网络层面的流量均衡。在实际应用中,两者可以互补使用,以优化系统性能。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

roman_日积跬步-终至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值