【插件式微服务架构系统分享】之 解耦至上:gateway 网关与APISIX 网关的不同分工

【插件式微服务架构系统分享】之解耦至上:gateway 网关与APISIX 网关的不同分工

作者:朱元禄

一、一个比方

  • APISIX 就像是一个专业的高速公路收费站,不属于你公司自己造的路,而是专门为所有车辆(流量)设计的,功能强大、扩展性好、可以插各种“插件”(比如限速、安检、计费、分流等)。
  • 你项目里的 gateway(比如 Spring Cloud Gateway 或自研网关)就像是你公司门口的保安岗亭,主要负责自己公司的进出管理,和公司内部业务结合得很紧密。

二、技术对比(为啥一定要有 APISIX 这一层)

对比点APISIX(专业API网关)项目内 gateway(如Spring Cloud Gateway)
定位独立于业务的API流量入口,专注流量治理业务系统自带的网关,和业务代码耦合较多
部署方式独立服务,通常和业务解耦项目代码里一部分,和业务服务一起维护
扩展能力插件丰富(限流、鉴权、灰度、监控、WAF等)插件能力有限,主要靠Spring生态
动态路由支持热更新、动态注册、服务发现(如Nacos)支持,但通常和Spring Cloud体系绑定
性能高性能,专为大流量设计性能较好,但受限于JVM和Spring生态
生态支持多语言后端、K8s、云原生、OpenAPI等主要服务于Java/Spring Cloud微服务
运维独立运维,和业务服务分离和业务服务一起运维
典型场景多语言、多团队、插件化、商业化、SaaS平台纯Spring Cloud微服务体系,业务耦合场景

三、结合项目实际

1. 项目里的 gateway

  • 目录:jeecg-server-cloud/jeecg-cloud-gateway/
  • 作用:作为Spring Cloud微服务的统一入口,负责路由、鉴权、限流等,和JEECG-Boot业务体系深度集成。
  • 适合:内部微服务调用、业务相关的流量管理

2. 如果引入 APISIX

  • 作为独立的API网关,放在所有流量最前面,负责所有外部/第三方/前端流量的统一入口
  • 可以和Nacos结合,自动发现你所有的微服务(包括主系统和插件)。
  • 适合:插件化、商业化、SaaS多租户、对外API开放、流量治理、灰度发布等场景

3. 两者如何配合?

  • 最优做法
    • APISIX 作为最外层的“总入口”,负责所有外部流量的统一治理、插件化扩展、动态路由。
    • 你项目的 gateway 作为内部微服务的“二级网关”,继续负责和业务强相关的路由、鉴权、内部限流等。
    • 流量路径
      用户/前端 → APISIX → 你项目的 gateway → 各业务服务/插件

四、最简单的落地实践

  • 不动现有 gateway,直接在前面加一层 APISIX,负责插件市场、商业化、对外API等流量治理。
  • 插件服务、主系统都注册到Nacos,APISIX自动发现并路由。
  • 这样既保留了你项目原有的微服务体系,又获得了APISIX的强大流量治理和插件化能力。

五、业务流量场景说明

1. 用户访问商城下单(涉及插件)

场景说明
  • 用户在商城下单,可能会用到优惠券、会员价等插件功能。
  • 需要鉴权、插件授权校验、服务间调用。
详细流程
  1. 用户请求
    用户在前端点击“下单”,前端发起下单API请求(带JWT Token)。

  2. APISIX网关

    • 首先到达APISIX。
    • APISIX执行JWT鉴权(校验Token是否合法、是否过期)。
    • APISIX根据路由规则,将请求转发到内部gateway。
  3. gateway(内部网关)

    • gateway根据请求路径,将流量路由到core-service(商城核心服务)。
    • gateway可做内部权限、限流等处理。
  4. core-service(商城核心服务)

    • 处理下单主流程。
    • 检查用户是否有优惠券、会员资格等(需要用到插件)。
    • 通过服务发现(Nacos),调用coupon-servicemember-service等插件服务。
  5. 插件服务(如coupon-service/member-service)

    • 插件服务收到请求,先校验调用方(如租户、用户)是否有授权(查License中心或本地授权表)。
    • 返回优惠券/会员价等信息给core-service。
  6. core-service

    • 汇总所有信息,完成下单逻辑,返回下单结果。
  7. gateway → APISIX → 前端

    • 响应一路返回,最终到达用户前端。
流程图
用户前端APISIXgatewaycore-servicemember-servicecoupon-service下单操作POST /api/order/create (JWT)JWT鉴权路由到gateway路由到core-service调用member-service(查会员)调用coupon-service(查优惠券)返回会员信息(校验授权)返回优惠券信息(校验授权)返回下单结果返回返回展示下单结果用户前端APISIXgatewaycore-servicemember-servicecoupon-service

