分布式事务解决方案
大约 2 分钟
二阶段提交
强一致性设计,引入了”事务协调者“协调管理各个本地事务的提交和回滚。两个阶段分别是 准备 和 提交 。
准备: 将提交事务之前的事情全部执行完成
提交:所有本地参与者都准备完成的话 协调者会向所有参与者发送提交事务的命令,然后等到所有事务都提交成功 才能说事务执行成功。
情况1:准备阶段失败-协调者会告知所有参与者进行回滚 分布式事务执行失败
情况2:第二阶段的提交如果是 ”回滚事务“ 那么需要不断重试 直到成功 不然在第一阶段准备成功的参与者都会一致阻塞。
情况3:第二阶段的提交如果是 ”提交事务“ 那么也是不断重试
可以看到进入第二阶段就没法返回了,只能往前冲
总结: 2PC是一种 尽量保证强一致性的分布式事务,因此它是同步阻塞的。既然是同步那么就会导致效率低下,并且存在单点故障,极端条件下还可能会数据不一致。
三阶段提交
从名字可以看出在二阶段上添加一个阶段,那么其实 3PC的出现就是解决 2PC的一些问题,例如 参与者中引入了超时机制,并且新增了一个阶段使得利用这个阶段去统一各自的状态。
不会再准备阶段就锁资源,减少了资源被锁的时间范围
预提交阶段可以看成一个节点,所有参与者只要到达该点就意味都准备好了并有响应
2PC中如果协调者一直不发送提交命令,参与者会一直阻塞,而3PC针对该问题引入了超时机制
超时机制:等待提交命令超时,参与者会提交事务,是走提交事务操作还是回滚操作不晓得