Spring Cloud Gateway 進行集群化部署

如果將 Gateway 單獨部署為一個服務而不做任何高可用處理,它確實會成為一個單點故障(SPOF, Single Point of Failure)。如果這個唯一的 Gateway 實例因為服務器宕機、應用崩潰、部署更新或其他任何原因而不可用,那么整個系統的所有外部請求都將無法訪問,后果非常嚴重。

因此,在生產環境中,絕對需要對 Spring Cloud Gateway 進行集群化部署

下面我用一個表格和架構圖來詳細說明為什么以及如何做:

📊 單點部署 vs. 集群部署對比

方面

單點部署 (Single Instance)

集群部署 (Cluster)

可用性

。實例宕機即導致服務完全中斷。

。單個實例故障不影響整體服務,由其他實例接管流量。

可擴展性

。性能受限于單臺服務器資源,遇到高并發時無法水平擴展。

優秀。可以通過簡單地增加實例數量來輕松應對高并發流量。

可靠性

脆弱。是典型的單點故障。

健壯。消除了單點故障。

維護性

。任何更新、重啟都意味著服務停機。

良好。可以逐個實例進行藍綠部署或滾動更新,實現無縫升級。

成本

服務器成本低。

服務器/資源成本較高,但換來了高可用性,是必要的投入。

🏗? Gateway 集群架構示意圖

標準的解決方案是為 Gateway 部署多個實例,然后在前端使用一個負載均衡器(Load Balancer)作為統一的流量入口。整個架構的流程如下所示:

flowchart TDInternet[Internet/外部流量] --> SLB[負載均衡器<br>SLB/ELB/F5/Nginx]subgraph GatewayCluster [Gateway 高可用集群]SLB --> G1[Gateway 實例 1<br>:9000]SLB --> G2[Gateway 實例 2<br>:9001]SLB --> G3[Gateway 實例 3<br>:9002]endG1 --> Discovery[服務注冊中心<br>Nacos/Eureka]G2 --> DiscoveryG3 --> Discoverysubgraph BusinessServiceCluster [業務服務集群]Discovery --> S1[業務服務 1<br>user-service]Discovery --> S2[業務服務 2<br>order-service]Discovery --> S3[業務服務 3<br>product-service]end

🔧 搭建 Gateway 集群的關鍵步驟

搭建一個高可用的 Gateway 集群并不復雜,主要涉及以下三個環節:

  1. 部署多個 Gateway 實例
    • 這是最簡單的一步。只需將相同的 Gateway 應用包部署到多臺服務器(或多個容器)上。
    • 每個實例的 application.yml 中的主要配置(如Nacos地址、路由規則)應該完全一致。
    • 每個實例的 server.port 可以相同(如果機器不同)也可以不同(如果在同一機器用不同端口,常用于本地測試)。
  1. 使用負載均衡器 (LB)
    • 這是集群的入口和關鍵。所有外部請求首先到達這個負載均衡器,再由它分發給后端的各個 Gateway 實例。
    • 選擇
      • 硬件負載均衡器:如 F5。
      • 云服務商提供的LB:這是最省事的方式,如 阿里云的 SLB騰訊云的 CLBAWS 的 ELB/ALB。它們本身通常就是高可用的。
      • 自建軟件LB:如 NginxHAProxy。你需要至少部署兩個Nginx節點并通過 Keepalived 實現VIP漂移,以避免Nginx本身成為單點。
  1. 共享配置與服務發現
    • 配置一致性:確保所有 Gateway 實例的路由、過濾器等配置完全相同。最佳實踐是使用配置中心(如 Nacos Config、Apollo),而不是將配置寫在每個應用的本地文件里。
    • 服務發現:所有 Gateway 實例和業務服務都需要注冊到同一個服務注冊中心(如 Nacos、Eureka)。這樣,任何一個 Gateway 實例都能準確地知道所有業務服務的網絡地址,從而正確地進行路由轉發。如上圖所示,這是Gateway集群能正確工作的基礎。

💡 集群下的注意事項

  • 分布式會話:如果你在 Gateway 上做了登錄鑒權等功能,需要將會話(Session)存儲到外部存儲(如 Redis)中,以實現會話共享。這樣用戶請求被轉發到集群內任何一個 Gateway 實例上時,都能識別其登錄狀態。
  • 限流器的作用域:如果你使用了基于Redis的分布式限流(如之前的 RequestRateLimiter),那么限流是集群級別的。例如,你設置了每秒10次請求,指的是整個集群所有實例加起來每秒處理10次,而不是每個實例10次。這正是你想要的效果。
  • 健康檢查:負載均衡器需要能夠對后端的 Gateway 實例進行健康檢查,自動將故障實例從服務列表中剔除,從而保證流量的可靠性。

