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

相关推荐
知行合一。。。5 分钟前
SOFA 架构--02--核心中间件与工具
中间件·架构
励志成为糕手9 小时前
Spark Shuffle:分布式计算的数据重分布艺术
大数据·分布式·spark·性能调优·数据倾斜
Lei活在当下9 小时前
【业务场景架构实战】6. 从业务痛点到通用能力:Android 优先级分页加载器设计
前端·后端·架构
三口吃掉你10 小时前
Git分布式版本控制工具
分布式·git
yunmi_10 小时前
分布式文件存储系统FastDFS(入门)
java·分布式·maven·fastdfs
步行cgn13 小时前
Java项目包结构设计与功能划分详解
java·开发语言·架构·mvc
市民中心的蟋蟀13 小时前
第三章 钩入React 【上】
前端·react.js·架构
海梨花16 小时前
【从零开始学习RabbitMQ】
分布式·学习·rabbitmq
ACEEE122217 小时前
解读DeepSeek-V3.2-Exp:基于MLA架构的Lightning Index如何重塑长上下文效率
人工智能·深度学习·算法·架构·deep
失散1319 小时前
分布式专题——26 BIO、NIO编程与直接内存、零拷贝深入辨析
java·分布式·rpc·架构·nio·零拷贝