什么是API网关

本文涉及的产品
AI 网关免费试用,400元 Serverless
简介: 本文系统阐述了API网关的核心概念与价值,结合SpringBoot+Dubbo+Zookeeper架构引入Soul网关的实践,深入解析API网关如何实现请求路由、协议转换、统一鉴权、限流熔断等功能,并对比主流网关技术,揭示其在微服务架构中的关键作用。

在前面5章节,我们详细论述了如何在一个SpringBoot应用中,搭建Dubbo+Zookeeper,同时在此基础之上,引入了API GateWay-Soul(Soul只是API网关的一种,并非唯一也并非一定最优)。至少在使用层面上,我们有了基础的认知,在此基础之上,我们再回过头来看下,什么是API GateWay,以及他帮我们实现了什么?为什么现在越来越多的架构中都开始引入了API网关。
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

相关文章
|
4月前
|
存储 JSON NoSQL
MongoDB常用命令
本教程介绍MongoDB数据库操作,涵盖数据库与集合的创建、删除,文档的增删改查及分页排序查询。以文章评论系统为例,演示数据存储结构设计、CRUD操作、条件查询、投影与排序,以及分页实现方法,帮助快速掌握MongoDB基本用法。(238字)
|
4月前
|
Java 开发工具 数据安全/隐私保护
项目《中州养老》
《中州养老》是一个面向养老院的后台管理系统,涵盖员工管理端与家属小程序端。系统功能包括预约参观、入住退住、计费管理、健康监测等模块。项目采用Vue3+TS+TDesign构建前端,后端基于SpringBoot(SSM),集成Redis缓存、Nginx部署、阿里云OSS与IoT平台。支持RBAC权限控制、智能设备数据实时监控、微信登录、定时任务处理及多线程高效通信,实现养老业务全流程数字化管理。(238字)
|
4月前
|
数据可视化 Java 关系型数据库
01-认识Activiti
工作流指如请假、报销等需审批的业务流程,通过可视化引擎实现多节点审批,广泛应用于CRM、WMS等系统。主流技术包括BPMN、Activiti和Flowable,其中Activiti为Java系开源引擎,支持复杂流程自动化,推动企业流程数字化。
|
4月前
|
存储 算法 BI
xxljob本地运行
本文介绍XXL-JOB分布式任务调度的部署与使用。包含源码获取、数据库导入、服务端配置启动、客户端注册及执行器配置。详细说明各数据表作用、路由策略类型,并演示任务创建、参数设置与执行日志查看,助你快速上手XXL-JOB。
|
4月前
|
存储 NoSQL 关系型数据库
MongoDB索引知识
MongoDB索引通过B树结构提升查询效率,避免全表扫描。支持单字段、复合、地理空间、文本及哈希索引,适用于等值、范围、排序及全文搜索,显著提升大数据量下的查询性能。
|
4月前
|
数据可视化 数据挖掘 BI
性能优化专题
两幅图像展示了数据可视化图表,包含柱状图与折线图的组合,用于呈现趋势与对比分析。色彩分明,结构清晰,适用于业务报表、数据分析等场景,帮助用户直观理解关键指标变化。
|
4月前
|
存储 负载均衡 Java
第九章 SpringCloud框架
Nacos支持服务注册发现与配置管理,基于心跳机制实现健康监测,提供分级存储模型(命名空间、组、DataId)实现多环境隔离。相比Eureka,Nacos具备更优的实时推送、更短心跳周期,并融合配置中心功能。OpenFeign结合LoadBalancer实现服务调用负载均衡,支持轮询、随机等策略。Sentinel提供流量控制、熔断降级,通过滑动窗口算法精准限流。Spring Cloud Gateway作为网关核心,实现路由匹配、断言过滤与请求处理,支持限流、鉴权、监控等功能,提升微服务架构稳定性与可维护性。(239字)
|
4月前
|
NoSQL Java 数据库连接
第七章 SpringBoot框架
SpringBoot简化Spring开发,核心功能包括starter起步依赖、自动配置和jar包运行。通过@SpringBootApplication实现自动化配置,支持多种外部配置方式,优先级由高到低为:命令行参数 > 系统属性 > properties > yml > yaml。可自定义starter实现模块化集成。
|
4月前
|
XML Java 数据库连接
映射关系(1-1 1-n n-n)
本内容介绍MyBatis中四种关联映射:一对一(属性与字段映射,可用resultMap解决命名不一致)、一对多(如用户对应多个角色,使用`<collection>`)、多对一(如作者与博客,使用`<association>`)和多对多(如用户与部门,借助中间类并通过`<collection>`实现双向关联)。

热门文章

最新文章