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

文章目录

    • [一、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 网关发起请求,就能完成一个业务操作,从而减少客户端和微服务之间的网络调用处理复杂度。

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 网关更关注业务层面的流量管理和协议转换 ,而 负载均衡器更侧重于网络层面的流量均衡。在实际应用中,两者可以互补使用,以优化系统性能。

相关推荐
今天AI了吗1 小时前
什么是 AI Agent?它与直接调用大模型 API 有何区别
java·网络·人工智能·架构·java-ee
一尘之中1 小时前
深入解析面向服务的架构(SOA):从特性到实施
学习·架构·ai写作
嘟嘟嘟95272 小时前
AI Agent 的边缘困境
人工智能·架构·agent
学渣超2 小时前
记一次复杂业务功能重构——从过程式长链路,到模板方法构建体系
java·架构·代码规范
星禾元亨2 小时前
生成式 AI 时代的架构演进与 GEO 优化:实体企业 AI 落地避坑指南
大数据·人工智能·架构·自动化·创业创新
这个DBA有点耶2 小时前
MySQL大表DDL锁表锁到崩溃?Online DDL的3个关键参数和实战避坑
数据库·mysql·架构
依依东望9612 小时前
还在用 Electron?6 种跨平台桌面方案横评:Rust + Vue 把安装包从 224MB 干到 4.7MB
架构
弈栈录4 小时前
LangChain Agent 实战:快速构建可调用工具的智能体
python·架构
Solara4 小时前
中文字体子集化实录:3.2MB → 200KB 的完整脚本、踩坑清单与三条反直觉经验
前端·css·架构
天远API5 小时前
零信任架构实战:基于天远全能消金报告构建自动化消费分期网关
运维·人工智能·架构·自动化