分布式事务实现方案

1. 前言

由集中式应用到分布式应用的转变,带来了诸多的变化,虽然分布式应用解决了单体应用复杂性高、可靠性差、扩展能力受限等诸多问题,但原来在单体应用中容易实现的特性,在分布式应用中不再那么轻松实现,比如事务,锁等场景。这带来了很大的挑战。通过不断的探索,每种问题都有不同程度的解决方案。

分布式系统文章集合:

消息中间件(解耦利器)

分布式锁

分布式事务

分布式一致性

分布式存储

分布式Session

分布式计算

分布式调度

2. 分布式事务的挑战

事务是提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚。

2.1 数据库事务的特性

ACID 指数据库事务正确执行的四个基本特性的缩写,包含:

原子性(Atomicity):整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。

一致性(Consistency):在事务开始之前和事务结束以后,数据库数据的一致性约束没有被破坏。

隔离性(Isolation):数据库允许多个并发事务同时对数据进行读写和修改的能力,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。

持久性(Durability):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

在使用数据库事务时需要注意,尽可能短的保持事务,修改多个不同表的数据的冗长事务会严重妨碍系统中的所有其他用户,这很有可能导致一些性能问题。

2.2 JTA & JTS & Spring事务

2.3 分布式事务

分布式系统一般由多个独立的子系统组成,多个子系统通过网络通信互相协作配合完成各个功能。有很多用例会跨多个子系统才能完成,而且这个过程中会涉及到事务的概念,即保证交易系统和支付系统的数据一致性,此处我们称这种跨系统的事务为分布式事务。

3. 参考资料

阿里分布式事务框架 GTS 全解析
https://mp.weixin.qq.com/s/BqhGZDmTYLHlBCGBBOc-xg

深入理解「分布式事务」
https://mp.weixin.qq.com/s/_iGYAgx_CSxIHBMLtwbpNg

还不理解“分布式事务”?这篇给你讲清楚:
http://developer.51cto.com/art/201812/588511.htm

JTA 深度历险 - 原理与实现:
http://www.cnblogs.com/firstdream/p/8514222.html

分布式系统核心问题(一致性):
https://blog.csdn.net/zyhlwzy/article/details/78658002

CAP原则(CAP定理)、BASE理论:
http://www.cnblogs.com/duanxz/p/5229352.html

RocketMQ分布式消息队列设计:
http://rocketmq.apache.org/docs/quick-start/

=====

Java常用类(一)之Object类详解
https://www.cnblogs.com/zhangyinhua/p/7715486.html

java-并发-ConcurrentHashMap高并发机制-jdk1.6
https://blog.csdn.net/jianghuxiaojin/article/details/52006110

Java并发编程总结4——ConcurrentHashMap在jdk1.8中的改进
http://www.cnblogs.com/everSeeker/p/5601861.html

重入锁:ReentrantLock 详解
https://blog.csdn.net/Somhu/article/details/78874634

Java中Unsafe类详解
https://www.cnblogs.com/thomas12112406/p/6510787.html
https://www.cnblogs.com/throwable/p/9139947.html

Java魔法类:sun.misc.Unsafe
https://www.cnblogs.com/suxuan/p/4948608.html

红黑树(一)之 原理和算法详细介绍
https://www.cnblogs.com/skywang12345/p/3245399.html