什么是API网关

简介: API网关是一种统一接收外部请求并转发至后端服务的中间层,具备请求路由、协议转换、鉴权、限流、熔断降级等功能。它简化了客户端与多个微服务之间的交互,提升了系统安全性与可维护性,常见实现有Kong、SOUL、Zuul等。

1.什么是API网关

可以简单理解为:他更像是一种思想,而不是一种具体的架构,在很多框架中都有体现,如国产的KONG,SOUL,SpringCloud中的ZUUL(NetFlix开源)都是网关的一种技术具体实现。

常见的API网关实现,其技术一般是依赖于:Netty + NIO + Servlet3.0 进行实现。

假设一种业务场景:服务1对外提供Http接口,同时依赖服务2的Dubbo协议接口,服务3的Http协议接口,服务4的SpringCloud协议,先不论接入的调试,至少我们项目在配置文件中,需要三个服务的地址或域名,每个环境都需要重新调试,对接三个系统。API网关就是帮助我们来解决这样一个场景的技术,我们不再需要单独调用每一个服务(当然还是可以单独调用的),只要将1,2,3,4服务全部暴露注册进网关,其余时候直接去网关请求就可以,网关负责转发,数据同步,请求对应的接口。既然可以完成请求,响应,转发,自然API网关就可以帮助我们实现鉴权,限流,熔断降级等效果。

一句话来说,API网关的功能就是接收并转发请求到实际的接口,然后将实际接口返回的数据返回给调用方。

2.为什么需要API网关

  • RPC协议转成HTTP

由于在内部开发中我们都是以RPC协议(thrift or dubbo)去做开发,暴露给内部服务,当外部服务需要使用这个接口的时候往往需要将RPC协议转换成HTTP协议。

  • 请求路由

在我们的系统中由于同一个接口新老两套系统都在使用,我们需要根据请求上下文将请求路由到对应的接口。

  • 统一鉴权

对于鉴权操作不涉及到业务逻辑,那么可以在网关层进行处理,不用下层到业务逻辑。

  • 统一监控

由于网关是外部服务的入口,所以我们可以在这里监控我们想要的数据,比如入参出参,链路时间。

  • 流量控制,熔断降级

对于流量控制,熔断降级非业务逻辑可以统一放到网关层。


3.常见API网关

---

京东

唯品会

有赞

阿里

Zuul

实现关键

servlet3.0

netty

servlet3.0

servlet3.0

servlet3.0

异步情况

servlet异步,rpc是否异步不清楚

全链路异步

全链路异步

全链路异步

Zuul1同步阻塞,Zuul2异步非阻塞

限流

---

---

平滑限流。最初是codis,后续换到每个单机的令牌桶限流。

1.基本流控:基于API的QPS做限流。2.运营流控:支持APP流量包,APP+API+USER的流控33.大促流控:APP访问API的权重流控。阿里开源:Sentinel

提供了jar包:spring-cloud-zuul-ratelimit。1.对请求的目标URL进行限流(例如:某个URL每分钟只允许调用多少次)。2.对客户端的访问IP进行限流(例如:某个IP每分钟只允许请求多少次)3.对某些特定用户或者用户组进行限流(例如:非VIP用户限制每分钟只允许调用100次某个API等)4.多维度混合的限流。此时,就需要实现一些限流规则的编排机制。与、或、非等关系。支持四种存储方式ConcurrentHashMap,Consul,Redis,数据库。

熔断降级

---

---

Hystrix

---

只支持服务级别熔断,不支持URL级别。

隔离

线程池隔离

---

信号量隔离

---

线程池隔离,信号量隔离

缓存

redis

---

二级缓存,本地缓存+Codis

HDCC 本地缓存,远程缓存,数据库

需要自己开发

泛化调用

---

http,https,http1,http2,二进制

dubbo,http,nova

hsf,dubbo,http,https,http2,http1

只支持http

相关文章
|
负载均衡 监控 Java
5 种主流API网关技术选型,yyds! 上
5 种主流API网关技术选型,yyds! 上
|
XML 设计模式 前端开发
JavaFx-桌面应用开发利器(三)FXML和Scene Builder
本文首先简单介绍了Fxml和Scene Builder的基本知识,同时以eclipse为例,通过代码的形式说明如何进行Fxml的开发,最后使用SceneBuilder进行​应用快速开发。同时说明在使用eclipse中可能会遇到的一些问题以及解决办法​。
1911 0
JavaFx-桌面应用开发利器(三)FXML和Scene Builder
|
前端开发 Java Spring
SpringBoot2.6.x 整合swagger3.0 报错Failed to start bean ‘documentationPluginsBootstrapper‘
org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException
16779 3
SpringBoot2.6.x 整合swagger3.0 报错Failed to start bean ‘documentationPluginsBootstrapper‘
|
3月前
|
人工智能 前端开发 算法
Qwen3.6全面评测:从代码生成到多模态识别的实战体验
Qwen3.6在代码生成(Python/React/算法)与多模态识别(图像理解、情感分析)方面表现卓越;支持Vibe Coding上下文连贯编程,百炼平台易接入、免费额度足、定价灵活,是开发者高效落地AI应用的优选国产大模型。(239字)
1152 0
|
SQL 关系型数据库 MySQL
Mysql主从同步报错解决:Fatal error: The slave I/O thread stops because ..
Mysql主从同步报错解决:Fatal error: The slave I/O thread stops because ..
1777 0
|
JavaScript 前端开发 开发者
Vue.js 2 项目实战(四):成绩案例
Vue.js 2 项目实战(四):成绩案例
|
安全 测试技术 Go
Go语言在高并发场景下的应用
在当今互联网高速发展的时代,高并发已成为众多应用系统面临的核心问题。本文探讨了Go语言在高并发场景下的优势,并通过具体实例展示了其在实际应用中的效果和性能表现。
|
运维 Go 开发者
Go语言在微服务架构中的应用与优势
本文深入探讨了Go语言在构建微服务架构中的独特优势和实际应用。通过分析Go语言的核心特性,如简洁的语法、高效的并发处理能力以及强大的标准库支持,我们揭示了为何Go成为开发高性能微服务的首选语言。文章还详细介绍了Go语言在微服务架构中的几个关键应用场景,包括服务间通信、容器化部署和自动化运维等,旨在为读者提供实用的技术指导和启发。
|
Java 应用服务中间件 Maven
从零玩转之SpringBoot3-核心原理1
从零玩转之SpringBoot3-核心原理
721 0
|
6月前
|
人工智能 关系型数据库 分布式数据库
多图,PolarDB 2026 开发者大会有感
解读阿里云PolarDB开发者大会上数据库的AI原生演进:从数据形态融合、模型算子化到湖库一体架构,PolarDB通过四大支柱构建面向智能体时代的统一数据基座,推动数据库向“AI in SQL”与自主治理的深度变革。