深入理解分散式事務:原理與實戰

深入理解分散式事務:原理與實戰

《深入理解分散式事務:原理與實戰》是機械工業出版社出版的圖書,作者是肖宇、冰河。京東專家/分散式事務架構專家/多個開源項目創始人撰寫,5個維度全面展開,京東、阿里、騰訊、螞蟻近20位專家力薦。

基本介紹

  • 中文名:深入理解分散式事務:原理與實戰
  • 作者:肖宇 冰河
  • 出版社:機械工業出版社
  • 出版時間:2021年10月1日
  • 頁數:365 頁
  • 定價:119 元
  • 開本:16 開
  • ISBN:9787111692232
內容簡介,圖書目錄,作者簡介,

內容簡介

本書的廣度與深度兼備、理論與實戰兼顧的分散式事務專著,它從基礎知識、解決方案、原理分析、源碼實現、工程實戰5個維度對分散式事務做了全面、細緻的講解,試圖解決你在實踐中遇到的所有關於分散式事務的問題。
兩位作者都是分散式事務領域的資深架構專家,是Apache ShenYu(incubating)網關創始人、Hmily、RainCat、Myth等分散式事務框架的創始人。本書因為內容紮實,所以得到了來自京東、阿里、騰訊、螞蟻金服、滴滴、餓了么、58集團、IBM等網際網路大廠及Apache軟體基金會的近20位專家的高度評價。
·基礎知識維度:首先全面介紹了事務和分散式事務的概念和基礎知識,然後詳細講解了MySQL事務和Spring事務的實現原理;
·解決方案維度:詳細介紹了分散式事務的各種解決方案,包括強一致性分散式事務解決方案和Z終一致性分散式事務解決方案;
·原理分析維度:詳細講解了分散式事務的原理,包括XA強一致性分散式事務、TCC分散式事務、可靠訊息Z終一致性分散式事務和Z大努力通知型分散式事務的原理。
·源碼實現維度:深入分析了Atomikos,Narayana框架實現XA強一致性分散式事務解決方案的源碼,以及Dromara開源社區的Hmily分散式事務框架實現TCC分散式事務的源碼;
·工程實踐維度:通過多個在生產環境中經歷了高並發、大流量考驗的綜合案例,講解了XA強一致性分散式事務、TCC分散式事務、可靠訊息Z終一致性分散式事務和Z大努力通知型分散式事務的工程實踐方法。
全書配有大量流程圖和原理圖,便於讀者閱讀理解;精選了大量來自生產環境的完整案例及其代碼,便於讀者動手實踐。閱讀本書,你將體驗到事半功倍的效果。

圖書目錄

