分布式系统-6-两阶段提交

上节知识准备:Raft

前面我们聊到单个集群的一致性算法,今天我们来聊聊多集群分布式事务算法:两阶段提交。这个算法主要保证了事务的原子性,即各个集群的操作要全做,要么全不做。

可将多个集群视为参与者,引入第三方协调者,由协调者收集各个参与者对某个操作的预执行情况,然后决定要通知各个参与者 commit 还是 rollback。

所以所谓的两阶段是指准备阶段和执行阶段,举个例子,首先A将成为该活动的协调者,B、C和D将成为该活动的参与者。准备阶段:A发邮件给B、C和,提出下周三去爬山,问是否同意。那么此时A需要等待B、C和D的回复。B、C和D分别查看自己的日程安排表。B、C发现自己在当日没有活动安排,则发邮件告诉A他们同意下周三去爬长城。由于某种原因,D白天没有查看邮件。那么此时A、B和C均需要等待。到晚上的时候,D发现了A的邮件,然后查看日程安排,发现下周三当天已经有别的安排,那么D回复A说活动取消吧。此时A收到了所有活动参与者的邮件,并且A发现D下周三不能去爬山。那么A将发邮件通知B、C和D,下周三爬长城活动取消。此时B、C回复A“太可惜了”,D回复A“不好意思”。至此该事务终止。

但是这其中要面临的故障有:

  1. 事务参与者发生故障。给每个事务设置一个超时时间,如果某个事务参与者一直不响应,到达超时时间后整个事务失败。

  2. 协调者发生故障。协调者需要将事务相关信息记录到操作日志并同步到备用协调者,假如协调者发生故障,备用协调者可以接替它完成后续的工作。如果没有备用协调者,协调者又发生了永久性故障,事务参与者将无法完成事务而一直等待下去。

你可能感兴趣的:(分布式系统-6-两阶段提交)