SpringCloud入門實戰(zhàn)-分布式事務框架Seata簡介

?? 《SpringCloud入門實戰(zhàn)系列》解鎖SpringCloud主流組件入門應用及關鍵特性偎捎。帶你了解SpringCloud主流組件,是如何一戰(zhàn)解決微服務諸多難題的疚顷。
?? 作者:一只IT攻城獅蔓纠。關注我厦幅,不迷路。
?? 再小的收獲x365天都會成就不一樣的自己,一起學習,一起進步缰犁。

我們先來回顧下事務和分布式事務是什么?然后我們面臨哪些分布式事務問題,如何解決帅容?帶著問題我們一起向下學習颇象。

一、分布式事務

1并徘、我們先回顧下事務

事務是指數(shù)據(jù)庫中的一組操作遣钳,這些操作要么全部成功執(zhí)行,要么全部回滾饮亏,以保持數(shù)據(jù)的一致性和完整性耍贾。事務具有以下四個特性,通常稱為ACID特性:

  • 原子性(Atomicity):事務中的所有操作要么全部執(zhí)行成功路幸,要么全部失敗回滾荐开,沒有中間狀態(tài)。
  • 一致性(Consistency):事務的執(zhí)行使數(shù)據(jù)庫從一個一致性狀態(tài)轉移到另一個一致性狀態(tài)简肴。事務在開始和結束時晃听,數(shù)據(jù)庫必須滿足預定義的一致性規(guī)則。
  • 隔離性(Isolation):事務的執(zhí)行應該與其他并發(fā)執(zhí)行的事務相互隔離砰识,每個事務都感覺不到其他事務的存在能扒。
  • 持久性(Durability):一旦事務提交,其對數(shù)據(jù)庫的修改應該是永久性的辫狼,即使在系統(tǒng)故障的情況下也不應丟失初斑。

本地事務:Spring本地事務使用@Transactional 大多數(shù)場景下,我們的應用都只需要操作單一的數(shù)據(jù)庫膨处,這種情況下的事務被稱之為本地事務(Local Transaction)见秤。本地事務的ACID特性是數(shù)據(jù)庫直接提供支持。

分布式事務(Distributed Transaction)是指跨越多個分布式系統(tǒng)的事務真椿,其中涉及到多個獨立的參與者和資源鹃答。分布式事務需要確保多個參與者之間的操作的一致性和原子性。

2突硝、分布式事務問題

如圖测摔,用戶購買商品的業(yè)務邏輯。整個業(yè)務邏輯由3個微服務提供支持:

  • 倉儲服務(Stock):對給定的商品扣除倉儲數(shù)量解恰。
  • 訂單服務(Order):根據(jù)采購需求創(chuàng)建訂單锋八。
  • 賬戶服務(Account):從用戶賬戶中扣除余額。

單體應用被拆分成微服務應用护盈,原來的三個模塊被拆分為三個獨立的應用查库,分別使用三個獨立的數(shù)據(jù)源。
業(yè)務操作需要調用三個服務來完成黄琼,此時每個服務內(nèi)部的數(shù)據(jù)一致性由本地事務來保證,但是全局的數(shù)據(jù)一致性問題沒法保證。
故一次業(yè)務操作需要跨多個數(shù)據(jù)源或者需要跨多個系統(tǒng)進行遠程調用脏款,就會產(chǎn)生分布式事務問題围苫。

由于網(wǎng)絡延遲、節(jié)點故障撤师、通信失敗等原因剂府,導致分布式事務無法像單個系統(tǒng)的事務那樣簡單地實現(xiàn)ACID特性。

常見的分布式事務問題包括

  • 部分失斕甓堋:在一個分布式事務中腺占,有些參與者執(zhí)行成功,而其他參與者執(zhí)行失敗痒谴,導致事務的部分操作成功衰伯,部分操作失敗。
  • 數(shù)據(jù)不一致:在一個分布式事務中积蔚,數(shù)據(jù)的一致性無法保證意鲸,可能因為參與者之間的數(shù)據(jù)沖突或者數(shù)據(jù)同步延遲。

3尽爆、一般事務的解決方案為什么不能作用于分布式事務怎顾?

