1.一致性协议之两阶段协议

1.提交请求
依次询问参与者是否可以执行请求,如果参与者执行事物操作、并完成写入redo、uodo日之后,全部回答yes,将进入下一个阶段提交事物;如果参与者没有成功执行事物,就反馈协调者No响应,表示事物不可以提交,将进入下一个阶段提回滚事物。通过这一阶段最终会产生事物是否可以提交的决断。


image.png

2.提交事务-分为两种情况
(1)提交事务-一阶段的结果是可以提交事务
依次发送commit命令给各个参与者,参与者全部顺利收到(这里可能出现网络问题导致参与者没收到)commit命令,全部执行成功后返回ack给协调者,事物完成

image.png

(2)回滚事务
当任意参与者执行阶段一反馈no给协调者或者协调者超时等待


image.png

则会执行阶段二的事物中断操作,开始回滚事务如图。回滚事务时参与者执行undo日志后,反馈事物回滚结果,收到所有ack消息后完成事物中断。

image.png

两阶段协议存在的问题:

(1)协调者的单点问题:协调者被重度依赖整个二阶段的过程中,一旦发生问题将不能自动回滚或者释放资源等等

(2)同步阻塞:参与者在必须等待其它参与者的执行,无法进行其他操作

(3)数据不一致:比如提交事务阶段 协调者异常,谁也不能保证所有参与者都执行完成事物

(4)过于保守:参与者与协调者之间出现网络异常时,只能依赖等待超时机制,没有完善的容错机制

你可能感兴趣的:(1.一致性协议之两阶段协议)