從單體到微服務:Spring Cloud 開篇與微服務設計

一、單體架構的核心痛點與微服務化目標

1. 單體架構的致命缺陷

問題表現后果
可維護性差百萬行代碼耦合,修改一處需全量測試迭代周期長,創新停滯
擴展性受限無法按模塊獨立擴縮容(如訂單模塊需擴容時,用戶模塊被迫一起擴容)資源浪費30%+
技術固化全系統必須使用同一技術棧(如數據庫選型)新技術無法局部試點
部署風險高全量部署導致停機時間長,回滾困難業務中斷損失每分鐘數萬美元

2. 微服務化的設計目標

  • 自治性:每個服務獨立開發、部署、擴縮容
  • 技術異構:Java/Python/Go混合技術棧共存
  • 故障隔離:單個服務宕機不影響全局
  • 持續交付:按服務灰度發布,風險可控

關鍵決策:通過服務拆分實現目標,但需解決拆分后的新問題鏈。


二、微服務核心問題與組件設計

1. 服務動態尋址問題:注冊中心設計

  • 問題本質:服務實例動態伸縮時,調用方如何感知實時地址?
  • 組件設計
    • 服務注冊表:內存數據庫(如Consul的Raft協議、Nacos的Distro協議)存儲實例IP/狀態
    • 健康檢查:主動心跳探測(如Eureka的30s續約)剔除失效節點
    • 負載均衡:客戶端內置LB算法(Ribbon的輪詢/Random)避免單點故障
  • 運作流程
注冊實例
拉取實例列表
LB選擇實例
服務提供者
注冊中心
服務消費者

2. 跨服務事務一致性:分布式事務框架

  • 問題本質:訂單服務扣款成功,庫存服務扣減失敗時如何回滾?
  • 組件設計
    • Seata AT模式:基于SQL解析生成回滾日志(undo_log表),實現業務無侵入
    • 事務協調器(TC):全局事務調度中心(獨立部署)
    • 兩階段提交
// TM 發起全局事務
@GlobalTransactional
public void placeOrder() {orderService.create();  // 分支事務1storageService.deduct(); // 分支事務2
}
  • 數據最終一致性
    • 異步場景用RocketMQ事務消息(半消息+本地事務表)

3. 配置碎片化:統一配置中心

  • 問題本質:100個服務需修改同一數據庫連接參數時如何避免逐個重啟?
  • 組件設計
    • 配置倉庫:Git/S3存儲多環境配置(dev/test/prod)
    • 動態推送:長輪詢(Nacos 1s內生效)或WebSocket實時更新
    • 安全加密:集成Vault對敏感配置加密(如數據庫密碼)

4. 服務熔斷與降級:容錯中間件

  • 問題本質:A服務調用B服務超時,導致A服務線程池耗盡引發雪崩
  • 組件設計
    • 熔斷器模式
      • Hystrix:線程池隔離,失敗率>50%自動熔斷
      • Sentinel:QPS限流+冷啟動+熱點參數防護
    • 降級策略:返回兜底數據(如商品詳情頁庫存顯示“服務暫不可用”)