解決一般事務問題的方法,例如使用數(shù)據(jù)庫的ACID特性漱贱、鎖機制槐雾、回滾和恢復機制等,無法直接應用于分布式事務問題幅狮,原因如下:

  • 并發(fā)控制問題:在分布式環(huán)境中募强,由于多個事務同時執(zhí)行,并發(fā)控制變得更加復雜彪笼。傳統(tǒng)的鎖機制在分布式環(huán)境中無法有效地協(xié)調多個參與者之間的并發(fā)訪問钻注。
  • 通信故障:分布式事務中的參與者之間通過網(wǎng)絡進行通信,網(wǎng)絡延遲配猫、斷開連接或消息丟失可能導致事務協(xié)調失敗或超時幅恋。
  • 參與者故障:在分布式系統(tǒng)中,參與者可能由于硬件故障泵肄、軟件錯誤或其他原因而崩潰或無響應捆交。這可能導致事務無法完成或導致數(shù)據(jù)不一致。
  • 同步問題:在分布式環(huán)境中腐巢,數(shù)據(jù)的復制和同步可能存在延遲品追,導致不同參與者之間的數(shù)據(jù)不一致。
  • 跨越多個系統(tǒng):分布式事務涉及跨越多個獨立的系統(tǒng)冯丙,每個系統(tǒng)可能具有不同的事務管理機制和數(shù)據(jù)存儲方式肉瓦,這增加了事務管理的復雜性。

二、分布式事務解決方案

這里先簡單提及一下常見的分布式事務解決方案

  • seata阿里分布式事務框架
  • 消息隊列
  • saga
  • XA

這四種常見的分布式事務解決方案泞莉,分別對應著分布式事務的四種模式:AT哪雕、TCC、Saga鲫趁、XA斯嚎;

四種分布式事務模式,都有各自的理論基礎挨厚,分別在不同的時間被提出堡僻;每種模式都有他的適用場景,同樣每個模式也都誕生有各自的代表產(chǎn)品疫剃,而這些代表產(chǎn)品钉疫,可能就是我們常見的(全局事務、基于可靠消息慌申、最大努力通知陌选、TCC)

分布式事務相關的協(xié)議有2PC蹄溉、3PC咨油。由于三階段提交協(xié)議3PC非常難實現(xiàn),目前市面主流的分布式事務解決方案都是2PC協(xié)議柒爵。兩階段提交協(xié)議顧名思義役电,分為兩個階段:Prepare和Commit。

TCC(Try-Confirm-Cancel)實際上是服務化的兩階段提交協(xié)議棉胀。

三法瑟、分布式事務框架Seata

1、Seata是什么

【Seata官網(wǎng)

Seata(Simple Extensible Autonomous Transaction Architecture)是一款開源的分布式事務解決方案唁奢,致力于提供高性能和簡單易用的分布式事務服務霎挟。Seata 將為用戶提供了 ATTCC麻掸、SAGAXA四種事務模式酥夭,為用戶打造一站式的分布式解決方案,包括事務管理脊奋、本地事務協(xié)調熬北、分布式事務日志和分布式鎖等組件。

Seata通過使用分布式事務日志和分布式鎖來保證事務的一致性和可靠性诚隙。分布式事務日志記錄全局事務的操作日志讶隐,并提供了事務的恢復和回滾能力。分布式鎖用于保護全局事務在不同參與者之間的并發(fā)訪問久又,確保數(shù)據(jù)的一致性和正確性巫延。

2效五、Seata整體架構

一個典型的分布式事務過程分為一ID(全局事務id)+三組件模型。

  • TC (Transaction Coordinator) - 事務協(xié)調者
    維護全局和分支事務的狀態(tài)烈评,驅動全局事務提交或回滾火俄。

  • TM (Transaction Manager) - 事務管理器
    定義全局事務的范圍:開始全局事務、提交或回滾全局事務讲冠。

  • RM (Resource Manager) - 資源管理器
    管理分支事務處理的資源,與TC交談以注冊分支事務和報告分支事務的狀態(tài)适瓦,并驅動分支事務提交或回滾竿开。


