分布式事务

1、两阶段

角色

协调者
参与者

两阶段

第一阶段

协调者将任务发送给每一个参与者,参与者执行,但不提交,并把执行结果返回给协调者

第二阶段

协调者收到参与者返回的结果,
如果结果是《全部都返回了可以执行》,此时,协调者向所有参与者发送commit,参与者执行commit,然后把结果返回给协调者
如果结果是《一个或多个返回不可以执行》,此时,协调者向所有参与者发送rollback,参与者执行rollback,然后把结果返回给协调者

缺点

1、执行过程中,所有节点都是事务阻塞的
2、协调者如果挂了,参与者会一直阻塞下去
3、如果由于网络原因有个别参与者没有收到commit,那么会导致数据不一致

特点

协调者拥有超时机制,即如果在一定时间内没有收到参与者返回的消息则默认失败

三阶段

简述

三阶段针对两阶段的缺点,做出改进,将2PC的第一阶段拆分,并且在协调者和参与者中都引入超时机制。

第一阶段

协调者向所有参与者发送任务cancommit请求,询问是否可以执行
参与者收到任务后,判断是否可以执行,并把结果返回给协调者

第二阶段

协调者收到多个参与者的返回结果,
如果全为yes,则向所有参与者发送precommit,所有参与者执行precommit,并把执行结果返回给协调者
否则,向所有参与者发送rollback,所有参与者执行rollback,并把执行结果返回给协调者

第三阶段

协调者收到多个参与者的返回结果,
如果全为yes,向所有参与者发送docommit请求,参与者执行docommit,释放资源,并把执行结果返回给协调者
否则,向所有参与者发送rollback请求,参与者执行rollback,释放资源,并把执行结果返回给协调者

优劣势

1、减小了参与者阻塞的范围,在出现单点故障后仍然能达成一致
2、第三阶段,协调者发送rollback,网络原因导致个别参与者没有收到rollback,则这些参与者超时后会提交,导致数据不一致

posted @ 2019-07-10 11:54  马崮蚂蚁哥  阅读(213)  评论(0编辑  收藏  举报