2. 用户查看报表插件

场景说明
  • 用户想看报表(如销售统计),报表是一个插件服务。
详细流程
  1. 用户请求
    用户在前端点击“查看报表”,前端发起API请求(带JWT Token)。

  2. APISIX网关

    • 首先到达APISIX。
    • APISIX执行JWT鉴权。
    • APISIX根据路由规则,直接将请求转发到report-service(报表插件服务)。
  3. report-service(插件服务)

    • 校验用户/租户是否有授权(查License中心或本地授权表)。
    • 查询报表数据,返回结果。
  4. APISIX → 前端

    • 响应返回到前端,展示报表。
流程图
用户前端APISIXreport-service查看报表GET /api/report/xxx (JWT)JWT鉴权路由到report-service校验授权,查询数据返回报表数据返回展示报表用户前端APISIXreport-service

3. 内部服务间调用(无需APISIX)

场景说明
  • core-service(商城核心)需要在业务流程中调用member-service(会员插件),比如下单时判断会员价。
详细流程
  1. core-service发起调用

    • 通过Nacos服务发现,找到member-service的地址。
    • 直接通过gateway(或Spring Cloud内部负载均衡)发起HTTP/RPC调用。
  2. gateway(可选)

    • 如果内部服务间流量也统一走gateway,则gateway做一次内部路由。
  3. member-service(插件服务)

    • 校验调用方(如租户、服务授权)。
    • 返回会员信息。
  4. core-service处理业务

    • 使用会员信息完成业务逻辑。
流程图
core-servicegatewaymember-service请求会员信息路由到member-service校验授权返回会员信息返回core-servicegatewaymember-service

也可以C直接调用M(如果不强制走gateway),当然我个人认为这个不是重要场景也不是对外,直接调用就行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/92291.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/92291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【感知机】感知机(perceptron)学习算法例题及详解

感知机( perceptron )是二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取1 和-1二值。感知机对应输入空间(特征空间)中将实例划分为正负两类的分离超平面,是一种判别模型。感知机是神经网络与支持向量机的基础…

Linux基础命令速查:从入门到精通

Linux常用命令指南一、操作系统概述1 . 什么是操作系统?2. 为什么需要操作系统?二、Linux基础命令1. 目录与文件操作2. 文件操作命令3. 文件查看命令4. 文本处理命令三、重定向1. 重定向符号四、Linux系统概念1. 文件系统特点2. 路径规则3. 通配符五、压…

一周学会Matplotlib3 Python 数据可视化-坐标轴 (Axis)

锋哥原创的Matplotlib3 Python数据可视化视频教程: 2026版 Matplotlib3 Python 数据可视化 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 课程介绍 本课程讲解利用python进行数据可视化 科研绘图-Matplotlib,学习Matplotlib图形参数基本设置&…

防火墙安全作用及 firewalld 交互、端口配置

1. 防火墙在 Linux 系统安全中有哪些重要的作用?网络访问控制;隔离网络区域;抵御网络攻击;限制服务暴露;日志审计与溯源;隐藏内部网络结构。2. 简单说明一下firewalld。Firewalld服务是一种动态防火网管理器…

RabbitMQ削峰填谷详解:让系统在流量洪峰中“稳如泰山”

想象一下:双十一零点,千万用户同时点击下单按钮,服务器该如何应对?这就是削峰填谷要解决的难题。而RabbitMQ正是这场战役中的超级缓冲器!一、什么是“峰”和“谷”? 峰:系统瞬时高并发&#xff…

数据库表字段命名建议和最佳实践

在设计数据库时,字段命名是至关重要的,它直接影响到数据库的可读性、可维护性和团队协作效率。以下是数据库字段命名的一些建议和最佳实践:1. 使用清晰且描述性的名称目的:确保字段名能够清晰地表达其含义,便于其他开发…

散点图矩阵

