分布式事务原子性之2PC,XA,TCC协议及其区别
1 目的
本地事务(单机)基于ACID原则,那么在分布式环境下,如何保证多事务的一致性?本文将介绍两阶段提交协议和基于两阶段思想的XA协议,TCC协议,用于解决分布式事务中的原子性。
2 面向数据库领域的二阶段提交协议
- 2PC,面向数据库领域
- 简介:分为准备和提交两个阶段。
- 准备阶段,协调组询问所有参与者是否准备好了。对于数据库来说,准备操作是在重做日志中记录全部事务提交操作所要做的内容,它与本地事务中真正提交的区别只是暂不写入最后一条 Commit Record。这意味着在做完数据持久化后并不会立即释放隔离性,也就是仍继续持有锁,维持数据对其他非事务内观察者的隔离状态
- 执行阶段,如果所有参与者都回复准备好了,协调者就向所有参与者发送执行命令;如果有一个参与者回复没准备好,协调者就向所有参与者发送撤销命令。
- 二阶段提交是CAP中偏向ACID中C的协议,它要求要么全部执行,如果有一个节点失效,就全部不执行,是很强的一致性要求。
- 优点:
- 尽量保证了数据的强一致性
- 借助了数据库的提交和回滚操作,不侵入业务逻辑
- 缺点:
- 单点故障问题,协调者挂了,尤其在第二阶段的时候参与者资源都锁着时候影响更大。
- 同步阻塞,所有节点在执行时是同步阻塞的
- 数据不一致问题,例如网络分