【插件式微服務架構系統分享】之 解耦至上: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
英文地址,請注明出處:http://en.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…