第一阶段:CanCommit(询问阶段):事务协调者向参与者发送事务执行请求,询问是否可以完成指令,参与者只需要回答是或者不是,会有超时机制;
** 第二阶段:PreComiit(准备阶段)**:事务协调者会根据参与者的反馈结果决定是否继续执行,如果在第一个阶段 CanCommit 都收到了请求的话,就开始执行写 redo 和 undo 日志,并且返回 ACK 给协调者,这里即是二阶段提交的第一阶段。
第三阶段:DoCommit(提交或回滚阶段):如果在第二阶段 PreCommit 提交成功以后,那么事务协调者会向所有的参与者发起事务提交指令,如果其中某个参与者返回失败,则执行终止指令回滚事务。
相比较二阶段提交协议,三阶段提交协议有以下不同:
1)增加了 CanCommit 阶段:可以尽早发现参与者无法执行的情况,及时中断;
2)增加了超时机制:参与者与事务协调者都引入了超时机制,一旦超时,事务协调者和参与者会继续提交事务,并且任务处于成功状态(因为在这种情况下事务默认为成功的可能性比较大),事实上,第三阶段提交协议下仍然可能出现不一致的情况(但是概率很小)
4.CAP 理论和 BASE 理论
1)CAP 定理**
CAP 定理,又称布鲁尔定理,简单来说就是指在分布式系统中不可能同时满足一致性(C:Consistency)、可用性(A:Availability)、分区容错性(P: Partition Tolerance)
C:数据在多个副本中保持一致,比如前面说的分布式数据一致性问题
A:系统对外提供的服务必须一直处于可用状态;
P:在分布式中遇到任何网络分区故障,系统仍然能够正常对外提供服务。
CAP 定理证明,在分布式系统中,要么满足 CP、要么满足 AP。不可能实现 CAP 或者 CA,原因是网络通信并不是绝对可靠的。而在分布式系统中即便出现网络故障也需要保证系统仍然能够正常对外提供服务,Partition Tolerance 是必然存在的,所以 P 是一定会有的,只有 C 与 A 不能同时兼得。
AP