為什么要寫這本書
隨著互聯(lián)網(wǎng)的不斷發(fā)展,互聯(lián)網(wǎng)企業(yè)的業(yè)務(wù)在飛速變化,推動(dòng)著系統(tǒng)架構(gòu)也在不斷地發(fā)生變化?傮w來說,系統(tǒng)架構(gòu)大致經(jīng)歷了單體應(yīng)用架構(gòu)垂直應(yīng)用架構(gòu)分布式架
構(gòu)SOA架構(gòu)微服務(wù)架構(gòu)的演變。如今微服務(wù)技術(shù)越來越成熟,很多企業(yè)都采用微服務(wù)架構(gòu)來支撐內(nèi)部及對(duì)外的業(yè)務(wù),尤其是在高并發(fā)大流量的電商業(yè)務(wù)場(chǎng)景下,微服務(wù)更是企業(yè)的架構(gòu)模式。
微服務(wù)的普及也帶來了新的問題。原本單一的應(yīng)用架構(gòu)只需要連接一臺(tái)數(shù)據(jù)庫實(shí)例即可完成所有業(yè)務(wù)操作,業(yè)務(wù)方法的邏輯在一個(gè)事務(wù)中即可完成,涉及的所有數(shù)據(jù)庫操作要么全部提交,要么全部不提交,很容易實(shí)現(xiàn)數(shù)據(jù)的一致性。而在微服務(wù)架構(gòu)下,原本單一的應(yīng)用被拆分為一個(gè)個(gè)很小的服務(wù),每個(gè)服務(wù)都有其獨(dú)立的業(yè)務(wù)和數(shù)據(jù)庫,服務(wù)與服務(wù)之間的交互通過接口或者遠(yuǎn)程過程調(diào)用(Remote Procedure Call,RPC)的方式進(jìn)行,此時(shí),服務(wù)與服務(wù)之間的數(shù)據(jù)一致性問題就變得棘手了。
因?yàn)槲⒎⻊?wù)這種架構(gòu)模式本質(zhì)上就是多個(gè)應(yīng)用連接多個(gè)數(shù)據(jù)庫共同完成一組業(yè)務(wù)邏輯,所以數(shù)據(jù)一致性問題就凸顯出來了。除此之外,多個(gè)應(yīng)用連接同一個(gè)數(shù)據(jù)庫和單個(gè)應(yīng)用連接多個(gè)數(shù)據(jù)庫也會(huì)產(chǎn)生數(shù)據(jù)一致性問題?梢赃@么說,在互聯(lián)網(wǎng)行業(yè),任何企業(yè)都會(huì)或多或少地遇到數(shù)據(jù)一致性問題。業(yè)界將這種數(shù)據(jù)一致性問題稱為分布式事務(wù)問題。為了解決分布式事務(wù)問題,業(yè)界提出了一些著名的理論,比如CAP理論和Base理論,并針對(duì)這些理論提出了很多解決方案,比如解決強(qiáng)一致性分布式事務(wù)的DTP模型、XA事務(wù)、2PC模型、3PC模型,解決終一致性分布式事務(wù)的TCC、可靠消息終一致性、努力通知型等模型。不少企業(yè)和開源組織,甚至個(gè)人都基于這些模型實(shí)現(xiàn)了比較通用的分布式事務(wù)框架。
深入掌握分布式事務(wù)已然成為互聯(lián)網(wǎng)行業(yè)中每個(gè)中高級(jí)開發(fā)人員和架構(gòu)師必須掌握的技能,而熟練掌握分布式事務(wù)產(chǎn)生的各種場(chǎng)景和解決方案也成為各大互聯(lián)網(wǎng)公司對(duì)應(yīng)聘者的基本要求。
盡管對(duì)于分布式事務(wù)這個(gè)話題,業(yè)界有不少成熟的解決方案,但是縱觀整個(gè)圖書市場(chǎng),幾乎找不到一本系統(tǒng)深入講解分布式事務(wù)的圖書。本書從實(shí)際需求出發(fā),全面且細(xì)致地介紹了有關(guān)分布式事務(wù)的基礎(chǔ)知識(shí)、解決方案、實(shí)現(xiàn)原理和源碼實(shí)戰(zhàn)。每章根據(jù)需要配有相關(guān)的原理圖和流程圖,并提供完整的實(shí)戰(zhàn)案例源碼。書中的每個(gè)解決方案都經(jīng)過了高并發(fā)大流量生產(chǎn)環(huán)境的考驗(yàn),可以直接拿來解決實(shí)際生產(chǎn)環(huán)境中的分布式事務(wù)問題。通過對(duì)本書的閱讀和學(xué)習(xí),讀者可以更加全面、深入、透徹地理解分布式事務(wù)的基礎(chǔ)、解決方案、原理和應(yīng)用,提高應(yīng)對(duì)分布式事務(wù)問題的處理能力和項(xiàng)目的實(shí)戰(zhàn)能力。
讀者對(duì)象
本書適合以下幾類讀者閱讀:
互聯(lián)網(wǎng)從業(yè)者,如中高級(jí)開發(fā)人員、架構(gòu)師、技術(shù)經(jīng)理、技術(shù)專家;
需要系統(tǒng)學(xué)習(xí)分布式事務(wù)的開發(fā)人員;
需要提高分布式事務(wù)開發(fā)水平的人員;
需要時(shí)常查閱分布式事務(wù)技術(shù)資料和開發(fā)案例的人員。
本書特色
1.大量圖解和開發(fā)案例
為了方便讀者理解,我們?cè)诮榻B分布式事務(wù)的基礎(chǔ)、解決方案、原理、源碼與實(shí)戰(zhàn)章節(jié)中配有大量的圖解和圖表,同時(shí)在源碼與實(shí)戰(zhàn)章節(jié)配有完整的分布式事務(wù)案例,讀者可以參考本書的案例進(jìn)行學(xué)習(xí),并運(yùn)行本書的案例代碼,以更深入地理解和掌握分布式事務(wù)。這些案例代碼和圖解的draw.io源文件收錄于隨書資料里,讀者可以從下面的鏈接獲取相關(guān)內(nèi)容。
GitHub:https://github.com/dromara/distribute-transaction。
Gitee:https://gitee.com/dromara/distribute-transaction。
2.技術(shù)點(diǎn)全面
本書全面且細(xì)致地介紹了分布式事務(wù)的各項(xiàng)知識(shí),包含分布式事務(wù)的基礎(chǔ)、解決方案、原理、源碼與實(shí)戰(zhàn)。通過閱讀本書,讀者能夠全面掌握分布式事務(wù)的原理和應(yīng)用。
3.案例應(yīng)用性強(qiáng),具備較高的實(shí)用價(jià)值
本書關(guān)于分布式事務(wù)的各項(xiàng)技術(shù)點(diǎn)都配有相關(guān)的案例,都是實(shí)現(xiàn)分布式事務(wù)相關(guān)技術(shù)的典型案例,具有很強(qiáng)的實(shí)用性,方便讀者隨時(shí)查閱和參考。
另外,這些實(shí)戰(zhàn)案例大都是我們實(shí)際工作的總結(jié),尤其是書中涉及的分布式事務(wù)框架,均是業(yè)界知名的開源分布式事務(wù)框架,稍加修改與完善便可應(yīng)用于實(shí)際的生產(chǎn)環(huán)境中。
本書內(nèi)容
本書分為如下四個(gè)部分。
部分 分布式事務(wù)基礎(chǔ)(第1~5章)
首先介紹事務(wù)的基本概念,然后介紹MySQL事務(wù)和Spring事務(wù)的實(shí)現(xiàn)原理,后介紹分布式事務(wù)的基本概念和理論知識(shí)。
第二部分 分布式事務(wù)解決方案(第6~7章)
以大量圖解的方式詳細(xì)介紹了分布式事務(wù)的各種解決方案,包括強(qiáng)一致性分布式事務(wù)解決方案和終一致性分布式事務(wù)解決方案。
第三部分 分布式事務(wù)原理(第8~11章)
以大量圖解的方式詳細(xì)講解了分布式事務(wù)的原理,包括XA強(qiáng)一致性分布式事務(wù)、TCC分布式事務(wù)、可靠消息終一致性分布式事務(wù)和努力通知型分布式事務(wù)。
第四部分 分布式事務(wù)源碼與實(shí)戰(zhàn)(第12~17章)
首先詳細(xì)講解了業(yè)界比較知名的ShardingSphere框架實(shí)現(xiàn)XA分布式事務(wù)的源碼,然后詳細(xì)剖析了Dromara開源社區(qū)的Hmily分布式事務(wù)框架實(shí)現(xiàn)TCC分布式事務(wù)的源碼,后分別對(duì)XA強(qiáng)一致性分布式事務(wù)、TCC分布式事務(wù)、可靠消息終一致性分布式事務(wù)和努力通知型分布式事務(wù)進(jìn)行了實(shí)戰(zhàn)案例講解。
如何閱讀本書
對(duì)于沒有接觸過分布式事務(wù)的讀者,建議按照順序從第1章開始閱讀,并實(shí)現(xiàn)每一個(gè)案例。
對(duì)于有一定MySQL和Spring開發(fā)基礎(chǔ)的讀者,可以根據(jù)實(shí)際情況,有選擇性地閱讀分布式事務(wù)的相關(guān)章節(jié)。
對(duì)于書中涉及的每個(gè)分布式事務(wù)案例,讀者可以先自行思考實(shí)現(xiàn)方式,再閱讀相關(guān)的案例講解,了解各技術(shù)對(duì)應(yīng)的原理細(xì)節(jié),以加深理解,達(dá)到事半功倍的學(xué)習(xí)效果。
勘誤和支持
本書是肖宇和冰河(排名不分先后)聯(lián)合撰寫的。由于水平有限,編寫時(shí)間倉促,書中難免會(huì)出現(xiàn)一些錯(cuò)誤或者不準(zhǔn)確的地方,懇請(qǐng)讀者批評(píng)指正。為此,我們特意在Dromara社區(qū)的GitHub上創(chuàng)建了一個(gè)單獨(dú)的倉庫用來記錄本書的勘誤信息,倉庫地址為https://github.com/dromara/transaction-book。讀者可以將書中的錯(cuò)誤發(fā)布在Bug勘誤中,如果遇到任何問題,也可以記錄在這個(gè)倉庫中,我們將盡量在線上為讀者提供滿意的解答。如果有更多寶貴的建議或者意見,也可以聯(lián)系我們。
肖宇的聯(lián)系方式如下。
微信:xixy199195。
郵箱:xiaoyu@apache.org。
公眾號(hào):Dromara開源組織。
冰河的聯(lián)系方式如下。
微信:hacker_binghe。
郵箱:1028386804@qq.com。
公眾號(hào):冰河技術(shù)。
如果想獲得更多有關(guān)分布式事務(wù)或者開源框架的動(dòng)態(tài),可以關(guān)注微信公眾號(hào)Dromara開源組織和冰河技術(shù)。
致謝
首先感謝張逸為本書作序。感謝鄭灝、劉啟榮、高新剛、沈建林、付曉巖、史少鋒、劉勛、張亮、代立冬、楊曉峰、于君澤、孫玄、沈劍、曾波、程超、張永倫、于雨、程軍和駱俊武(排名不分先后)等專家為本書撰寫推薦語。
感謝Dromara開源社區(qū)的兄弟姐妹們,感謝你們對(duì)社區(qū)的長(zhǎng)期支持和貢獻(xiàn)。你們的支持是我們寫作的動(dòng)力。
感謝機(jī)械工業(yè)出版社華章公司的楊福川老師和董惠芝編輯、韓蕊編輯在這一年多的時(shí)間里始終支持我們寫作,是你們的鼓勵(lì)和幫助引導(dǎo)我們順利完成了全部書稿。
感謝家人在我們寫作期間默默給予我們支持與鼓勵(lì),并時(shí)刻為我們傳遞著信心和力量!
后,感謝所有支持、鼓勵(lì)和幫助過我們的人。謹(jǐn)以此書獻(xiàn)給我們親愛的家人,以及眾多熱愛開源事業(yè)和關(guān)注Dromara開源社區(qū)的朋友們!
肖宇、冰河
推薦語
序
前言
部分 分布式事務(wù)基礎(chǔ)
第1章 事務(wù)的基本概念2
1.1 事務(wù)的特性2
1.1.1 原子性3
1.1.2 一致性3
1.1.3 隔離性3
1.1.4 持久性3
1.2 事務(wù)的類型4
1.2.1 扁平事務(wù)4
1.2.2 帶有保存點(diǎn)的扁平事務(wù)4
1.2.3 鏈?zhǔn)绞聞?wù)5
1.2.4 嵌套事務(wù)5
1.2.5 分布式事務(wù)5
1.3 本地事務(wù)5
1.3.1 基本概念6
1.3.2 本地事務(wù)的執(zhí)行流程6
1.3.3 本地事務(wù)的優(yōu)缺點(diǎn)7
1.4 MySQL事務(wù)基礎(chǔ)7
1.4.1 并發(fā)事務(wù)帶來的問題7
1.4.2 MySQL事務(wù)隔離級(jí)別9
1.4.3 MySQL中各種事務(wù)隔離級(jí)別的區(qū)別10
1.4.4 MySQL事務(wù)隔離級(jí)別實(shí)踐11
1.4.5 MySQL中鎖的分類19
1.4.6 死鎖的產(chǎn)生和預(yù)防23
1.4.7 MySQL中的死鎖問題24
1.4.8 InnoDB中的MVCC原理25
1.5 本章小結(jié)28
第2章 MySQL事務(wù)的實(shí)現(xiàn)原理29
2.1 Redo Log29
2.1.1 Redo Log基本概念29
2.1.2 Redo Log基本原理30
2.1.3 Redo Log刷盤規(guī)則30
2.1.4 Redo Log刷盤實(shí)踐32
2.1.5 Redo Log寫入機(jī)制34
2.1.6 Redo Log的LSN機(jī)制35
2.1.7 Redo Log相關(guān)參數(shù)36
2.2 Undo Log36
2.2.1 Undo Log基本概念36
2.2.2 Undo Log存儲(chǔ)方式37
2.2.3 Undo Log基本原理37
2.2.4 Undo Log實(shí)現(xiàn)MVCC機(jī)制37
2.2.5 Undo Log相關(guān)參數(shù)40
2.3 BinLog41
2.3.1 BinLog基本概念41
2.3.2 BinLog記錄模式41
2.3.3 BinLog文件結(jié)構(gòu)42
2.3.4 BinLog寫入機(jī)制43
2.3.5 BinLog組提交機(jī)制43
2.3.6 BinLog與Redo Log的區(qū)別45
2.3.7 BinLog相關(guān)參數(shù)45
2.4 MySQL事務(wù)流程46
2.4.1 MySQL事務(wù)執(zhí)行流程46
2.4.2 MySQL事務(wù)恢復(fù)流程47
2.5 MySQL中的XA事務(wù)48
2.5.1 XA事務(wù)的基本原理48
2.5.2 MySQL XA事務(wù)語法49
2.5.3 JDBC操作MySQL XA事務(wù)52
2.6 本章小結(jié)54
第3章 Spring事務(wù)的實(shí)現(xiàn)原理55
3.1 Spring事務(wù)原理55
3.1.1 JDBC直接操作事務(wù)55
3.1.2 使用Spring管理事務(wù)56
3.1.3 Spring事務(wù)分類57
3.1.4 Spring事務(wù)超時(shí)57
3.1.5 Spring事務(wù)回滾規(guī)則57
3.2 Spring事務(wù)三大接口57
3.2.1 PlatformTransactionManager接口57
3.2.2 TransactionDefinition接口58
3.2.3 TransactionStatus接口60
3.3 Spring事務(wù)隔離級(jí)別61
3.4 Spring事務(wù)傳播機(jī)制62
3.4.1 7種事務(wù)傳播機(jī)制類型62
3.4.2 常用的事務(wù)傳播類型65
3.5 Spring事務(wù)嵌套實(shí)踐65
3.5.1 環(huán)境準(zhǔn)備66
3.5.2 實(shí)踐場(chǎng)景一71
3.5.3 實(shí)踐場(chǎng)景二72
3.5.4 實(shí)踐場(chǎng)景三73
3.5.5 實(shí)踐場(chǎng)景四74
3.5.6 實(shí)踐場(chǎng)景五75
3.5.7 實(shí)踐場(chǎng)景六76
3.5.8 實(shí)踐場(chǎng)景七77
3.6 Spring事務(wù)失效的場(chǎng)景79
3.6.1 數(shù)據(jù)庫不支持事務(wù)79
3.6.2 事務(wù)方法未被Spring管理79
3.6.3 方法沒有被public修飾79
3.6.4 同一類中的方法調(diào)用80
3.6.5 未配置事務(wù)管理器80
3.6.6 方法的事務(wù)傳播類型不支持事務(wù)81
3.6.7 不正確地捕獲異常81
3.6.8 標(biāo)注錯(cuò)誤的異常類型82
3.7 本章小結(jié)83
第4章 分布式事務(wù)的基本概念84
4.1 分布式系統(tǒng)架構(gòu)84
4.1.1 產(chǎn)生的背景84
4.1.2 架構(gòu)目標(biāo)和架構(gòu)原則85
4.2 分布式系統(tǒng)架構(gòu)演進(jìn)86
4.2.1 單體應(yīng)用架構(gòu)86
4.2.2 垂直應(yīng)用架構(gòu)87
4.2.3 分布式架構(gòu)88
4.2.4 SOA架構(gòu)89
4.2.5 微服務(wù)架構(gòu)89
4.3 分布式事務(wù)場(chǎng)景90
4.3.1 跨JVM進(jìn)程90
4.3.2 跨數(shù)據(jù)庫實(shí)例91
4.3.3 多服務(wù)訪問單數(shù)據(jù)庫91
4.4 數(shù)據(jù)一致性92
4.4.1 數(shù)據(jù)的一致性問題92
4.4.2 數(shù)據(jù)一致性解決方案93
4.5 本章小結(jié)93
第5章 分布式事務(wù)的理論知識(shí)94
5.1 CAP理論94
5.1.1 一致性94
5.1.2 可用性95
5.1.3 分區(qū)容忍性95
5.1.4 CAP的組合96
5.2 Base理論97
5.3 本章小結(jié)98
第二部分 分布式事務(wù)解決方案
第6章 強(qiáng)一致性分布式事務(wù)解決方案100
6.1 強(qiáng)一致性事務(wù)概述100
6.1.1 典型方案100
6.1.2 適用場(chǎng)景101
6.1.3 優(yōu)缺點(diǎn)101
6.2 DTP模型101
6.2.1 DTP模型的重要概念101
6.2.2 DTP模型的執(zhí)行流程102
6.3 2PC模型102
6.3.1 2PC模型的執(zhí)行流程103
6.3.2 事務(wù)執(zhí)行成功的流程103
6.3.3 事務(wù)執(zhí)行失敗的流程104
6.3.4 2PC模型存在的問題105
6.4 3PC模型105
6.4.1 事務(wù)執(zhí)行成功的流程105
6.4.2 事務(wù)執(zhí)行失敗的流程106
6.4.3 3PC模型中存在的問題108
6.5 本章小結(jié)108
第7章 終一致性分布式事務(wù)解決方案109
7.1 終一致性分布式事務(wù)概述109
7.1.1 典型方案109
7.1.2 適用場(chǎng)景110
7.1.3 優(yōu)缺點(diǎn)110
7.2 服務(wù)模式110
7.2.1 可查詢操作111
7.2.2 冪等操作111
7.2.3 TCC操作112
7.2.4 可補(bǔ)償操作113
7.3 TCC解決方案113
7.3.1 適用場(chǎng)景114
7.3.2 需要實(shí)現(xiàn)的服務(wù)模式114
7.3.3 方案的執(zhí)行流程114
7.3.4 方案的優(yōu)缺點(diǎn)115
7.3.5 需要注意的問題116
7.4 可靠消息終一致性解決方案117
7.4.1 適用場(chǎng)景117
7.4.2 需要實(shí)現(xiàn)的服務(wù)模式117
7.4.3 方案的執(zhí)行流程118
7.4.4 方案的優(yōu)缺點(diǎn)119
7.4.5 需要注意的問題120
7.5 努力通知型解決方案120
7.5.1 適用場(chǎng)景120
7.5.2 需要實(shí)現(xiàn)的服務(wù)模式121
7.5.3 方案的執(zhí)行流程121
7.5.4 方案的優(yōu)缺點(diǎn)122
7.5.5 需要注意的問題122
7.5.6 努力通知與可靠消息終一致性的區(qū)別123
7.6 本章小結(jié)123
第三部分 分布式事務(wù)原理
第8章 XA強(qiáng)一致性分布式事務(wù)原理126
8.1 X/Open DTP模型與XA規(guī)范126
8.1.1 DTP模型126
8.1.2 XA規(guī)范127
8.1.3 JTA規(guī)范127
8.1.4 XA二階段提交128
8.2 MySQL對(duì)XA規(guī)范的支持129
8.2.1 MySQL XA事務(wù)的語法129
8.2.2 MySQL XID詳解129
8.2.3 MySQL XA事務(wù)的狀態(tài)130
8.2.4 MySQL XA的問題131
8.3 XA規(guī)范的問題思考132
8.3.1 XA規(guī)范的缺陷132
8.3.2 XA流程的優(yōu)化與異常思考133
8.3.3 解決XA數(shù)據(jù)不一致的問題134
8.3.4 解決事務(wù)管理器的單點(diǎn)故障問題135
8.4 主流的解決方案135
8.5 本章小結(jié)136
第9章 TCC分布式事務(wù)原理137
9.1 TCC核心思想137
9.2 TCC實(shí)現(xiàn)原理139
9.2.1 TCC核心組成139
9.2.2 TCC核心原理140
9.3 TCC核心流程142
9.3.1 業(yè)務(wù)場(chǎng)景介紹142
9.3.2 Try階段流程143
9.3.3 Confirm階段流程144
9.3.4 Cancel階段流程145
9.4 TCC關(guān)鍵技術(shù)146
9.5 本章小結(jié)147
第10章 可靠消息終一致性分布式事務(wù)原理148
10.1 基本原理148
10.2 本地消息表149
10.2.1 實(shí)現(xiàn)原理149
10.2.2 優(yōu)缺點(diǎn)150
10.3 獨(dú)立消息服務(wù)151
10.3.1 實(shí)現(xiàn)原理151
10.3.2 優(yōu)缺點(diǎn)152
10.4 RocketMQ事務(wù)消息153
10.4.1 實(shí)現(xiàn)原理153
10.4.2 RocketMQ本地事務(wù)監(jiān)聽接口154
10.5 消息發(fā)送的一致性155
10.5.1 消息發(fā)送與確認(rèn)機(jī)制155
10.5.2 消息發(fā)送的不一致性156
10.5.3 如何保證消息發(fā)送的一致性157
10.6 消息接收的一致性158
10.6.1 消息接收與確認(rèn)機(jī)制158
10.6.2 消息接收的不一致性159
10.6.3 如何保證消息接收的一致性159
10.7 消息的可靠性161
10.7.1 消息發(fā)送的可靠性161
10.7.2 消息存儲(chǔ)的可靠性161
10.7.3 消息消費(fèi)的可靠性162
10.8 本章小結(jié)162
第11章 努力通知型分布式事務(wù)原理163
11.1 適用場(chǎng)景163
11.2 方案特點(diǎn)164
11.3 基本原理164
11.4 異常處理165
11.5 本章小結(jié)166
第四部分 分布式事務(wù)源碼與實(shí)戰(zhàn)
第12章 XA強(qiáng)一致性分布式事務(wù)解決方案源碼解析168
12.1 分布式數(shù)據(jù)一致性場(chǎng)景的搭建168
12.1.1 構(gòu)建環(huán)境168
12.1.2 準(zhǔn)備環(huán)境169
12.1.3 修改配置169
12.1.4 啟動(dòng)171
12.1.5 驗(yàn)證171
12.2 ShardingSphere對(duì)XA分布式事務(wù)方案的整合172
12.2.1 ShardingTransactionManager接口172
12.2.2 XATransactionManager接口174
12.2.3 DataSourceSwapper類174
12.2.4 XAConnectionWrapper接口175
12.2.5 XA事務(wù)初始化175
12.2.6 XA資源注冊(cè)176
12.3 ShardingSphere對(duì)Atomikos方案的實(shí)戰(zhàn)與源碼解析178
12.3.1 Atomikos-XA分布式事務(wù)初始化流程178
12.3.2 Atomikos-XA分布式事務(wù)Begin流程183
12.3.3 Atomikos-XA分布式事務(wù)資源注冊(cè)原理185
12.3.4 Atomikos-XA分布式事務(wù)Commit流程186
12.3.5 Atomikos-XA分布式事務(wù)Rollback流程191
12.3.6 Atomikos-XA分布式事務(wù)恢復(fù)流程193
12.4 ShardingSphere對(duì)Narayana方案的實(shí)戰(zhàn)與源碼解析198
12.4.1 Narayana環(huán)境搭建198
12.4.2 Narayana-XA分布式事務(wù)初始化流程199
12.4.3 Narayana-XA分布式事務(wù)Begin流程206
12.4.4 Narayana-XA分布式事務(wù)資源注冊(cè)208
12.4.5 Narayana-XA分布式事務(wù)Commit流程208
12.4.6 Narayana-XA分布式事務(wù)Rollback流程211
12.4.7 Narayana-XA分布式事務(wù)恢復(fù)流程212
12.5 本章小結(jié)216
第13章 Hmily-TCC分布式事務(wù)解決方案源碼解析217
13.1 Hmily-TCC分布式場(chǎng)景的搭建217
13.1.1 準(zhǔn)備環(huán)境218
13.1.2 下載源碼并編譯220
13.1.3 修改配置220
13.1.4 啟動(dòng)程序222
13.1.5 驗(yàn)證223
13.2 Hmily框架初始流程源碼解析223
13.2.1 加載配置225
13.2.2 初始化事務(wù)日志存儲(chǔ)229
13.2.3 初始化事務(wù)恢復(fù)調(diào)度器234
13.2.4 初始化事件分發(fā)器235
13.2.5 初始化Metrics監(jiān)控信息236
13.3 Hmily-TCC分布式事務(wù)源碼解析238
13.3.1 Try流程源碼解析239
13.3.2 Confirm流程源碼解析253
13.3.3 Cancel流程源碼解析258
13.4 Hmily對(duì)RPC框架的支持261
13.4.1 對(duì)Dubbo框架的支持261
13.4.2 對(duì)Spring Cloud框架的支持263
13.4.3 對(duì)BRPC框架的支持265
13.4.4 對(duì)Motan框架的支持267
13.4.5 對(duì)gRPC框架的支持268
13.4.6 對(duì)Sofa-RPC框架的支持270
13.4.7 對(duì)Tars框架的支持272
13.5 Hmily-TCC事務(wù)恢復(fù)源碼解析273
13.5.1 邏輯處理274
13.5.2 事務(wù)恢復(fù)275
13.6 本章小結(jié)276
第14章 XA強(qiáng)一致性分布式事務(wù)實(shí)戰(zhàn)277
14.1 場(chǎng)景說明277
14.2 程序模塊說明278
14.3 數(shù)據(jù)庫表設(shè)計(jì)278
14.4 程序?qū)崿F(xiàn)279
14.4.1 項(xiàng)目搭建279
14.4.2 持久層的實(shí)現(xiàn)287
14.4.3 業(yè)務(wù)邏輯層的實(shí)現(xiàn)288
14.4.4 接口層的實(shí)現(xiàn)289
14.4.5 項(xiàng)目啟動(dòng)類的實(shí)現(xiàn)290
14.5 測(cè)試程序290
14.6 本章小結(jié)292
第15章 TCC分布式事務(wù)實(shí)戰(zhàn)293
15.1 場(chǎng)景說明293
15.2 程序模塊說明294
15.3 數(shù)據(jù)庫表設(shè)計(jì)295
15.4 實(shí)現(xiàn)項(xiàng)目公共模塊297
15.4.1 項(xiàng)目搭建297
15.4.2 持久層的實(shí)現(xiàn)300
15.4.3 Dubbo接口的定義304
15.5 實(shí)現(xiàn)轉(zhuǎn)出銀行微服務(wù)305
15.5.1 項(xiàng)目搭建305
15.5.2 業(yè)務(wù)邏輯層的實(shí)現(xiàn)311
15.5.3 接口層的實(shí)現(xiàn)313
15.5.4 項(xiàng)目啟動(dòng)類的實(shí)現(xiàn)313
15.6 實(shí)現(xiàn)轉(zhuǎn)入銀行微服務(wù)314
15.6.1 業(yè)務(wù)邏輯層的實(shí)現(xiàn)314
15.6.2 項(xiàng)目啟動(dòng)類的實(shí)現(xiàn)315
15.7 測(cè)試程序316
15.8 本章小結(jié)318
第16章 可靠消息終一致性分布式事務(wù)實(shí)戰(zhàn)319
16.1 場(chǎng)景說明319
16.2 程序模塊說明321
16.3 RocketMQ環(huán)境搭建與測(cè)試321
16.3.1 搭建Java環(huán)境321
16.3.2 搭建RocketMQ環(huán)境322
16.3.3 測(cè)試RocketMQ環(huán)境324
16.4 數(shù)據(jù)庫表設(shè)計(jì)326
16.5 實(shí)現(xiàn)訂單微服務(wù)328
16.5.1 項(xiàng)目搭建328
16.5.2 持久層的實(shí)現(xiàn)333
16.5.3 業(yè)務(wù)邏輯層的實(shí)現(xiàn)335
16.5.4 接口層的實(shí)現(xiàn)338
16.5.5 項(xiàng)目啟動(dòng)類的實(shí)現(xiàn)338
16.6 實(shí)現(xiàn)庫存微服務(wù)339
16.6.1 項(xiàng)目搭建339
16.6.2 持久層的實(shí)現(xiàn)339
16.6.3 業(yè)務(wù)邏輯層的實(shí)現(xiàn)341
16.6.4 項(xiàng)目啟動(dòng)類的實(shí)現(xiàn)343
16.7 測(cè)試程序343
16.8 本章小結(jié)345
第17章 努力通知型分布式事務(wù)實(shí)戰(zhàn)347
17.1 場(chǎng)景說明347
17.2 程序模塊說明348
17.3 數(shù)據(jù)庫表設(shè)計(jì)348
17.4 實(shí)現(xiàn)賬戶微服務(wù)350
17.4.1 項(xiàng)目搭建350
17.4.2 持久層的實(shí)現(xiàn)355
17.4.3 業(yè)務(wù)邏輯層的實(shí)現(xiàn)358
17.4.4 接口層的實(shí)現(xiàn)360
17.4.5 啟動(dòng)類的實(shí)現(xiàn)360
17.5 實(shí)現(xiàn)充值微服務(wù)361
17.5.1 項(xiàng)目搭建與持久層的實(shí)現(xiàn)361
17.5.2 業(yè)務(wù)邏輯層的實(shí)現(xiàn)361
17.5.3 接口層的實(shí)現(xiàn)362
17.5.4 啟動(dòng)類的實(shí)現(xiàn)363
17.6 測(cè)試程序363
17.7 本章小結(jié)365