什么是API网关(API Gateway)?

1. 什么是API网关(API Gateway)?

在微服务体系结构中,客户端可能与多个前端服务进行交互。

API 网关位于客户端与服务之间。 它充当反向代理,将来自客户端的请求路由到服务。 它还可以执行各种横切任务,例如身份验证、SSL 终止和速率限制。 如果未部署网关,则客户端必须直接向前端服务发送请求。 但是,直接向客户端公开服务会造成一些潜在问题:

  • 可能需要编写复杂的客户端代码。 客户端必须跟踪多个终结点,并以弹性方式处理故障。
  • 会在客户端与后端之间造成耦合。 客户端需要知道如何分解各个服务。 因此,客户端维护和服务重构会变得更困难。
  • 单个操作可能需要调用多个服务。 这可能导致客户端和服务器之间的多次网络往返,从而显著增加了延迟时间。
  • 每个面向公众的服务必须处理身份验证、SSL 和客户端速率限制等问题。
  • 服务必须公开客户端友好的协议,例如 HTTP 或 WebSocket。 这就限制了通信协议的选择。
  • 包含公共终结点的服务是潜在的受攻击面,必须得到强化。

网关可以通过将客户端与服务分开,来帮助解决这些问题。 网关可以执行许多不同的功能,但我们不一定需要所有这些功能。 这些功能可划分到以下设计模式:

  • 网关路由: 使用网关作为反向代理,通过第 7 层路由将请求路由到一个或多个后端服务。 网关为客户端提供单一终结点,可帮助将客户端与服务分开。
  • 网关聚合:使用网关可将多个单独请求聚合成一个请求。 当单个操作需要调用多个后端服务时,可以应用此模式。 客户端将一个请求发送到网关。 网关会将请求分派到不同的后端系统,然后聚合结果并将其发回给客户端。 这有助于减少客户端与后端之间的通信频率。
  • 网关卸载:使用网关可将单个服务的功能卸载到网关,尤其适合用于解决横切问题。 可能有效的做法是将这些功能整合到一个位置,而不是让每个服务负责实现这些功能。 对于需要专业技能才能正确实现的功能(例如身份验证和授权),这种做法尤其有效。

下面是可卸载到网关的一些功能示例:

  • SSL 终止
  • Authentication
  • IP 允许列表或阻止列表
  • 客户端速率限制(限制)
  • 日志记录和监视
  • 响应缓存
  • Web 应用程序防火墙
  • GZIP 压缩
  • 为静态内容提供服务

2.选择网关技术

现在的一些网关技术:traefix、Nginx、OpenResty、Kong、Zuul、Spring Cloud Gateway等。下面主要介绍traefix、Nginx、OpenResty三种网关技术。

2.1traefix

Træfɪk是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具。它支持多种后台 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file...) 来自动化、动态的应用它的配置文件设置。

重要特性:

  • 它非常快,无需安装其他依赖,通过Go语言编写的单一可执行文件;
  • 多种后台支持:Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd;
  • 支持支持Rest API、Websocket、HTTP/2、Docker镜像;
  • 监听后台变化进而自动化应用新的配置文件设置;
  • 配置文件热更新,无需重启进程;
  • 后端断路器、负载均衡、容错机制;
  • 清爽的前端页面,可监控服务指标。

2.2Nginx

Nginx是⼀款轻量级的Web服务器、反向代理服务器,由于它的内存占⽤少,启动极快,⾼并发能⼒强,在互联⽹项⽬中⼴泛应⽤。一般Nginx的上层还有一个负载均衡器,如LVS,对Nginx做负载均衡。

重要特性:

  1. Nginx以事件驱动的⽅式编写,所以有⾮常好的性能;
  2. 在性能上,Nginx占⽤很少的系统资源,能⽀持更多的并发连接,达到更⾼的访问效率;
  3. 在功能上,Nginx是优秀的代理服务器和负载均衡服务器;
  4. 在安装配置上,Nginx安装简单、配置灵活;
  5. Nginx支持热部署,启动速度特别快,可以在不间断服务的情况下对软件版本或配置进行升级;nginx -s reload。

在微服务的体系之下,Nginx被越来越多的项目所采用,作为网关来使用,配合Lua做限流、熔断等控制。

2.3OpenResty

OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。

OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。

相关推荐
2501_948114246 小时前
2026模型能力分化加剧:多模型聚合架构的技术解析与工程落地思考
人工智能·ai·chatgpt·架构
实在智能RPA8 小时前
Agent 如何处理流程中的异常情况?2026年AI Agent架构工程与自愈机制深度拆解
人工智能·ai·架构
码路高手10 小时前
Trae-Agent中的 selector核心逻辑
人工智能·架构
咚咚王者10 小时前
人工智能之知识蒸馏 第四章 知识蒸馏架构演进与适配方案
人工智能·架构
风曦Kisaki10 小时前
# LAMP 架构 + Discuz! 论坛实战笔记
笔记·架构
CoovallyAIHub10 小时前
MSD-DETR:面向机车弹簧检测的可变形注意力Detection Transformer
算法·架构
CoovallyAIHub11 小时前
不改权重、不用训练!BEM用背景记忆抑制固定摄像头误检,YOLO/RT-DETR全系有效
算法·架构·github
CoovallyAIHub11 小时前
上交+阿里 | Interactive ASR:Agent框架做语音识别交互纠错,1轮交互语义错误率降57%
算法·架构·github
qq_4542450311 小时前
以编程能力作为智能体框架评估基准的形式化充分性与局限性
架构
守月满空山雪照窗12 小时前
深入理解 MTK FPSGO:Android 游戏帧率治理框架的架构与实现
android·游戏·架构