💎 總結

單獨部署的 Gateway 必須做成集群,否則就有單點故障風險。

核心部署模式就是:負載均衡器 (LB) + 多個 Gateway 實例 + 統一的服務注冊與配置中心。

對于生產環境,強烈推薦使用云服務商的負載均衡服務,因為它們提供開箱即用的高可用性和強大的流量處理能力,可以讓你更專注于業務開發本身。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/95942.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/95942.shtml
英文地址,請注明出處:http://en.pswp.cn/web/95942.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機網絡:以太網中的數據傳輸

以太網中&#xff0c;數據的傳輸依賴于一系列標準化的技術規范&#xff0c;核心包括幀結構封裝、介質訪問控制機制和物理層編碼技術&#xff0c;具體如下&#xff1a; 1. 以“幀&#xff08;Frame&#xff09;”為基本傳輸單元 以太網在數據鏈路層將網絡層的數據包&#xff08;…

元器件--USB TypC接口

USB TypC接口下圖這些都是USB接口A口與B口的區別USB A口和B口最初由USB-IF在1996年引入。根據當時的USB協議&#xff0c;A口主要用于主設備&#xff08;如電腦&#xff09;&#xff0c;而B口則用于從設備&#xff08;如打印機和攝像頭&#xff09;。隨著USB-C接口的日益普及&am…

