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

news/2025/2/7 12:41:48/

文章目录

    • 一、API 网关的作用
      • 1. 业务层面:简化调用复杂性
      • 2. 系统层面:屏蔽客户端调用差异
      • 3. 其他方面:
    • 二、API 网关的技术原理
      • 1. 协议转换
      • 2. 链式处理
      • 3. 异步请求机制
        • 1. Zuul1:同步阻塞处理
        • 2. Zuul2:异步非阻塞处理
    • 三、 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 网关更关注业务层面的流量管理和协议转换,而 负载均衡器更侧重于网络层面的流量均衡。在实际应用中,两者可以互补使用,以优化系统性能。

 


http://www.ppmy.cn/news/1570069.html

相关文章

HTTP异步Client源码解析

我们知道Netty作为高性能通信框架,优点在于内部封装了管道的连接通信等操作,用户只需要调用封装好的接口,便可以很便捷的进行高并发通信。类似,在Http请求时,我们通过调用HttpClient,内部使用java NIO技术&…

使用 cipher /w 清除磁盘删除残留数据(Windows) - 随笔

cipher命令是Windows 系统自带的一个用于管理文件加密和磁盘数据清除的工具。通过 cipher /w 命令,可以清除磁盘上已删除文件的残留数据,确保这些数据无法被恢复。以下是一个简易的批处理脚本,用于清除指定磁盘上的加密数据。 echo off :: 清…

排序算法与查找算法

1.十大经典排序算法 我们希望数据以一种有序的形式组织起来&#xff0c;无序的数据我们要尽量将其变得有序 一般说来有10种比较经典的排序算法 简单记忆为Miss D----D小姐 时间复杂度 &#xff1a;红色<绿色<蓝色 空间复杂度&#xff1a;圆越大越占空间 稳定性&…

DeepSeek 遭 DDoS 攻击背后:DDoS 攻击的 “千层套路” 与安全防御 “金钟罩”

当算力博弈升级为网络战争&#xff1a;拆解DDoS攻击背后的技术攻防战——从DeepSeek遇袭看全球网络安全新趋势 在数字化浪潮席卷全球的当下&#xff0c;网络已然成为人类社会运转的关键基础设施&#xff0c;深刻融入经济、生活、政务等各个领域。从金融交易的实时清算&#xf…

Lerna和Yarn Workspaces的优缺点分别是什么?

Lerna 和 Yarn Workspaces 的优缺点比较 在现代 JavaScript 开发中,管理多包结构变得越来越重要。Lerna 和 Yarn Workspaces 是两种流行的工具,帮助开发者有效地管理和组织项目中的多个包。虽然它们的目标相似,但在功能和使用体验上却各有千秋。本文将深入探讨这两者的优缺…

【starrocks学习】之将hive表数据同步到starrocks

目录 一、确认环境 二、创建StarRocks表 三、导出Hive表数据 四、将数据导入StarRocks 1.使用Broker Load 2.使用Stream Load 五、验证数据 六、注意事项 一、确认环境 确保Hive和StarRocks都已正确安装并运行。 二、创建StarRocks表 在StarRocks中创建与Hive表结构一…

二级C语言题解:十进制转其他进制、非素数求和、重复数统计

目录 一、程序填空&#x1f4dd; --- 十进制转其他进制 题目&#x1f4c3; 分析&#x1f9d0; 二、程序修改&#x1f6e0;️ --- 非素数求和 题目&#x1f4c3; 分析&#x1f9d0; 三、程序设计&#x1f4bb; --- 重复数统计 题目&#x1f4c3; 分析&#x1f9d0; 前言…

ip属地是根据所在位置定位的吗

在数字化时代&#xff0c;随着网络社交和电子商务的蓬勃发展&#xff0c;IP属地这一概念逐渐走入了大众的视野。许多平台开始显示用户的IP属地&#xff0c;这一举措旨在增强网络信息的透明度和真实性。然而&#xff0c;关于IP属地是否就是根据用户所在位置进行定位的问题&#…