目录
一、2PC
1.1、提交事务请求(投票阶段)
事务询问->执行事务->反馈事务询问
事务询问:由协调者向所有参与者发送事务内容,询问是否可以执行事务提交操作
执行事务:由参与者执行事务操作,并将Undo(拒绝)和Redo(准备好,将要操作)信息记入事务日志中
反馈事务询问:由参与者给协调者反馈给协调者事务的执行结果,如果执行成功反馈YES,否者反馈NO
1.2、执行事务提交
该阶段拥有两种操作:执行事务提交、中断事务
执行事务提交:发送提交请求->事务提交->反馈事务提交结果->完成事务
中断事务:发送回滚请求->事务回滚->反馈事务回滚结果->中断事务
总结:二阶段提交将事务处理过程分成两个过程,分别是投票和执行两个阶段,其核心是对每个事务先尝试后提交的处理方式,该提交方式是一个强一致性的算法。
优点:原理简单、实现方便
缺点:同步阻塞、单点问题、脑裂、太过保守
二、3PC
21、CanCommit(提交询问)
事务询问:协调者向参与者发送一个包含事务内容的CanCommit请求,询问是否可执行事务提交操作
反馈事务询问结果:参与者返回CanCommit询问结果
2.2、PreCommit
包含两种操作:执行事务预提交和中断事务
执行事务预提交:发送预提交请求->参与者事务预提交->参与者反馈预提交结果
中断事务:发送中断请求->中断事务
2.3、DoCommit(事务提交)
包含两种操作:执行提交、中断事务
执行提交:发送提交请求->事务提交->反馈事务提交结果->完成事务
中断事务:发送中断请求->事务回滚->反馈事务回滚结果->中断事务
总结:相比于两阶段提交,增加一个询问阶段,该阶段的好处是可以让协调者尽早的发现发问题。同时在询问阶段不会锁定资源,降低资源的锁定范围。