基于黑馬教程——微服務架構解析(二):雪崩防護+分布式事務

之前的兩篇文章我們介紹了微服務的基礎概念及其服務間通信機制。本篇將深入探討微服務的核心保障:服務保護與分布式事務

一、微服務保護

在這里插入圖片描述

問題描述:

在一個購物車的微服務中,倘若某一項服務(服務A)同一時刻訪問的數據十分龐大,但是購物車服務Tomcat的線程數據是有限的,這會導致整個購物車服務崩潰。倘若這個購物車服務又和別的微服務進行關聯,這樣一級連一級,最終可能導致整個微服務網絡的崩潰,也被稱做“雪崩”。

解決方法:

服務保護的方案有很多,最典型這幾種:

  • 請求限流
  • 線程隔離
  • 服務熔斷

這些方法都不用我們親自一一實現,已經有一個組件把這些集成了起來,因此我們只需要學習這個組件就行了——Sentinel

1.1 Sentinel

Sentinel 是阿里巴巴開源的一款 輕量級流量控制、熔斷降級和系統保護組件,專注于解決微服務架構中的 高可用性、穩定性 問題。它提供實時的監控和動態規則配置,幫助開發者保障服務在 高并發、依賴故障、突發流量 等場景下的穩定性。

核心功能:

  • 流量控制(Flow Control):精準控制QPS、并發線程數,防止系統過載。
  • 熔斷降級(Circuit Breaking):自動檢測異常比例/響應時間,觸發熔斷保護。
  • 系統自適應保護(System Adaptive Protection):智能調整入口流量,保護系統不被壓垮。
  • 實時監控(Real-time Monitoring):可視化查看接口調用情況、限流熔斷數據。

在這里插入圖片描述

1.2 請求限流

核心作用:通過精準控制單位時間內的請求量,防止突發流量導致系統過載崩潰。

在這里插入圖片描述

實現原理

  • 設定QPS(每秒查詢量)或并發線程數閾值
  • 超出閾值的請求將被立即拒絕或排隊等待
  • 支持多種算法:固定窗口、滑動窗口、漏桶、令牌桶等

典型應用場景

  • 秒殺系統的高峰期流量控制
  • API網關的全局流量管控
  • 核心業務接口的訪問保護

1.3 線程隔離

核心機制:通過為每個微服務子服務分配獨立的執行線程池,實現故障隔離。

關鍵優勢

  1. 資源隔離:單個子服務的線程池耗盡不會影響其他服務
  2. 故障隔離:崩潰的線程僅影響當前服務實例
  3. 彈性伸縮:可根據服務重要性動態調整線程池大小

實現方式對比

隔離策略實現方式適用場景資源消耗
線程池隔離每個服務獨立線程池耗時較長的同步調用較高
信號量隔離計數器控制并發數輕量級快速調用較低

最佳實踐

  • 關鍵服務配置更大的線程池
  • 配合熔斷機制實現雙重保護
  • 通過監控實時調整線程池參數

補充說明

雖然線程隔離能有效防止級聯故障,但仍需配合熔斷機制使用。當某服務線程池完全耗盡時,熔斷器可以快速失敗并啟動降級策略,避免請求堆積。

1.4 服務熔斷

當系統檢測到某個子服務即將崩潰(如響應時間飆升、錯誤率激增)時,直接阻斷對該服務的所有請求,并快速返回一個預設的備選結果(Fallback),從而避免級聯故障。

所以,我們要做兩件事情:

  • 編寫服務降級邏輯:就是服務調用失敗后的處理邏輯,根據業務場景,可以拋出異常,也可以返回友好提示或默認數據。
  • 異常統計和熔斷:統計服務提供方的異常比例,當比例過高表明該接口會影響到其它服務,應該拒絕調用該接口,而是直接走降級邏輯。

三者對比