create_scatterplotmatrix对角线是直方图,但是框选无交互import plotly.figure_factory as fffig ff.create_scatterplotmatrix(df, diaghistogram, # 将对角线设置为直方图)fig.update_layout(autosizeTrue, # 让 Plotly 自动适应容器widthNone, # 设置宽度hei…

Linux驱动25 --- RkMedia音频API使用增加 USB 音视频设备

目录 一、RV1126 增加 USB 音视频设备 二、RkMedia 音频 API 2.1 PCM 音频输入 系统初始化 AI 通道配置 AI 通道使能 开启数据流 获取数据 保存数据 2.2 编码音频编码输入 2.3 PCM 音频输出 一、RV1126 增加 USB 音视频设备 配置过程 第一步:来到 SDK 内核路…

CETOL 6σ 帮助提升活检器械精度并降低制造成本

某全球医疗器械企业采用 Sigmetrix 的 CETOL 6σ 公差分析软件,针对一次性活检采集器械(Biopsy Harvesting Instrument)完成结构优化,成功解决颌骨动力学缺陷、4mm孔径精度控制及线缆传动敏感度等核心挑战,大大提高了活…

基于协同过滤算法的图书推荐系统设计与实现/基于python的图书推荐系统设计与实现/基于python的图书借阅系统设计与实现

基于协同过滤算法的图书推荐系统设计与实现采用django、vue技术用户:注册、登录、图书信息、公告信息、个人中心、借阅记录、归还记录、我的收藏。管理员:登录、用户、图书分类、图书信息、借阅记录、归还记录、系统管理、用户信息。

线程组和线程池的基本用法

1.线程组1.1创建线程组的方法public class xianchengzu {public static void main(String[] args) {ThreadGroup group new ThreadGroup("group");// 创建线程组时指定父线程组ThreadGroup parent new ThreadGroup("parent");ThreadGroup child new Thr…

百度华为硬件笔试机试题-卷4

百度华为硬件笔试机试题-卷4 收集整理了以下30道选择题和判断题,涵盖电源管理、功率放大、半导体器件、数字逻辑、信号处理和电磁理论等领域。题目涉及复杂计算和分析,给出了参考答案和详细的解析,非常适合硬件工程师笔试机试准备。 选择题 1. 电源纹波主要测量什么值? …

38-TS之类型保护

关注大师不迷路,大师带你上高度~ 文章目录 前言 一、类型保护是什么? 二、使用步骤 1. 使用 typeof 操作符 2. 使用 instanceof 操作符 3. 自定义类型保护函数 4. 使用 in 操作符 总结 前言 关注大师不迷路,大师带你上高度~ 在前端开发中,JavaScript 的动态类型特性提供了…

win下安装labelimg

1、anconda安装python、qt的版本 conda create -n labelme python3.10.18 PyQt5 5.15.11 <pip> PyQt5-Qt5 5.15.2 <pip> PyQt5_sip 12.17.0 <p…

【Qt开发】常用控件(二) -> enabled

目录 1 -> 什么是 enabled 属性 2 -> API 3 -> 代码示例 3.1 -> 创建禁用状态按钮 3.2 -> 通过按钮切换按钮的禁用状态 1 -> 什么是 enabled 属性 在 Qt 中&#xff0c;enabled 是 QWidget 类的一个基础属性&#xff0c;它控制控件是否对用户输入做出响…

MySQL 配置性能优化赛:核心策略与实战技巧

在数据库性能优化领域,MySQL 配置调优如同一场精密的竞技比赛 —— 既要深刻理解数据库内核机制,又要根据硬件环境和业务场景灵活调整参数,最终在性能指标上脱颖而出。本文将围绕 MySQL 配置性能优化的核心维度,解析关键参数调优策略与实战经验。 一、性能优化的底层逻辑:…

C++ WonderTrader源码分析之自旋锁实现

一、介绍 在WonderTrader的文件SpinMutex.hpp定义了跨平台的自旋锁的实现。 二、实现原理 1、类 SpinMutex&#xff1a;自旋锁实现SpinMutex 是一个轻量级的自旋锁&#xff08;Spinlock&#xff09;实现&#xff0c;用于多线程之间保护临界区资源。自旋锁通过不断尝试获取锁而不…

【AI大模型】Spring AI 基于Redis实现对话持久存储详解

目录 一、前言 二、Spring AI 会话记忆介绍 2.1 Spring AI 会话记忆概述 2.2 常用的会话记忆实现方式 2.2.1 集成数据库持久存储会话实现步骤 2.3 适用场景 三、Spring AI基于内存会话记忆存储 3.1 本地开发环境准备 3.2 工程搭建与集成 3.2.1 添加核心依赖 3.3.2 添…

Numpy科学计算与数据分析:Numpy数据分析与图像处理入门

Numpy实战&#xff1a;从数据分析到图像处理 学习目标 通过本课程&#xff0c;学员将学会运用Numpy库进行数据分析和图像处理。学习如何使用Numpy进行数据的高效处理&#xff0c;以及如何利用Numpy进行基本的图像操作。 相关知识点 Numpy的数据分析和图像处理 学习内容 1…

Vue框架总结案例

目录 一、验证用户名是否已经被注册过 二、过滤器 三、图书管理系统 四、axios网络请求 一、验证用户名是否已经被注册过 1.案例 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script src"j…