分布式事务(一)原理概览html
分布式事务(二)JTA规范mysql
分布式事务(四)简单样例spring
分布式事务(五)源码详解sql
分布式事务(六)总结提升数据库
分布式历来都不是简单的东西。为此写本系列文章也耗费了笔者大量脑细胞,从第一节3月底到总结篇的6月初,耗时2个多月...用经验,结合学习、测试,总算完结了。编程
本系列从原理、规范、组件支撑、简单样例、源码剖析多角度分析分布式事务,让你们对分布式事务有正确的概念,行之有效的实操能力、经常使用解决方案,底层源码的深刻剖析。服务器
若是说分布式事务这一块100分的话,理论最少占了40%,实践只占60%甚至更少。一个成熟的程序员应该清楚,分布式这一块有哪些概念原理,常看法决方案。遇到问题能够一眼就看破虚妄,找到问题所在,甚至直接脑子里就有对应的实现方案。异步
对于分布式事务,常见问题:数据库设计
事务(Transaction)是数据库区别于文件系统的重要特性之一。目前国际承认的数据库设计原则是ACID特性,用以保证数据库事务的正确执行。Mysql的innodb引擎中的事务就彻底符合ACID特性。
事务根据业务场景不一样可分为本地事务,分布式事务。
当须要多个增删改业务操做,同时成功或失败回滚时。若是操做的是一个RM(资源管理器),那么就是本地事务。若是操做多个RM,那就是分布式事务。
大部分状况下,一个服务操做一个数据库,这就是本地事务(本地事务飞机票)。ACID特性由数据库提供支持,好比mysql innodb引擎。以下图所示(网上的图,挺好直接用):
spring 提供了2种方式实现:
当遇到复杂业务调用时,可能会出现跨库多资源调用(一个事务管理器,多个资源)/多服务调用(多个事务管理器,多个资源),指望所有成功或失败回滚,这就是分布式事务,用以保证“操做多个隔离资源的数据一致性”。
分布式业务场景下,诞生了DTP模型、XA协议,以及引伸出来的TM与RM之间的二阶段提交、三阶段提交。以及后来的CAP理论,BASE理论,大部分状况下为了追求性能,咱们不会追求强一致性。
强一致性:若是应用服务器不支持分布式事务,那么能够借助第三方事务管理器实现,好比分布式事务(四)简单样例Spring Boot+Atomikos(TM)+Mybatis(ORM)+Mysql(DB)。
最终一致性:多种解决方案(具体见分布式事务(一)原理概览第六节)
1.分布式的场景不少,不可能把每种源码都写出来。好比第一章的”最终一致性解决方案“,没有附上相关源码,读者能够根据方案介绍自行实现。
2.我的能力有限,有写的不对的地方,烦请指出,共同提升,壮哉我大Java!