无论是传统的单体架构,还是目前主流的分布式架构,事务都是绕不开的技术难题。本书从基本概念到原理介绍,再到主流的解决方案,系统地梳理了分布式事务的核心知识,既有理论,又有实战,对于微服务设计有很好的指导意义,也是市面上围绕这一主题少见的有深度的好书。
——骆俊武 京东新零售业务机构负责人
推荐语
序
前言
第一部分 分布式事务基础
第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.4MySQL事务基础7
1.4.1 并发事务带来的问题7
1.4.2MySQL事务隔离级别9
1.4.3MySQL中各种事务隔离级别的区别10
1.4.4MySQL事务隔离级别最佳实践11
1.4.5MySQL中锁的分类19
1.4.6 死锁的产生和预防23
1.4.7MySQL中的死锁问题24
1.4.8InnoDB中的MVCC原理25
1.5 本章小结28
第2章 MySQL事务的实现原理29
2.1Redo Log29
2.1.1Redo Log基本概念29
2.1.2Redo Log基本原理30
2.1.3Redo Log刷盘规则30
2.1.4Redo Log刷盘最佳实践32
2.1.5Redo Log写入机制34
2.1.6Redo Log的LSN机制35
2.1.7Redo Log相关参数36
2.2Undo Log36
2.2.1Undo Log基本概念36
2.2.2Undo Log存储方式37
2.2.3Undo Log基本原理37
2.2.4Undo Log实现MVCC机制37
2.2.5Undo Log相关参数40
2.3BinLog41
2.3.1BinLog基本概念41
2.3.2BinLog记录模式41
2.3.3BinLog文件结构42
2.3.4BinLog写入机制43
2.3.5BinLog组提交机制43
2.3.6BinLog与Redo Log的区别45
2.3.7BinLog相关参数45
2.4MySQL事务流程46
2.4.1MySQL事务执行流程46
2.4.2MySQL事务恢复流程47
2.5MySQL中的XA事务48
2.5.1XA事务的基本原理48
2.5.2MySQL XA事务语法49
2.5.3JDBC操作MySQL XA事务52
2.6 本章小结54
第3章 Spring事务的实现原理55
3.1Spring事务原理55
3.1.1JDBC直接操作事务55
3.1.2 使用Spring管理事务56
3.1.3Spring事务分类57
3.1.4Spring事务超时57
3.1.5Spring事务回滚规则57
3.2Spring事务三大接口57
3.2.1PlatformTransactionManager接口57
3.2.2TransactionDefinition接口58
3.2.3TransactionStatus接口60
3.3Spring事务隔离级别61
3.4Spring事务传播机制62
3.4.17种事务传播机制类型62
3.4.2 常用的事务传播类型65
3.5Spring事务嵌套最佳实践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.6Spring事务失效的场景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.4SOA架构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.1CAP理论94
5.1.1 一致性94
5.1.2 可用性95
5.1.3 分区容忍性95
5.1.4CAP的组合96
5.2Base理论97
5.3 本章小结98
第二部分 分布式事务解决方案
第6章 强一致性分布式事务解决方案100
6.1 强一致性事务概述100
6.1.1 典型方案100
6.1.2 适用场景101
6.1.3 优缺点101
6.2DTP模型101
6.2.1DTP模型的重要概念101
6.2.2DTP模型的执行流程102
6.32PC模型102
6.3.12PC模型的执行流程103
6.3.2 事务执行成功的流程103
6.3.3 事务执行失败的流程104
6.3.42PC模型存在的问题105
6.43PC模型105
6.4.1 事务执行成功的流程105
6.4.2 事务执行失败的流程106
6.4.33PC模型中存在的问题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.3TCC操作112
7.2.4 可补偿操作113
7.3TCC解决方案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.1X/Open DTP模型与XA规范126
8.1.1DTP模型126
8.1.2XA规范127
8.1.3JTA规范127
8.1.4XA二阶段提交128
8.2MySQL对XA规范的支持129
8.2.1MySQL XA事务的语法129
8.2.2MySQL XID详解129
8.2.3MySQL XA事务的状态130
8.2.4MySQL XA的问题131
8.3XA规范的问题思考132
8.3.1XA规范的缺陷132
8.3.2XA流程的优化与异常思考133
8.3.3 解决XA数据不一致的问题134
8.3.4 解决事务管理器的单点故障问题135
8.4 主流的解决方案135
8.5 本章小结136
第9章 TCC分布式事务原理137
9.1TCC核心思想137
9.2TCC实现原理139
9.2.1TCC核心组成139
9.2.2TCC核心原理140
9.3TCC核心流程142
9.3.1 业务场景介绍142
9.3.2Try阶段流程143
9.3.3Confirm阶段流程144
9.3.4Cancel阶段流程145
9.4TCC关键技术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.4RocketMQ事务消息153
10.4.1 实现原理153
10.4.2RocketMQ本地事务监听接口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.2ShardingSphere对XA分布式事务方案的整合172
12.2.1ShardingTransactionManager接口172
12.2.2XATransactionManager接口174
12.2.3DataSourceSwapper类174
12.2.4XAConnectionWrapper接口175
12.2.5XA事务初始化175
12.2.6XA资源注册176
12.3ShardingSphere对Atomikos方案的实战与源码解析178
12.3.1Atomikos-XA分布式事务初始化流程178
12.3.2Atomikos-XA分布式事务Begin流程183
12.3.3Atomikos-XA分布式事务资源注册原理185
12.3.4Atomikos-XA分布式事务Commit流程186
12.3.5Atomikos-XA分布式事务Rollback流程191
12.3.6Atomikos-XA分布式事务恢复流程193
12.4ShardingSphere对Narayana方案的实战与源码解析198
12.4.1Narayana环境搭建198
12.4.2Narayana-XA分布式事务初始化流程199
12.4.3Narayana-XA分布式事务Begin流程206
12.4.4Narayana-XA分布式事务资源注册208
12.4.5Narayana-XA分布式事务Commit流程208
12.4.6Narayana-XA分布式事务Rollback流程211
12.4.7Narayana-XA分布式事务恢复流程212
12.5 本章小结216
第13章 Hmily-TCC分布式事务解决方案源码解析217
13.1Hmily-TCC分布式场景的搭建217
13.1.1 准备环境218
13.1.2 下载源码并编译220
13.1.3 修改配置220
13.1.4 启动程序222
13.1.5 验证223
13.2Hmily框架初始流程源码解析223
13.2.1 加载配置225
13.2.2 初始化事务日志存储229
13.2.3 初始化事务恢复调度器234
13.2.4 初始化事件分发器235
13.2.5 初始化Metrics监控信息236
13.3Hmily-TCC分布式事务源码解析238
13.3.1Try流程源码解析239
13.3.2Confirm流程源码解析253
13.3.3Cancel流程源码解析258
13.4Hmily对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.5Hmily-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.3Dubbo接口的定义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.3RocketMQ环境搭建与测试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
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
再分享一波我的Java面试真题+视频学习详解+技能进阶书籍
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
6.3RocketMQ环境搭建与测试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
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-WcGDI7pl-1713535547121)]
[外链图片转存中…(img-X7c3TZZ1-1713535547122)]
[外链图片转存中…(img-ZXu0SHYn-1713535547122)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
再分享一波我的Java面试真题+视频学习详解+技能进阶书籍
[外链图片转存中…(img-y8Ytm4fk-1713535547123)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!