文章目录
问题
在分布式系统中,各个节点之间在物理上相互独立,通过网络进行沟通和协调。
在关系型数据库中,由于存在事务机制,可以保证每个独立节点上的数据操作满足 ACID。
但是,相互独立的节点之间无法准确的知道其他节点中的事务执行情况,所以在分布式的场景下,如果不添加额外的机制,多个节点之间理论上无法达到一致的状态。
在分布式事务中,两阶段和三阶段提交是经典的一致性算法,那么两阶段和三阶段提交的具体流程是怎样的,三阶段提交又是如何改进的呢?
协调者统一调度
在分布式事务中,如果想让分布式部署的多台机器中的数据保持一致性,就要保证在所有节点的数据写操作,要么全部都执行,要么全部都不执行。
但是,一台机器在执行本地事务的时候无法知道其他机器中本地事务的执行结果,节点并不知道本次事务到底应该 Commit 还是 Rollback。
上篇介绍的几种一致性算法 ,都是通过一个 Leader 进程进行协调,在 2PC(两阶段)和 3PC(三阶段)中也是一样的解决办法。
二阶段和三阶段提交协议都是引入了一个协调者的组件来统一调度所有分布式节点的执行,让当前节点知道其他节点的任务执行状态