Seata筆記

官網(wǎng)

Seata 是一款開源的分布式事務(wù)解決方案,致力于提供高性能和簡單易用的分布式事務(wù)服務(wù)啦逆。Seata 將為用戶提供了 AT、TCC锹漱、SAGA 和 XA 事務(wù)模式姐直,為用戶打造一站式的分布式解決方案岳锁。

總體結(jié)構(gòu)

  • TC (Transaction Coordinator) - 事務(wù)協(xié)調(diào)者(對應(yīng)2pc中TM)
  • RM: 資源管理器(同2pc中RM )
  • TM: 事務(wù)管理器(發(fā)起事務(wù)的RM)
image.png

AT模式

無侵入自動補償?shù)氖聞?wù)模式

TCC模式

支持 TCC 模式并可與 AT 混用潘拨,靈活度更高

SAGA模式

為長事務(wù)提供有效的解決方案

Seate使用

搭建TC
  • 下載 seata-server URL
  • 修改配置
    registry.conf
    file.conf
  • 配置數(shù)據(jù)庫
-- 分支事務(wù)表
CREATE TABLE `branch_table` (
`branch_id` bigint(20) NOT NULL,
`xid` varchar(128) NOT NULL,
`transaction_id` bigint(20) DEFAULT NULL,
`resource_group_id` varchar(32) DEFAULT NULL,
`resource_id` varchar(256) DEFAULT NULL,
`branch_type` varchar(8) DEFAULT NULL,
`status` tinyint(4) DEFAULT NULL,
`client_id` varchar(64) DEFAULT NULL,
`application_data` varchar(2000) DEFAULT NULL,
`gmt_create` datetime(6) DEFAULT NULL,
`gmt_modified` datetime(6) DEFAULT NULL,
PRIMARY KEY (`branch_id`),
KEY `idx_xid` (`xid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 全局事務(wù)表
CREATE TABLE `global_table` (
`xid` varchar(128) NOT NULL,
`transaction_id` bigint(20) DEFAULT NULL,
`status` tinyint(4) NOT NULL,
`application_id` varchar(32) DEFAULT NULL,
`transaction_service_group` varchar(32) DEFAULT NULL,
`transaction_name` varchar(128) DEFAULT NULL,
`timeout` int(11) DEFAULT NULL,
`begin_time` bigint(20) DEFAULT NULL,
`application_data` varchar(2000) DEFAULT NULL,
`gmt_create` datetime DEFAULT NULL,
`gmt_modified` datetime DEFAULT NULL,
PRIMARY KEY (`xid`),
KEY `idx_gmt_modified_status` (`gmt_modified`,`status`),
KEY `idx_transaction_id` (`transaction_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 全局鎖
CREATE TABLE `lock_table` (
`row_key` varchar(128) NOT NULL,
`xid` varchar(96) DEFAULT NULL,
`transaction_id` bigint(20) DEFAULT NULL,
`branch_id` bigint(20) NOT NULL,
`resource_id` varchar(256) DEFAULT NULL,
`table_name` varchar(32) DEFAULT NULL,
`pk` varchar(36) DEFAULT NULL,
`gmt_create` datetime DEFAULT NULL,
`gmt_modified` datetime DEFAULT NULL,
PRIMARY KEY (`row_key`),
KEY `idx_branch_id` (`branch_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
搭建TM
  • 配置文件 registry.conf file.conf 可修改端口 默認(rèn):8091
  • pom
      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-alibaba-seata</artifactId>
          <version>2.2.0.RELEASE</version>
      </dependency>

  • 注解 @GlobalTransactional(rollbackFor = Exception.class)
  • sql
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,
 `ext` varchar(100) DEFAULT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=45 DEFAULT CHARSET=utf8;
TCC模式
@LocalTCC
public interface RmOneInterface {
    // 制定  confirm  和 cancel
    @TwoPhaseBusinessAction(name = "rm1TccAction" , commitMethod = "rm1Commit" ,rollbackMethod = "rm1Rollback")
    public String rm1(BusinessActionContext businessActionContext);

    public boolean rm1Commit(BusinessActionContext businessActionContext);

    public boolean rm1Rollback(BusinessActionContext businessActionContext);
}

簡單對比

2pc tcc 消息隊列
一致性 最終 最終
吞吐量 中等
復(fù)雜度 簡單 復(fù)雜 中等

TCC異常

  • 空回滾

try 未執(zhí)行, cancel執(zhí)行 解決:添加事務(wù)控制表(全局id /分支id/狀態(tài): 初始化/已提交/已回滾)

  • 冪等

重試,多次執(zhí)行 cancel/confirm 解決::添加事務(wù)控制表(全局id /分支id/狀態(tài):初始化/已提交/已回滾)

  • 懸掛

cancel 在try之前執(zhí)行 解決: (事務(wù)控制表)狀態(tài):初始化>已提交>已回滾 狀態(tài)不可逆

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吊输,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子铁追,更是在濱河造成了極大的恐慌季蚂,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件琅束,死亡現(xiàn)場離奇詭異扭屁,居然都是意外死亡,警方通過查閱死者的電腦和手機涩禀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門料滥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人艾船,你說我怎么就攤上這事葵腹。” “怎么了屿岂?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵践宴,是天一觀的道長。 經(jīng)常有香客問我雁社,道長浴井,這世上最難降的妖魔是什么晒骇? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任霉撵,我火速辦了婚禮,結(jié)果婚禮上洪囤,老公的妹妹穿的比我還像新娘徒坡。我一直安慰自己,他們只是感情好瘤缩,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布喇完。 她就那樣靜靜地躺著,像睡著了一般剥啤。 火紅的嫁衣襯著肌膚如雪锦溪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天府怯,我揣著相機與錄音刻诊,去河邊找鬼。 笑死牺丙,一個胖子當(dāng)著我的面吹牛则涯,可吹牛的內(nèi)容都是我干的复局。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼粟判,長吁一口氣:“原來是場噩夢啊……” “哼亿昏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起档礁,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤角钩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后呻澜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體彤断,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年易迹,在試婚紗的時候發(fā)現(xiàn)自己被綠了宰衙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡睹欲,死狀恐怖供炼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情窘疮,我是刑警寧澤袋哼,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站闸衫,受9級特大地震影響涛贯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蔚出,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一弟翘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧骄酗,春花似錦稀余、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至踏烙,卻和暖如春师骗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背讨惩。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工辟癌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人步脓。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓愿待,卻偏偏與公主長得像浩螺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子仍侥,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359

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