5. API網關:系統邊界守衛者

  • 問題本質:外部請求如何路由到內部服務?如何統一鑒權?
  • 組件設計
    • 路由映射:Path匹配服務ID(如 /order/**order-service
    • 過濾器鏈
      • 認證:JWT驗簽
      • 限流:令牌桶算法(1萬QPS以上需分布式Redis計數)
      • 日志:記錄請求鏈路ID
    • Spring Cloud Gateway:基于WebFlux的異步非阻塞模型,延遲<5ms

三、組件協同工作機制:一個訂單場景的閉環

1. 請求生命周期

在這里插入圖片描述

關鍵流程說明

  1. 認證與路由 (步驟1-6)
    • 網關通過Auth Service完成JWT認證
    • 從Registry動態獲取Order Service實例列表
    • 基于Round-Robin算法選擇實例
  2. 分布式事務管理 (步驟7-18)
a. 訂單服務開啟全局事務 → Seata TC生成全局XID
b. 調用賬戶服務 → 注冊分支事務 → 執行本地扣款
c. 調用庫存服務 → 注冊分支事務 → 執行庫存扣減
d. 兩階段提交:Phase1:TC發送prepare請求至所有分支Phase2:收到所有分支ACK后發送commit
  1. 異常處理場景:
    • 庫存服務宕機:
      在這里插入圖片描述
    • 網絡分區:
      • TC自動重試commit/rollback
      • 超時未響應分支進入人工干預隊列

組件協作矩陣

組件職責協作對象協議
Registry服務實例發現Gateway/ServiceHTTP長輪詢
Seata TC事務協調所有微服務gRPC
Auth Service身份驗證GatewayJWT+HMAC
Gateway流量入口Client/ServiceHTTP/2

2. 故障處理協同

  • 場景:庫存服務宕機
    • Seata TC:檢測分支事務失敗,通知訂單服務回滾
    • Sentinel:標記庫存服務不可用,后續請求直接降級
    • 注冊中心:將宕機實例從服務列表剔除
    • 配置中心:觸發告警通知運維人員

四、進階問題與創新設計

1. 分布式ID生成

  • 問題:分庫分表后如何避免ID沖突?
  • 方案
    • Snowflake算法:64位=時間戳+機器ID+序列號(支持每秒百萬ID)
    • 數據庫號段:Leaf-Segment模式(美團方案),預分配ID段減少DB壓力

2. 數據同步與一致性

  • 方案對比
場景技術選型原理
實時一致性Seata AT模式全局鎖+回滾日志
最終一致性RocketMQ事務消息半消息+本地事務表+重試隊列
跨庫查詢Canal+ElasticsearchMySQL Binlog同步到ES

3. 服務網格化(Service Mesh)

  • 演進邏輯:將熔斷/限流等能力從應用層下沉至基礎設施層
    • 傳統模式:Hystrix代碼侵入業務邏輯
    • 服務網格:Sidecar代理(如Istio Envoy)自動注入流量控制規則
    • 價值:業務代碼純度提升70%,運維復雜度降低

五、框架設計總結:平衡的藝術

維度單體架構微服務原始態SpringCloud解決方案
復雜度代碼耦合網絡調用復雜注冊中心+標準化契約
一致性本地ACID無跨服務事務Seata/RocketMQ事務消息
部署效率全量部署耗時手動管理100+實例配置中心+DevOps流水線
技術成本低但僵化高且重復造輪子開源組件標準化集成

核心結論:
SpringCloud的本質是通過標準化組件解決分布式系統的共性難題:

  1. 注冊中心 → 動態拓撲管理
  2. 配置中心 → 環境一致性
  3. Seata → 跨服務事務原子性
  4. Gateway+Sentinel → 流量安全

其成功關鍵在于不重復發明輪子,而是整合Netflix/Alibaba等成熟方案,通過Spring Boot標準化交付。未來演進將聚焦服務網格融合和Serverless適配,持續降低分布式系統復雜度。

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

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

相關文章

篇二 OSI七層模型,TCP/IP四層模型,路由器與交換機原理

一 前言 本章節主要介紹OSI七層模型&#xff0c;TCP/IP四層模型劃分&#xff0c;以及日常使用的路由器&#xff0c;交換機的一些基礎知識 二 OSI 七層 OSI&#xff08;Open Systems Interconnection Model&#xff09;即開放式系統互聯模型&#xff0c;是國際標準化組織提出的&…

【JavaSE面試篇】Java集合部分高頻八股匯總

目錄 概念 1. 說說Java中的集合&#xff1f; 2. Java中的線程安全的集合有什么&#xff1f; 3. Collections和Collection的區別&#xff1f; 4. 集合遍歷的方法有哪些&#xff1f; List 5. 講一下java里面list的幾種實現&#xff0c;幾種實現有什么不同&#xff1f; 6.…

利用低空無人機影像進行樹種實例分割

在本項先導研究中,我們開發了一個基于低空無人機影像的本地樹種機器學習實例分割模型,用于生態調查。該實例分割包括單株樹冠的描繪和樹種的分類。我們利用無人機影像對20個樹種及其對應的學名進行了訓練,并收集了這些樹種的學名用于機器學習。為了評估該機器學習模型的準確…

二、Flutter基礎

目錄1. 什么是Widget&#xff1f;Flutter中的Widget分為哪幾類&#xff1f;2. StatelessWidget和StatefulWidget的區別3. StatefulWidget生命周期4. 什么是BuildContext&#xff1f;5. 如何優化Widget重建&#xff1f;6. Flutter布局機制7. Row/Column的主軸和交叉軸8. Expande…

設計模式筆記_創建型_建造者模式

1. 建造者模式介紹 建造者模式是一種創建型設計模式&#xff0c;旨在通過將復雜對象的構建過程與其表示分離&#xff0c;使得同樣的構建過程可以創建不同的表示。它通常用于構造步驟固定但具體實現可能變化的對象。 1.1 功能&#xff1a; 封裝復雜對象的創建過程&#xff1a;適…

【ROS2 自動駕駛學習】03-ROS2常用命令

目錄 1. ros2 pkg list 2. ros2 node list 3. ros2 node info 節點名稱 4. ros2 topic list 5. ros2 topic info 話題名 6. ros2 topic type 話題名 7. ros2 topic find 消息類型 8. ros2 service list 9. ros2 service type 服務名稱 10. ros2 service find 服…

MyBatis-Plus:提升數據庫操作效率的利器

在Java開發中&#xff0c;MyBatis是一個非常流行的持久層框架&#xff0c;它簡化了數據庫操作&#xff0c;提供了靈活的SQL映射功能。然而&#xff0c;隨著項目規模的擴大和業務復雜度的增加&#xff0c;開發者需要更高效、更便捷的方式來處理數據庫操作。MyBatis-Plus應運而生…

App爬蟲實戰篇-以華為真機手機爬取集換社的app為例

前言 在開始學習這篇文章之前,建議你先按照之前2篇文章(App爬蟲工具篇-Appium安裝和App爬蟲工具篇-appium配置),配置必要的環境,才可以繼續完成本章節內容。 電腦連接手機 可以通過usb連接電腦。如果通過adb devices命令,發現沒有連接上,就需要手動配置一些信息 華為…

Vue3組合式API應用:狀態共享與邏輯復用最佳實踐

Vue3組合式API應用&#xff1a;狀態共享與邏輯復用最佳實踐 在Vue3中&#xff0c;組合式API的引入為我們提供了一種全新的方式來編寫Vue組件&#xff0c;并有效地解決了混入和繁瑣邏輯復用的問題。本文將為您介紹如何在Vue3中使用組合式API來實現狀態共享與邏輯復用的最佳實踐&…

在linux 上使用tcpdump監聽http 端口的報文并分析

這里寫目錄標題 1. 使用 tcpdump(原始報文捕獲)觀察:報文翻譯與分析(按行解釋)第一段:客戶端請求報文HTTP 請求頭JSON 請求體第二段:服務器響應報文HTTP 響應頭響應體關鍵問題分析在 Linux 上監聽 HTTP 端口的報文,有多種工具可以實現。以下是幾種常用方法的詳細說明:…

XSStrike 進行 XSS 漏洞測試

XSStrike 是一個功能強大的 XSS 漏洞測試工具&#xff0c;專為檢測、驗證和利用反射型、存儲型、DOM型 XSS 漏洞而設計&#xff0c;適合配合手工測試&#xff0c;也可用于自動化發現。 &#x1f6e0;? 1. 安裝 XSStrike 確保系統中有 Python3 和 git&#xff1a; git clone ht…

any實現(基于LLVM中libcxx實現分析)

本文根據LLVM中libcxx的實現&#xff0c;分析了std::any和std::variant的具體實現。 1 簡介 在 C17 標準中&#xff0c;std::any提供了一種類型安全的方式來存儲任意類型的值。它使用類型擦除&#xff08;type erasure&#xff09;技術實現&#xff0c;使得一個對象可以包含任…

網安系列【13】之滲透測試:前期信息收集

文章目錄 前期信息收集信息收集的分類信息收集的內容域名信息收集Whois備案信息whois反查SSL證書查詢域名收集工具IP收集CDN信息收集CDN判斷CDN繞過 端口信息收集常見端口介紹FTP-21SSH-22WWW-80NetBlOSSessionService-139/445MySQL-3306RDP-3389Redis-6379Tomcat-8080 端口掃描…

自動駕駛傳感器的標定與數據融合

目錄 IMU的標定 相機的標定 激光雷達和組合慣導標定 相機和激光雷達標定 傳感器數據融合 多傳感器融合數據處理 傳感器數據融合算法 環境感知與預測 應用實例——車道線識別 應用實例——車輛行人識別 應用實例——交通標志識別 定位系統 基于慣性導航儀的定位技術…

27.移除元素(快慢指針)

給你一個數組 nums 和一個值 val&#xff0c;你需要 原地 移除所有數值等于 val 的元素。元素的順序可能發生改變。然后返回 nums 中與 val 不同的元素的數量。 假設 nums 中不等于 val 的元素數量為 k&#xff0c;要通過此題&#xff0c;您需要執行以下操作&#xff1a; 更改…

Spring AI:ETL Pipeline

提取、轉換和加載&#xff08;ETL&#xff09;框架是檢索增強生成&#xff08;RAG&#xff09;用例中數據處理的支柱。ETL管道協調從原始數據源到結構化向量存儲的流程&#xff0c;確保數據以最佳格式供AI模型檢索。RAG用例是文本&#xff0c;通過從數據體中檢索相關信息來增強…

26.安卓逆向2-frida hook技術-解密響應

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 內容參考于&#xff1a;圖靈Python學院 工具下載&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取碼&#xff1…

人工智能與人工智障———仙盟創夢IDE

<!-- 桌面導航 -->&#x3C;nav class&#x22;hidden md:flex items-center space-x-8&#x22;&#x3E;&#x3C;a href&#x22;#home&#x22; class&#x22;nav-link text-gray-700 hover:text-primary font-medium&#x22;&#x3E;&#x9996;&…

車載通信架構 --- 以太網相關網絡安全

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

行業實踐案例:金融行業數據治理體系全景解析

“金融行業是數據治理的試金石。” ——高密度數據、高合規要求、高業務依賴,決定了金融治理的復雜度和先進性。 ?? 本文目錄 為什么金融行業對數據治理要求高? 金融行業數據治理的獨特挑戰 金融行業治理框架搭建實踐 典型治理能力案例詳解 工具與平臺選型經驗 總結與啟示 …