保護策略核心機制主要作用觸發條件實現方式適用場景代表框架
請求限流控制單位時間請求量防止突發流量壓垮系統QPS或并發數超過閾值- 計數器算法 - 漏桶/令牌桶算法- 秒殺系統 - API網關限流Sentinel、Redis RateLimit
線程隔離資源隔離(線程池/信號量)避免單個服務耗盡所有線程資源線程池滿/信號量耗盡- 獨立線程池 - 信號量計數- 同步阻塞調用 - 耗時操作隔離Hystrix、Sentinel
服務熔斷快速失敗+自動恢復防止級聯故障,提升系統可用性錯誤率/慢調用比例超過閾值- 熔斷器狀態機(開/半開/關) - 降級策略- 弱依賴服務 - 第三方接口調用Sentinel、Resilience4j

二、分布式事務

在這里插入圖片描述

在分布式系統中,一個業務執行需要多個微服務共同參與。以圖中為例,整個業務為購買商品事務,交易服務、購物車服務和庫存服務為分支事務。在單體項目中,很容易滿足事務ACID原則,但是在分布式如何滿足?

2.1 Seata

核心定位:阿里巴巴開源的 一站式分布式事務解決方案,提供 AT、TCC、Saga、XA 多種模式,解決微服務架構下的數據一致性問題。

Seata的事務管理中有三個重要的角色:

  • TC (Transaction Coordinator) - 事務協調者:維護全局和分支事務的狀態,協調全局事務提交或回滾。
  • TM (Transaction Manager) - 事務管理器:定義全局事務的范圍、開始全局事務、提交或回滾全局事務。
  • RM (Resource Manager) - 資源管理器:管理分支事務,與TC交談以注冊分支事務和報告分支事務的狀態,并驅動分支事務提交或回滾。
    在這里插入圖片描述

TM 就是全局事務的管理者,由這個決定什么時候開啟事務,什么時候提交和回滾事務,RM 就是針對自己的分支事務進行匯報,分支事務的回滾和提交。TC 其實就先相當于一個中間人, 監控所有RM 狀態匯報給到TM,然后什么操作有TM決定

而TC服務則是事務協調中心,是一個獨立的微服務,需要單獨部署

2.2 Seata的XA模型

在這里插入圖片描述

RM一階段的工作:

  1. 注冊分支事務到TC
  2. 執行分支業務sql但不提交
  3. 報告執行狀態到TC

TC二階段的工作:

  1. TC檢測各分支事務執行狀態
  2. 如果都成功,通知所有RM提交事務
  3. 如果有失敗,通知所有RM回滾事務

RM二階段的工作:

  • 接收TC指令,提交或回滾事務

2.3 Seata的AT模型

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

階段一RM的工作:

  • 注冊分支事務
  • 記錄undo-log(數據快照)
  • 執行業務sql并提交
  • 報告事務狀態

階段二提交時RM的工作:

  • 刪除undo-log即可

階段二回滾時RM的工作:

  • 根據undo-log恢復數據到更新前

2.4 兩個模型之間的區別

對比維度AT模型(自動補償)XA模型(兩階段提交)
一致性最終一致性(存在短暫中間狀態)強一致性(全程數據鎖定)
性能????(一階段已提交,無阻塞)??(同步阻塞,資源長時間鎖定)
侵入性低侵入(無需改造業務代碼)低侵入(依賴數據庫原生XA協議)
實現復雜度簡單(自動生成反向SQL)中等(需數據庫支持XA)
鎖范圍全局行鎖(僅二階段沖突檢測時短暫加鎖)全程行鎖(Prepare階段即鎖定)
補償機制自動生成undo_log反向SQL依賴數據庫回滾(無自動補償)
適用場景高并發OLTP場景(如電商、庫存)傳統金融系統(如銀行核心賬務)
數據庫支持支持主流關系型數據庫(MySQL/Oracle等)需數據庫明確支持XA協議(如MySQL InnoDB)
故障恢復依賴undo_log恢復(需保證日志可靠)依賴數據庫日志恢復
典型框架Seata默認模式Seata XA模式、傳統JTA

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

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

