对于分布式事务,相信所有人都应该很了解,为什么会有分布式事务?无论是数据量导致的分库,还是现在微服务盛行的场景都是他出现的原因。
这一篇内容还是避免不了俗套,主要的范围无非是XA、2PC、3PC、TCC,再最后到Seata。
但是,我认为这东西,只是适用于面试和理论的了解,你真要说这些方案实际生产中有人用吗?
有,但是会实现的更简单,不会套用理论来实现,大厂有大厂的解决方案,中小公司用框架或者压根就不存在分布式事务的问题。
那,为什么还要写这个?
为了你面试八股文啊,小可爱。
事务
要说分布式事务,首先还是从事务的基本特征说起。
A原子性:在事务的执行过程中,要么全部执行成功,要么都不成功。
C一致性:事务在执行前后,不能破坏数据的完整性。一致性更多的说的是通过AID来达到目的,数据应该符合预先的定义和约束,由应用层面来保证,还有的说法是C是强行为了ACID凑出来的。
I隔离性:多个事务之间是互相隔离的,事务之间不能互相干扰,涉及到不同事务的隔离级别的问题。
D持久性:一旦事务提交,数据库中数据的状态就应该是永久性的。
XA
XA(eXtendedArchitecture)是指由XOpen组织提出的分布式事务处理的规范,他是一个规范或者说是协议,定义了事务管理器TM(TransactionManager),资源管理器RM(ResourceManager),和应用程序。
事务管理器TM就是事务的协调者,资源管理器RM可以认为就是一个数据库。
2PC
XA定义了规范,那么2PC和3PC就是他的具体实现方式。
2PC叫做二阶段提交,分为投票阶段和执行阶段两个阶段。
投票阶段
TM向所有的参与者发送prepare请求,询问是否可以执行事务,等待各个参与者的响应。
这个阶段可...
(全文)