多線程之HardCodedTarget(type=OssFileClient, name=file, url=http://file)異常

多線程之HardCodedTarget(typeOssFileClient, namefile, urlhttp://file)異常 摘要&#xff1a; 文檔描述了多線程環境下調用Feign客戶端OssFileClient時出現的HardCodedTarget異常。異常發生在異步保存文件到ES時&#xff0c;Feign調用未返回預期結果而直接打印了客戶端對象。…

計算機視覺(十二):人工智能、機器學習與深度學習

人工智能 (AI)&#xff1a;宏大的目標 人工智能是最廣泛、最宏大的概念&#xff0c;它的目標是讓機器能夠模仿人類的智能行為&#xff0c;例如&#xff1a; 推理&#xff1a;像下棋程序一樣&#xff0c;通過邏輯來做決策。規劃&#xff1a;為實現一個目標而制定步驟&#xff0c…

容器元素的滾動條回到頂部

關閉再打開后&#xff0c;容器元素的滾動條回到頂部解決方法&#xff1a;1、通過打開開發者工具&#xff08;F12&#xff09;&#xff0c;找到滾動條所屬元素為 el-textarea__inner&#xff0c;其父類 class"el-textarea content"2、代碼&#xff0c;通過元素的方法 …

分布式專題——2 深入理解Redis線程模型

1 Redis 簡介 1.1 Redis 是什么&#xff1f; Redis 全稱 Remote Dictionary Server&#xff08;遠程字典服務&#xff09;&#xff0c;是一個開源的高性能 Key-Value 數據庫&#xff1b; 官網&#xff1a;Redis - The Real-time Data Platform&#xff1b; 引用官網上的?個…

simd學習

如何查看cpu是否支持simd&#xff1f;# 檢查特定指令集 grep -o avx2 /proc/cpuinfo | head -1 # 檢查AVX2 grep -o sse4 /proc/cpuinfo | head -1 # 檢查SSE4 grep -o avx512 /proc/cpuinfo | head -1 # 檢查AVX512gcc編譯選項&#xff0c;增加支持simd-mavx2 -D__AVX2__SS…

LabVIEW汽車發動機振動測試

以某型號四缸汽油發動機為測試對象&#xff0c;借助 LabVIEW 平臺與高精度數據采集硬件&#xff0c;開展發動機全工況振動測試。通過實時采集缸體、曲軸箱關鍵部位振動信號&#xff0c;分析振動特征與故障關聯&#xff0c;驗證發動機運行穩定性&#xff0c;為后期優化設計提供數…

android 四大組件—Service

啟動服務startService//啟動服務&#xff0c;通過類名 Intent intent new Intent(this, WiFiAutoLinkService.class); startService(intent); //通過字符串啟動 Intent intent new Intent(); intent.setAction("com.launcher.app"); intent.setPackage("com.l…

https + 域名 + 客戶端證書訪問模式

項目使用金融云部署&#xff0c;對外暴露IP訪問&#xff0c;因安全合規要求必須使用域名訪問&#xff0c;但公司又不提供域名。故&#xff0c;改為 https 域名 客戶端證書雙向認證 訪問模式&#xff0c;大大提升安全性。 1. 密鑰文件類型 .key、.csr、.cer&#xff08;或 .cr…

ICPC 2023 Nanjing R L 題 Elevator

[ProblemDiscription]\color{blue}{\texttt{[Problem Discription]}}[Problem Discription] 來源&#xff1a;洛谷。侵權則刪。 [Analysis]\color{blue}{\texttt{[Analysis]}}[Analysis] 貪心。優先運送樓層高的貨物&#xff0c;在能裝下的情況下盡量多裝。 因為運送貨物的代價…

81-dify案例分享-零代碼用 Dify 使用夢 AI 3.0 多模態模型,免費生成影視級視頻

1.前言 即夢AI作為字節跳動旗下的AI繪畫與視頻生成平臺&#xff0c;近年來不斷推出新的模型和功能&#xff0c;以提升用戶體驗和創作能力。 即夢AI 3.0是即夢AI的最新版本&#xff0c;于2025年4月發布&#xff0c;標志著其在中文生圖模型上的重大升級。該版本不僅在中文生圖能…

SQL 進階指南:視圖的創建與使用(視圖語法 / 作用 / 權限控制)

在 SQL 操作中&#xff0c;你是否遇到過 “頻繁查詢多表關聯的固定結果”“不想讓他人看到表中的敏感字段” 這類問題&#xff1f;比如 “每周都要查‘技術部員工的姓名、職位、薪資’”&#xff0c;每次都寫多表關聯語句很麻煩&#xff1b;又比如 “給實習生開放數據查詢權限&…

【全部更新完畢】2025數學建模國賽C題思路代碼文章高教社杯全國大學生數學建模-NIPT 的時點選擇與胎兒的異常判定

B題全部更新完畢 包含完整的文章全部問題的代碼、結果、圖表 完整內容請看文末最后的推廣群NIPT 的時點選擇與胎兒的異常判定 摘要 在問題一中&#xff0c;我們以無創產前檢測&#xff08;NIPT&#xff09;數據為研究對象&#xff0c;圍繞“胎兒 Y 染色體濃度”(記為 (V)) 隨孕…

Redis(43)Redis哨兵(Sentinel)是什么?

Redis Sentinel&#xff08;哨兵&#xff09;是一種用于管理 Redis 實例的高可用性解決方案。它提供了監控、通知和自動故障轉移等功能&#xff0c;確保 Redis 服務在發生故障時能夠自動恢復&#xff0c;提供高可用性和可靠性。以下是詳細介紹 Redis Sentinel 的功能及其代碼示…

蓓韻安禧DHA純植物藻油純凈安全零添加守護母嬰健康

在母嬰健康領域&#xff0c;選擇合適的營養補充品至關重要。純植物藻油DHA源自純凈藻類&#xff0c;有效規避了海洋重金屬污染的風險&#xff0c;確保安全無隱患。配方堅持零添加香精、色素和防腐劑&#xff0c;避免不必要的化學物質攝入&#xff0c;讓媽媽和寶寶更安心。同時&…

釘釘 AI 深度賦能制造業 LTC 全流程:以釘釘宜搭、Teambition 為例

制造業 LTC 流程痛點剖析?在制造業&#xff0c;線索到現金&#xff08;LTC&#xff0c;Lead to Cash&#xff09;的全流程包含從潛在客戶線索的發現、商機培育、銷售轉化、訂單執行到最終收款的一系列復雜環節。傳統制造業在這一流程中面臨諸多挑戰&#xff1a;客戶需求的多樣…

理解UE4中C++17的...符號及enable_if_t的用法及SFINAE思想

下面是一段C17的代碼&#xff1a;//函數1&#xff1a;template <typename... BufferTypes,std::enable_if_t<std::conjunction<CanAppendBufferType<std::decay_t<BufferTypes>>...>::value> * nullptr> inline explicit FCompositeBuffer(Buff…

安全419正式公布《甲方安全建設精品采購指南》案例首推運營商行業數據安全核心推薦廠商

在數字經濟加速滲透與《網絡數據安全管理條例》全面實施的雙重背景下&#xff0c;運營商作為數據要素流通的核心樞紐&#xff0c;其安全防護體系建設已成為數字基礎設施保障的關鍵環節。近日&#xff0c;安全 419 正式公布《甲方安全建設精品采購指南》&#xff0c;從近 300 個…

基礎詞根-匯總

ros rus粗糙 ris cos cus cis切lite文字 late面 側面ven 來 cess走/agdotect 覆蓋 covercele 聚集 加速 gre 聚集&#xff0c;accumu聚集gress 抵達 靠近&#xff0c;aggressive侵略性humor humir 大地 土地chron 時間 time&#xff0c;宇宙的宙lumi 光lightviv vil volun vot/…