日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

java防止undo空间撑爆_秒杀系统设计补坑篇(seata回顾)

發布時間:2023/12/19 windows 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java防止undo空间撑爆_秒杀系统设计补坑篇(seata回顾) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

seata是什么

Seata 是一款開源的分布式事務解決方案,致力于在微服務架構下提供高性能和簡單易用的分布式事務服務。 它提供了AT(常用)、saga(長事務解決方案)等多種事務模式。

seata術語

Seata分為三個模塊,分別是TM、RM和TC(簡寫)。

TC(transaction Coordinator),代表seata服務器,seata是一個spring boot的jar包。

TM(transaction Manager)事務管理器。

RM(Resource Manager) 代表每個數據庫。

Seata還用了一個XID,代表了一個分布式事務,相當于dubbo中的Request ID。

seata流程

TM向TC注冊全局事務,并生成全局唯一的XID。

RM向TC注冊分支事務,并將其納入該XID對應的全局事務范圍。

RM向TC匯報資源的準備狀態。

TC匯總所有事務參與者的執行狀態,決定分布式事務是全部提交還是全部回滾。

TC通知所有RM提交/回滾事務。

seata流程相親版

盧學霸(TM)跟導師(TC)提議,為盧學霸安排對象,盧學霸生成了一個相親id。

女神(RM)向tc注冊了資料,盧學霸在他的相親id中接收到了推送。

女神向盧學霸匯報自己的資料。

TC匯總所有女神的資料,讓盧學霸決定是否去參加相親。

TC向盧學霸匯報相親結果。

seata例子

seata工作流程

Seata使用了增強型二階段提交實現。

假如你有一個數據庫,里面有一張訂單表,要實現分布式事務。

那么要滿足2個條件,訂單表必須要有id主鍵字段,主鍵是為了給Seata加本地鎖。

第二個條件,你的數據庫中,要建一張undo_log表,記錄回滾日志。 建表語句如下:

CREATE TABLE `undo_log` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`branch_id` bigint(20) NOT NULL,

`xid` varchar(100) NOT NULL,

`context` varchar(128) NOT NULL,

`rollback_info` longblob NOT NULL,

`log_status` int(11) NOT NULL,

`log_created` datetime NOT NULL,

`log_modified` datetime NOT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

一階段:業務數據和回滾記錄在同一個本地事務中提交,釋放本地鎖和連接資源。

二階段:異步提交,回滾通過一階段的回滾日志進行反向補償。

一階段

從上文中,我們得知seata使用了一個增強型2階段提交,我們現在開始分析一階段:

前文中,我們提到要給訂單表實現分布式事務。

在訂單微服務引入了seata之后,seata會攔截每條訂單表的sql, 例如update語句,為訂單表生成before image。

執行業務sql更新之后,其保存為after image,并生成行鎖。

以上操作全部在訂單數據庫內的一個事務完成,保證了一階段操作的原子性。

二階段之提交

因為業務sql在一階段已經提交至數據庫,所以seata框架只需要將一階段的快照和行鎖刪除即可。

二階段之回滾

前面提到了XID全局事務id,seata要根據XID和branch id找到相應的undo log日志。

數據校驗:拿undo_log中的after image鏡像數據與當前業務表中的數據進行比較, 如果不同,說明數據被當前事務之外的動作做了修改,那么事務不會回滾。

如果比較通過,則根據undo_log中的before image鏡像數據和業務sql的相關信息 生成回滾語句并執行。

seata工作流程之戀愛篇

盧學霸和女神談戀愛了。

盧學霸預料到自己可能和女神吵架,所以將目前好的狀態備份為before image。

盧學霸某天和女神吵架了。

盧學霸找到前幾天備份的鏡像,看看當前狀態和after image是否一致,如果一致,說明不會發生蝴蝶效應。

盧學霸回到過去改變世界。

總結

以上是生活随笔為你收集整理的java防止undo空间撑爆_秒杀系统设计补坑篇(seata回顾)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。