推薦語
前言
第一部分 分散式事務基礎
第1章 事務的基本概念2
1.1 事務的特性2
1.1.1 原子性3
1.1.2 一致性3
1.1.3 隔離性3
1.1.4 持久性3
1.2 事務的類型4
1.2.1 扁平事務4
1.2.2 帶有保存點的扁平事務4
1.2.3 鏈式事務5
1.2.4 嵌套事務5
1.2.5 分散式事務5
1.3 本地事務5
1.3.1 基本概念6
1.3.2 本地事務的執行流程6
1.3.3 本地事務的優缺點7
1.4 MySQL事務基礎7
1.4.1 並發事務帶來的問題7
1.4.2 MySQL事務隔離級別9
1.4.3 MySQL中各種事務隔離級別的區別10
1.4.4 MySQL事務隔離級別最佳實踐11
1.4.5 MySQL中鎖的分類19
1.4.6 死鎖的產生和預防23
1.4.7 MySQL中的死鎖問題24
1.4.8 InnoDB中的MVCC原理25
1.5 本章小結28
第2章 MySQL事務的實現原理29
2.1 Redo Log29
2.1.1 Redo Log基本概念29
2.1.2 Redo Log基本原理30
2.1.3 Redo Log刷盤規則30
2.1.4 Redo Log刷盤最佳實踐32
2.1.5 Redo Log寫入機制34
2.1.6 Redo Log的LSN機制35
2.1.7 Redo Log相關參數36
2.2 Undo Log36
2.2.1 Undo Log基本概念36
2.2.2 Undo Log存儲方式37
2.2.3 Undo Log基本原理37
2.2.4 Undo Log實現MVCC機制37
2.2.5 Undo Log相關參數40
2.3 BinLog41
2.3.1 BinLog基本概念41
2.3.2 BinLog記錄模式41
2.3.3 BinLog檔案結構42
2.3.4 BinLog寫入機制43
2.3.5 BinLog組提交機制43
2.3.6 BinLog與Redo Log的區別45
2.3.7 BinLog相關參數45
2.4 MySQL事務流程46
2.4.1 MySQL事務執行流程46
2.4.2 MySQL事務恢複流程47
2.5 MySQL中的XA事務48
2.5.1 XA事務的基本原理48
2.5.2 MySQL XA事務語法49
2.5.3 JDBC操作MySQL XA事務52
2.6 本章小結54
第3章 Spring事務的實現原理55
3.1 Spring事務原理55
3.1.1 JDBC直接操作事務55
3.1.2 使用Spring管理事務56
3.1.3 Spring事務分類57
3.1.4 Spring事務逾時57
3.1.5 Spring事務回滾規則57
3.2 Spring事務三大接口57
3.2.1 PlatformTransactionManager接口57
3.2.2 TransactionDefinition接口58
3.2.3 TransactionStatus接口60
3.3 Spring事務隔離級別61
3.4 Spring事務傳播機制62
3.4.1 7種事務傳播機制類型62
3.4.2 常用的事務傳播類型65
3.5 Spring事務嵌套最佳實踐65
3.5.1 環境準備66
3.5.2 最佳實踐場景一71
3.5.3 最佳實踐場景二72
3.5.4 最佳實踐場景三73
3.5.5 最佳實踐場景四74
3.5.6 最佳實踐場景五75
3.5.7 最佳實踐場景六76
3.5.8 最佳實踐場景七77
3.6 Spring事務失效的場景79
3.6.1 資料庫不支持事務79
3.6.2 事務方法未被Spring管理79
3.6.3 方法沒有被public修飾79
3.6.4 同一類中的方法調用80
3.6.5 未配置事務管理器80
3.6.6 方法的事務傳播類型不支持事務81
3.6.7 不正確地捕獲異常81
3.6.8 標註錯誤的異常類型82
3.7 本章小結83
第4章 分散式事務的基本概念84
4.1 分散式系統架構84
4.1.1 產生的背景84
4.1.2 架構目標和架構原則85
4.2 分散式系統架構演進86
4.2.1 單體套用架構86
4.2.2 垂直套用架構87
4.2.3 分散式架構88
4.2.4 SOA架構89
4.2.5 微服務架構89
4.3 分散式事務場景90
4.3.1 跨JVM進程90
4.3.2 跨資料庫實例91
4.3.3 多服務訪問單資料庫91
4.4 數據一致性92
4.4.1 數據的一致性問題92
4.4.2 數據一致性解決方案93
4.5 本章小結93
第5章 分散式事務的理論知識94
5.1 CAP理論94
5.1.1 一致性94
5.1.2 可用性95
5.1.3 分區容忍性95
5.1.4 CAP的組合96
5.2 Base理論97
5.3 本章小結98
第二部分 分散式事務解決方案
第6章 強一致性分散式事務解決方案100
6.1 強一致性事務概述100
6.1.1 典型方案100
6.1.2 適用場景101
6.1.3 優缺點101
6.2 DTP模型101
6.2.1 DTP模型的重要概念101
6.2.2 DTP模型的執行流程102
6.3 2PC模型102
6.3.1 2PC模型的執行流程103
6.3.2 事務執行成功的流程103
6.3.3 事務執行失敗的流程104
6.3.4 2PC模型存在的問題105
6.4 3PC模型105
6.4.1 事務執行成功的流程105
6.4.2 事務執行失敗的流程106
6.4.3 3PC模型中存在的問題108
6.5 本章小結108
第7章 最終一致性分散式事務解決方案109
7.1 最終一致性分散式事務概述109
7.1.1 典型方案109
7.1.2 適用場景110
7.1.3 優缺點110
7.2 服務模式110
7.2.1 可查詢操作111
7.2.2 冪等操作111
7.2.3 TCC操作112
7.2.4 可補償操作113
7.3 TCC解決方案113
7.3.1 適用場景114
7.3.2 需要實現的服務模式114
7.3.3 方案的執行流程114
7.3.4 方案的優缺點115
7.3.5 需要注意的問題116
7.4 可靠訊息最終一致性解決方案117
7.4.1 適用場景117
7.4.2 需要實現的服務模式117
7.4.3 方案的執行流程118
7.4.4 方案的優缺點119
7.4.5 需要注意的問題120
7.5 最大努力通知型解決方案120
7.5.1 適用場景120
7.5.2 需要實現的服務模式121
7.5.3 方案的執行流程121
7.5.4 方案的優缺點122
7.5.5 需要注意的問題122
7.5.6 最大努力通知與可靠訊息最終一致性的區別123
7.6 本章小結123
第三部分 分散式事務原理
第8章 XA強一致性分散式事務原理126
8.1 X/Open DTP模型與XA規範126
8.1.1 DTP模型126
8.1.2 XA規範127
8.1.3 JTA規範127
8.1.4 XA二階段提交128
8.2 MySQL對XA規範的支持129
8.2.1 MySQL XA事務的語法129
8.2.2 MySQL XID詳解129
8.2.3 MySQL XA事務的狀態130
8.2.4 MySQL XA的問題131
8.3 XA規範的問題思考132
8.3.1 XA規範的缺陷132
8.3.2 XA流程的最佳化與異常思考133
8.3.3 解決XA數據不一致的問題134
8.3.4 解決事務管理器的單點故障問題135
8.4 主流的解決方案135
8.5 本章小結136
第9章 TCC分散式事務原理137
9.1 TCC核心思想137
9.2 TCC實現原理139
9.2.1 TCC核心組成139
9.2.2 TCC核心原理140
9.3 TCC核心流程142
9.3.1 業務場景介紹142
9.3.2 Try階段流程143
9.3.3 Confirm階段流程144
9.3.4 Cancel階段流程145
9.4 TCC關鍵技術146
9.5 本章小結147
第10章 可靠訊息最終一致性分散式事務原理148
10.1 基本原理148
10.2 本地訊息表149
10.2.1 實現原理149
10.2.2 優缺點150
10.3 獨立訊息服務151
10.3.1 實現原理151
10.3.2 優缺點152
10.4 RocketMQ事務訊息153
10.4.1 實現原理153
10.4.2 RocketMQ本地事務監聽接口154
10.5 訊息傳送的一致性155
10.5.1 訊息傳送與確認機制155
10.5.2 訊息傳送的不一致性156
10.5.3 如何保證訊息傳送的一致性157
10.6 訊息接收的一致性158
10.6.1 訊息接收與確認機制158
10.6.2 訊息接收的不一致性159
10.6.3 如何保證訊息接收的一致性159
10.7 訊息的可靠性161
10.7.1 訊息傳送的可靠性161
10.7.2 訊息存儲的可靠性161
10.7.3 訊息消費的可靠性162
10.8 本章小結162
第11章 最大努力通知型分散式事務原理163
11.1 適用場景163
11.2 方案特點164
11.3 基本原理164
11.4 異常處理165
11.5 本章小結166
第四部分 分散式事務源碼與實戰
第12章 XA強一致性分散式事務解決方案源碼解析168
12.1 分散式數據一致性場景的搭建168
12.1.1 構建環境168
12.1.2 準備環境169
12.1.3 修改配置169
12.1.4 啟動171
12.1.5 驗證171
12.2 ShardingSphere對XA分散式事務方案的整合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事務初始化175
12.2.6 XA資源註冊176
12.3 ShardingSphere對Atomikos方案的實戰與源碼解析178
12.3.1 Atomikos-XA分散式事務初始化流程178
12.3.2 Atomikos-XA分散式事務Begin流程183
12.3.3 Atomikos-XA分散式事務資源註冊原理185
12.3.4 Atomikos-XA分散式事務Commit流程186
12.3.5 Atomikos-XA分散式事務Rollback流程191
12.3.6 Atomikos-XA分散式事務恢複流程193
12.4 ShardingSphere對Narayana方案的實戰與源碼解析198
12.4.1 Narayana環境搭建198
12.4.2 Narayana-XA分散式事務初始化流程199
12.4.3 Narayana-XA分散式事務Begin流程206
12.4.4 Narayana-XA分散式事務資源註冊208
12.4.5 Narayana-XA分散式事務Commit流程208
12.4.6 Narayana-XA分散式事務Rollback流程211
12.4.7 Narayana-XA分散式事務恢複流程212
12.5 本章小結216
第13章 Hmily-TCC分散式事務解決方案源碼解析217
13.1 Hmily-TCC分散式場景的搭建217
13.1.1 準備環境218
13.1.2 下載源碼並編譯220
13.1.3 修改配置220
13.1.4 啟動程式222
13.1.5 驗證223
13.2 Hmily框架初始流程源碼解析223
13.2.1 載入配置225
13.2.2 初始化事務日誌存儲229
13.2.3 初始化事務恢復調度器234
13.2.4 初始化事件分發器235
13.2.5 初始化Metrics監控信息236
13.3 Hmily-TCC分散式事務源碼解析238
13.3.1 Try流程源碼解析239
13.3.2 Confirm流程源碼解析253
13.3.3 Cancel流程源碼解析258
13.4 Hmily對RPC框架的支持261
13.4.1 對Dubbo框架的支持261
13.4.2 對Spring Cloud框架的支持263
13.4.3 對BRPC框架的支持265
13.4.4 對Motan框架的支持267
13.4.5 對gRPC框架的支持268
13.4.6 對Sofa-RPC框架的支持270
13.4.7 對Tars框架的支持272
13.5 Hmily-TCC事務恢復源碼解析273
13.5.1 邏輯處理274
13.5.2 事務恢復275
13.6 本章小結276
第14章 XA強一致性分散式事務實戰277
14.1 場景說明277
14.2 程式模組說明278
14.3 資料庫表設計278
14.4 程式實現279
14.4.1 項目搭建279
14.4.2 持久層的實現287
14.4.3 業務邏輯層的實現288
14.4.4 接口層的實現289
14.4.5 項目啟動類的實現290
14.5 測試程式290
14.6 本章小結292
第15章 TCC分散式事務實戰293
15.1 場景說明293
15.2 程式模組說明294
15.3 資料庫表設計295
15.4 實現項目公共模組297
15.4.1 項目搭建297
15.4.2 持久層的實現300
15.4.3 Dubbo接口的定義304
15.5 實現轉出銀行微服務305
15.5.1 項目搭建305
15.5.2 業務邏輯層的實現311
15.5.3 接口層的實現313
15.5.4 項目啟動類的實現313
15.6 實現轉入銀行微服務314
15.6.1 業務邏輯層的實現314
15.6.2 項目啟動類的實現315
15.7 測試程式316
15.8 本章小結318
第16章 可靠訊息最終一致性分散式事務實戰319
16.1 場景說明319
16.2 程式模組說明321
16.3 RocketMQ環境搭建與測試321
16.3.1 搭建Java環境321
16.3.2 搭建RocketMQ環境322
16.3.3 測試RocketMQ環境324
16.4 資料庫表設計326
16.5 實現訂單微服務328
16.5.1 項目搭建328
16.5.2 持久層的實現333
16.5.3 業務邏輯層的實現335
16.5.4 接口層的實現338
16.5.5 項目啟動類的實現338
16.6 實現庫存微服務339
16.6.1 項目搭建339
16.6.2 持久層的實現339
16.6.3 業務邏輯層的實現341
16.6.4 項目啟動類的實現343
16.7 測試程式343
16.8 本章小結345
第17章 最大努力通知型分散式事務實戰347
17.1 場景說明347
17.2 程式模組說明348
17.3 資料庫表設計348
17.4 實現賬戶微服務350
17.4.1 項目搭建350
17.4.2 持久層的實現355
17.4.3 業務邏輯層的實現358
17.4.4 接口層的實現360
17.4.5 啟動類的實現360
17.5 實現充值微服務361
17.5.1 項目搭建與持久層的實現361
17.5.2 業務邏輯層的實現361
17.5.3 接口層的實現362
17.5.4 啟動類的實現363
17.6 測試程式363
17.7 本章小結365

作者簡介

肖宇
分散式事務架構專家,Apache ShenYu(incubating)網關創始人,Dromara開源組織創始人,Hmily、RainCat、Myth等分散式事務框架的作者。Apache ShardingSphere Committer。
熱愛開源,追求優雅代碼。有豐富的微服務架構經驗,尤其擅長微服務技術棧中的分散式事務、微服務架構,分散式資料庫、API網關等解決方案。
冰河
網際網路高級技術專家、MySQL技術專家、分散式事務架構專家。
多年來,一直致力於分散式系統架構、微服務、分散式資料庫、分散式事務與大數據技術的研究,在高並發、高可用、高可擴展性、高可維護性和大數據等領域擁有豐富的架構經驗。
可視化多數據源數據異構中間件mykit-data作者;《海量數據處理與大數據技術實戰》和《MySQL技術大全:開發、最佳化與運維實戰》作者。

相關詞條

熱門詞條

聯絡我們