相關文章

LeetCode: 429 N叉樹的層序遍歷

題目描述給定一個 N 叉樹,返回其節點值的層序遍歷(即從左到右,逐層訪問每一層的所有節點)。示例輸入格式(層序序列化):輸入示意:1/ | \3 2 4/ \5 6輸出:[[1], [3,2,4…

使用phpstudy極簡快速安裝mysql

使用 phpStudy 極簡快速安裝 MySQL 的完整指南: 一、phpStudy 簡介 phpStudy 是一款 Windows 平臺下的 PHP 環境集成包,包含: Apache/Nginx PHP 5.x-7.x MySQL 5.5-8.0 phpMyAdmin 二、安裝步驟 1. 下載安裝包 訪問官網下載&#xf…

git lfs使用

apt install git lfs 或者下載二進制文件加到環境變量 https://github.com/git-lfs/git-lfs/releases git lfs install git lfs clone huggingface文件路徑 如果訪問不了hugggingface.co用hf-mirror.com替代,國內下載速度還是挺快的 先按照pip install modelscope m…

6、CentOS 9 安裝 Docker

🐳 CentOS 9 安裝 Docker 最全圖文教程(含鏡像源優化與常見問題解決)標簽:CentOS 9、Docker、容器技術、開發環境、國內鏡像源 適合讀者:后端開發、運維工程師、Linux 初學者📌 前言 在 CentOS 9 上安裝 Do…

SystemV消息隊列揭秘:原理與實戰

目錄 一、消息隊列的基本原理 1、基本概念 2、基本原理 3、消息類型的關鍵作用 4、重要特性總結 5、生命周期管理 6、典型應用場景 二、System V 消息隊列的內核數據結構 1、消息隊列的管理結構 msqid_ds(消息隊列標識符結構) 關鍵字段解析 2…

5 分鐘上手 Firecrawl

文章目錄Firecrawl 是什么?本地部署驗證mcp安裝palyground🔥 5 分鐘上手 FirecrawlFirecrawl 是什么? 一句話: 開源版的 “最強網頁爬蟲 清洗引擎” ? 自動把任意網頁 → 結構化 Markdown / JSON ? 支持遞歸整站抓取、JS 渲染…

算法訓練營day31 貪心算法⑤56. 合并區間、738.單調遞增的數字 、968.監控二叉樹

貪心算法的最后一篇博客!前面兩道題都是比較簡單的思路,重點理解一下最后一道題即可。有一說一,進入到貪心算法這一章節之后,我的博客里和代碼注釋里的內容明顯少了很多,因為很多貪心的題目我覺得不需要很復雜的文字說…

Jenkins流水線部署+webhook2.0

文章目錄1. 環境2. 用到的插件3. 流水線部署腳本1. 環境 Centos7Jenkins2.5.0JDKopen17阿里云倉庫 注意:這個版本兼容需要特別注意,要不然會很麻煩 2. 用到的插件 Generic Webhook Trigger 3. 流水線部署腳本 兼容鉤子部署(webhook&…

IDM下載失敗排查

網絡連接問題排查檢查網絡連接是否穩定,確保能夠正常訪問互聯網 測試其他下載工具或瀏覽器是否能夠正常下載 嘗試關閉防火墻或殺毒軟件,排除安全軟件攔截的可能性代理和VPN設置檢查確認IDM的代理設置是否正確,是否與系統代理一致 檢查是否使用…

Anaconda安裝時的幾個操作

一、安裝Anaconda 其實Anaconda的安裝比較簡單,點擊next就好了。在安裝中需要注意以下兩點: 1、選擇安裝路徑 在安裝時,路徑最好選擇非C盤,且路徑中不要出現中文,以免后期運行代碼時出現不必要的錯誤。 我安裝時&…

網易易盾、騰訊ACE等主流10款游戲反外掛系統對比

本文將深入對比10款游戲反外掛系統:1.網易易盾;2.Ricochet Anti?Cheat;3.BattlEye;4.幾維安全手游智能反外掛系統;5.伏魔AI反外掛;6.Riot Vanguard;7.Xigncode3;8.盛大GPK&#xff…

wpa_supplicant-2.10交叉編譯

參考文章:https://blog.csdn.net/weixin_45783574/article/details/145810790 1、Openssl交叉編譯 1.1 下載openssl-1.1.1t.tar.gz 下載網址: https://openssl-library.org/source/old/1.1.1/index.html1.2 編譯 sudo tar xvf openssl-1.1.1t.tar.gz cd openssl-1.1

源碼解讀SpringCloudAlibaba Nacos2.x

Nacos 服務注冊 Nacos 服務注冊時,客戶端會將自己的信息注冊到Nicosserver上,形成key-value組合,其中key通常是服務名稱,value是實例地址信息。在二點X版本中,客戶端通過Spring Boot的擴展機制(例如web_initialized事件…

Windows 11 下 Anaconda 命令修復指南及常見問題解決

Windows 11 下 Anaconda 命令修復指南及常見問題解決 在使用 Anaconda 過程中,可能會遇到環境損壞、更新失敗、包依賴沖突等問題。本文整理了一套通過命令行修復 Anaconda 的完整方案,適用于 Windows 11 系統,同時補充了權威參考鏈接供深入學…

安寶特案例丨全球連線!安寶特Vuzix與RodsCones共筑實時手術教育平臺

安寶特Vuzix與合作伙伴Rods&Cones協作,為Rocamed在布拉格UROSANIT診所舉辦的創新型實時手術直播研討會提供技術賦能。 本次直播通過合作伙伴Rods&Cones軟件平臺搭載安寶特Vuzix智能眼鏡,成功連接來自9國、3大洲、6個時區的27位醫生,…

【Spring Boot 快速開發】一、入門

目錄Spring Boot 簡介Web 入門Spring Boot 快速入門HTTP 協議概述請求協議響應協議解析協議TomcatSpring Boot 簡介 Spring Boot 是由 Pivotal 團隊(后被 VMware 收購)開發的基于 Spring 框架的開源項目,于 2014 年首次發布。其核心目標是簡…

laravel chunkById導出數據亂序問題

2025年7月28日17:47:29 這幾天在做數據導出優化,使用xlswriter作為導出組件,但是發現在 使用 $base->chunkById(2000, function ($list) use ($writer, $sheet1) { 發現導出的數據是亂的,偶爾有些重復,偶爾有些少了&#xff0c…

Spring IOC與DI

spring的兩大思想:IOC與AOP一、ioc的概念什么叫控制翻轉?之前:對象的使用方,創建對象,對象的控制權,在對象的使用方手中.spring:對象的控制權交給了spring.舉個例子:智能駕駛,之前車的使用權在人手中,而現在在ai手中,這就是控制反轉.什么叫ioc:之前車企生產車需要做整個車,費事…

【圖像處理基石】Segment Anything Model (SAM) 調研

Segment Anything Model (SAM) 是由 Meta AI 開發的革命性圖像分割模型,它能夠對圖像中的任何物體進行分割,無需針對特定類別進行訓練。SAM 具有以下特點: 通用性:可以分割任何視覺對象,無論是否見過該類別 靈活性:支持多種輸入提示(點、框、掩碼或文本) 實時性:在普通…

unisS5800XP-G交換機配置命令之端口篇

一、批量配置端口(1) 進入系統視圖。system-view(2) 指定接口范圍&#xff0c;并進入接口批量配置視圖。¡ 指定一個不帶別名的接口列表。interface range { interface-type interface-number [ to interface-type interface-number ] } &<1-24>¡…