Seata的整體架構如上圖,分TC玻熙、TM和RM三個角色否彩,TC(Server端)為單獨服務端部署,負責維護分布式事務的運行狀態(tài)嗦随,TM和RM(Client端)由業(yè)務系統(tǒng)集成列荔,TM是一個分布式事務的發(fā)起者和終結者,而RM則負責本地事務的運行并上報枚尼。

一個典型的事務過程

1贴浙、TM向TC申請開啟一個全局事務 ,全局事務創(chuàng)建成功并生成一個全局唯一的XID;

2署恍、XID在微服務調用鏈路的上下文中傳播崎溃;

3、RM向TC注冊分支事務盯质,將其納入XID對應全局事務的管轄袁串;

4、TM向TC發(fā)起針對XID的全局提交或回滾決議呼巷;

5囱修、TC調度XID下管轄的全部分支事務完成提交或回滾請求;

3王悍、Seata支持的配置中心

Seata是一個分布式事務破镰,seata服務端也是一個微服務,需要和其他微服務一樣需要注冊中心和配置中心配名。

Seata支持的配置中心 Seata支持的注冊中心
nacos
consul
apollo
etcd
zookeeper
file (讀本地文件, 包含conf啤咽、properties、yml配置文件的支持)
eureka
consul
nacos
etcd
zookeeper
sofa
redis
file (直連)

4渠脉、事務信息存儲配置

Server 端存儲模式(store.mode)支持三種方式:

存儲模式 初始化 說明
file 單機模式(默認為此模式) 無需改動宇整,直接啟動 全局事務會話信息存儲在內(nèi)存中,讀寫并持久化至本地文件 root.data (bin\sessionStore\root.data) 中芋膘,性能較高
db高可用模式(Mysql 5.7+) 1. 初始DB:seata/script/server/db/mysql.sql
2. 修改存儲模式:store.mode=“db”
3. 修改存儲數(shù)據(jù)源:store.db相關屬性
全局事務會話信息通過db共享鳞青,相應性能差些
redis (Seata-Server 1.3及以上版本支持) 1. 修改存儲模式:store.mode=“redis”
2. 修改存儲數(shù)據(jù)源:store.redis相關屬性
性能較高霸饲,存在事務信息丟失風險,需提前配置合適當前場景的redis持久化配置
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市臂拓,隨后出現(xiàn)的幾起案子厚脉,更是在濱河造成了極大的恐慌,老刑警劉巖胶惰,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件傻工,死亡現(xiàn)場離奇詭異,居然都是意外死亡孵滞,警方通過查閱死者的電腦和手機中捆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坊饶,“玉大人泄伪,你說我怎么就攤上這事∧浼叮” “怎么了蟋滴?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長痘绎。 經(jīng)常有香客問我津函,道長,這世上最難降的妖魔是什么简逮? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任球散,我火速辦了婚禮,結果婚禮上散庶,老公的妹妹穿的比我還像新娘蕉堰。我一直安慰自己,他們只是感情好悲龟,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布屋讶。 她就那樣靜靜地躺著,像睡著了一般须教。 火紅的嫁衣襯著肌膚如雪皿渗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天轻腺,我揣著相機與錄音乐疆,去河邊找鬼。 笑死贬养,一個胖子當著我的面吹牛挤土,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播误算,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼仰美,長吁一口氣:“原來是場噩夢啊……” “哼迷殿!你這毒婦竟也來了?” 一聲冷哼從身側響起咖杂,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤庆寺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后诉字,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體懦尝,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年奏窑,在試婚紗的時候發(fā)現(xiàn)自己被綠了导披。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡埃唯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鹰晨,到底是詐尸還是另有隱情墨叛,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布模蜡,位于F島的核電站漠趁,受9級特大地震影響,放射性物質發(fā)生泄漏忍疾。R本人自食惡果不足惜闯传,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卤妒。 院中可真熱鬧甥绿,春花似錦、人聲如沸则披。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽士复。三九已至图谷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間阱洪,已是汗流浹背便贵。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留冗荸,地道東北人承璃。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像俏竞,于是被迫代替她去往敵國和親绸硕。 傳聞我的和親對象是個殘疾皇子堂竟,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容