一、什么是分布式事务?
分布式事务指的是参与分布式事务的资源服务器分别部署在分布式系统的不同节点上,分布式事务要保证所有的资源管理器要么都提交事务,要么都回滚事务。
二、分布式事务产生背景
- 数据库的拆分: 随着业务数据规模的快速发展,数据量越来越大,单库单表逐渐成为瓶颈,对数据库进行了水平拆分,将原单库单表拆分成数据库分片,分库分表之后,原来在一个数据库上就能完成的写操作,可能就会跨多个数据库,这就产生了跨数据库事务问题。
- 业务服务化拆分: 随着业务的快速发展,系统的访问量和业务复杂程度都在快速增长,单系统架构逐渐成为业务发展瓶颈,解决业务系统的高耦合、可伸缩问题的需求越来越强烈,将单业务系统拆分成多个业务系统,降低了各系统之间的耦合度,使不同的业务系统专注于自身业务,更有利于业务的发展和系统容量的伸缩。服务拆分后,一个完整的业务往往需要调用多个服务,如何保证多个服务间的数据一致性成为一个难题。
三、分布式理论之CAP定理
- 一致性(Consistence): 在分布式系统中的数据在多个副本之间能否保证一致性。
- 可用性(Availability): 系统提供的服务必须处于一直可用状态,对于用户的操作能够在有限的时间内返回结果。
- 分区容忍性(Partition tolerance): 分布式系统在遇到任务网络分区故障,任然能够对外提供一致性和可用性的服务,除非整个网路都出现故障。
四、分布式理论之BASE理论
- 基本可用: 指分布式系统在出现不可预知故障的时候,允许损失部分可用性。
- 软状态(Soft state): 指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。
- 最终一致性(Eventually consistent): 系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。
五、分布式一致性协议2PC
2PC:即二阶段提交,将事务的提交分成两部分,由事务的协调者来觉得事务的提交或者回滚。
六、分布式事务之业务角色
七、分布式事务解决方案
- XA模式: XA是数据库通信协议,是实现事务管理器和资源管理器之间通信的桥梁,是基于二阶段提交实现的强一致性分布式事务。
- AT模式: AT模式不需要数据库支持XA协议,是基于二阶段提交实现的弱一致性分布式事务。
- TCC模式: tcc全称是try、confirm、cancel是基于二阶段提交的弱一致性分布式事务。
- Saga模式: 是基于二阶段提交来实现弱一致性分布式事务,是一种长事务模式的实现方式,业务的执行、提交和回滚是依靠流程图来实现,通过流程图来实现业务流程的编排。
Saga 是一种补偿协议,在 Saga 模式下,分布式事务内有多个参与者,每一个参与者都是一个冲正补偿服务,需要用户根据业务场景实现其正向操作和逆向回滚操作。 分布式事务执行过程中,依次执行各参与者的正向操作,如果所有正向操作均执行成功,那么分布式事务提交。如果任何一个正向操作执行失败,那么分布式事务会退回去执行前面各参与者的逆向回滚操作,回滚已提交的参与者,使分布式事务回到初始状态。
7、XA|AT|TCC|SAGA模式的优缺点
- XA模式: XA属于强一致事务,依赖数据库是否支持XA协议,和数据库绑定太强。
- AT模式: 基于二阶段提交演化,并不需要数据库一定要支持XA协议,事务的回滚依赖undo_log的反向补偿。代码侵入性小,Seata默认支持模式。
- TCC模式: 基于二阶段提交演化,并不需要数据库一定要支持XA协议,事务的回滚需要编写响应代码来实现,相对AT模式代码的侵入性要高。
- SAGA模式: 基于二阶段提交演化,并不需要数据库一定要支持XA协议 ,基于流程引擎来实现,适用于长流程事务。