【分布式架构理论3】分布式调用(2):API 网关分析
文章目录
- 一、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 版本中,每个请求都会由一个独立的线程处理,该线程负责:
- 接收客户端请求
- 调用后端微服务获取响应
- 将结果返回给客户端
但由于网络请求属于 I/O 操作,线程在等待后端服务返回数据时会 被阻塞,导致资源浪费。当并发量较高时,API
网关的线程池可能被耗尽,系统吞吐量下降,影响整体性能。
2. Zuul2:异步非阻塞处理
为了解决线程阻塞问题,Zuul2 引入了 异步请求处理机制,其核心思想是 事件驱动+回调机制,主要流程如下:
- 请求进入网关,被包装成一个 事件;
- CPU 内核中的监听器 持续轮询 请求事件队列;
- 一旦检测到有新的请求事件,就立即触发 异步调用后端微服务,无需等待;
- 后端微服务处理完请求后,将结果存入 指定的缓冲区;
- API 网关发送通知事件,告知客户端数据已就绪,客户端可直接获取结果。
这样,API 网关的 请求线程无需同步等待后端服务返回数据,从而释放系统资源,提高并发处理能力。
三、 API 网关与负载均衡的关系
API 网关不仅提供 服务聚合,简化客户端调用多个微服务的复杂性,还能进行 路由、负载均衡 等功能。在本质上,它与负载均衡器的作用存在相似之处,均可用于请求分发。但 API 网关更关注业务层面的流量管理和协议转换,而 负载均衡器更侧重于网络层面的流量均衡。在实际应用中,两者可以互补使用,以优化系统性能。
相关文章:
【分布式架构理论3】分布式调用(2):API 网关分析
文章目录 一、API 网关的作用1. 业务层面:简化调用复杂性2. 系统层面:屏蔽客户端调用差异3. 其他方面: 二、API 网关的技术原理1. 协议转换2. 链式处理3. 异步请求机制1. Zuul1:同步阻塞处理2. Zuul2:异步非阻塞处理 三…...
基于Kamailio、MySQL、Redis、Gin、Vue.js的微服务架构
每个服务使用一台独立的服务器的可行部署方案,尤其是在高并发、高可用性要求较高的场景中。这种方案通常被称为分布式部署或微服务架构。以下是针对您的VoIP管理系统(基于Kamailio、MySQL、Redis、Gin、Vue.js)的详细分析和建议。 1. 分布式部…...
6S模型的编译问题解决
使用python处理遥感光谱数据,免不了进行大气校正,基本上免费的就是使用Py6s,而py6s库只是一个接口,还需要自己配置6S模型,可以查到很多资料,6S模型是古老的fortran语言写的,基本配置流程就是安装…...
C++11详解(二) -- 引用折叠和完美转发
文章目录 2. 右值引用和移动语义2.6 类型分类(实践中没什么用)2.7 引用折叠2.8 完美转发2.9 引用折叠和完美转发的实例 2. 右值引用和移动语义 2.6 类型分类(实践中没什么用) C11以后,进一步对类型进行了划分&#x…...
实验十四 EL和JSTL
实验十四 EL和JSTL 一、实验目的 1、掌握EL表达式的使用 2、掌握JSTL的使用 二、实验过程 1、在数据库Book中建立表Tbook,包含图书ID,图书名称,图书价格。实现在bookQuery.jsp页面中模糊查询图书,如果图书的价格在50元以上&#…...
为什么在springboot中使用autowired的时候它黄色警告说不建议使用字段注入
byType找到多种实现类导致报错 Autowired: 通过byType 方式进行装配, 找不到或是找到多个,都会抛出异常 我们在单元测试中无法进行字段注入 字段注入通常是 private 修饰的,Spring 容器通过反射为这些字段注入依赖。然而,在单元测试中&…...
DeepSeek大模型介绍、本地化部署与使用!【AI大模型】
一、DeepSeek 是什么? 1.技术定位 专注大模型与AGI研究,开发高性能基座模型(如 DeepSeek LLM 系列),支持长文本、多模态、代码生成等复杂任务。 提供开源模型(如 DeepSeek-MoE、DeepSeek-V2)…...
备考蓝桥杯嵌入式4:使用LCD显示我们捕捉的PWM波
上一篇博客我们提到了定时器产生PWM波,现在,我们尝试的想要捕获我们的PWM波,测量它的频率,我们应该怎么做呢?答案还是回到我们的定时器上。 我们知道,定时器是一个高级的秒表(参考笔者的比喻&a…...
智能化转型2.0:从“工具应用”到“价值重构”
过去几年,“智能化”从一个模糊的概念逐渐成为企业发展的核心议题。2024年,随着生成式AI、大模型、智能体等技术的爆发式落地,中国企业正式迈入智能化转型的2.0时代。这一阶段的核心特征是从单一场景的“工具应用”转向全链条的“价值重构”&…...
机器学习之数学基础:线性代数、微积分、概率论 | PyTorch 深度学习实战
前一篇文章,使用线性回归模型逼近目标模型 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 本篇文章内容来自于 强化学习必修课:引领人工智能新时代【梗直哥瞿炜】 线性代数、微积分、概率论 …...
9.PPT:儿童孤独症介绍【22】
目录 NO12345 NO6789 NO12345 1-3张素材.txt中的大纲→素材文档PPT.pptx设计→主题→积分字体:幻灯片母版在幻灯片母版右上角的相同位置插入任一剪贴画,改变该剪贴画的图片样式、为其重新着色,并使其不遮挡其他文本或对象 开始→版式动画…...
离散浣熊优化算法(DCOA)求解大规模旅行商问题(Large-Scale Traveling Salesman Problem,LTSP),MATLAB代码
大规模旅行商问题(Large-Scale Traveling Salesman Problem,LTSP)是经典旅行商问题(TSP)在规模上的扩展,是一个具有重要理论和实际意义的组合优化问题: 一、问题定义 给定一组城市和它们之间的…...
Java 引入和使用jcharset,支持UTF-7字符集
一、背景说明 Java标准库不直接支持UTF-7字符集,但通过我们可以使用第三方库jcharset方便地处理UTF-7编码的数据。 二、引入说明 JDK8及以下版本,我们将jcharset.jar并将其放到${JAVA_HOME}/jre/lib/ext/下即可完成引入。 JDK17及以后版本,对…...
rust安装笔记
安装笔记 安装加速cargo 国内源nightly版本安装其他目标将现有项目迁移到新版本升级 安装加速 export RUSTUP_UPDATE_ROOT"https://mirrors.ustc.edu.cn/rust-static/rustup" export RUSTUP_DIST_SERVERhttps://mirrors.tuna.tsinghua.edu.cn/rustup curl --proto h…...
扣子平台的选择器节点:让智能体开发更简单,扣子免费系列教程(17)
欢迎来到涛涛聊AI。今天,我们来聊聊一个非常实用的工具——扣子平台的选择器节点。即使你不是计算机专业人员,但对计算机操作比较熟悉,这篇文章也能帮你快速上手。我们会从基础知识讲起,一步步带你了解选择器节点的使用方法和应用…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_sprintf_num 函数
ngx_sprintf_num 声明就在 ngx_string.c 的开头 static u_char *ngx_sprintf_num(u_char *buf, u_char *last, uint64_t ui64,u_char zero, ngx_uint_t hexadecimal, ngx_uint_t width); ngx_sprintf_num 实现 static u_char * ngx_sprintf_num(u_char *buf, u_char *last,…...
Vue的状态管理:用响应式 API 做简单状态管理、状态管理库(Pinia )
文章目录 引言单向数据流多个组件共享一个共同的状态I 用响应式 API 做简单状态管理使用 reactive()创建一个在多个组件实例间共享的响应式对象使用ref()返回一个全局状态II 状态管理库Pinia枚举状态管理引言 单向数据流 每一个 Vue 组件实例都在“管理”它自己的响应式状态了…...
AI工具如何辅助写文章(科研版)
文章总览:[YuanDaiMa2048博客文章总览](https://blog.csdn.net/2301_79288416/article/details/137397359?spm=1001.2014.3001.5501)https://blog.csdn.net/2301_79288416/article/details/137397359?spm=1001.2014.3001.5501 在科研领域,撰写论文是一个复杂且耗时的过程。…...
LEED绿色建筑认证的重要意义
LEED(Leadership in Energy and Environmental Design)绿色建筑认证由美国绿色建筑委员会(USGBC)开发,是全球广泛认可的绿色建筑评估体系。其重要意义体现在以下几个方面: 1. 环境保护 资源节约࿱…...
阿里云 ubuntu22.04 中国区节点安装 Docker
下面是一份在 Ubuntu 22.04 (Jammy) 上,通过阿里云镜像源来安装并配置 Docker 的详细步骤示例,可在中国区阿里云节点使用: 一、卸载旧版本 (如已安装) 如果系统中已经安装了旧版 Docker (可能是 docker、docker-engine、docker.io、containe…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
