分布式事务--二阶段提交

二阶段提交

2PC,使分布式系统架构下所有节点在进行事务处理过程中保存原子性和一致性的一种算法。

2PC是强一致性。分为两个阶段:投票  和  执行  两个阶段

第一阶段:(投票阶段)

1、事务询问:协调者向参与者发送事务内容,询问是否可以提交。并等待响应。

2、执行事务:各参与者节点执行事务。并向Undo和Redo信息记录事务日志中

3、反馈响应:成功执行事务,返回yes,表示事务可以执行。不成功返回no

第二阶段:(事务提交阶段)

此阶段分为两种情况:事务提交  和  事务中断

事务提交:各参与者都反馈yes

1、请求提交:协调者向参与者发送commit请求

2、事务提交:各参与者接收到commit后,正式执行事务提交操作。完成后释放占用资源。

3、反馈结果:向协调者发送Ack消息

4、完成事务:协调者收到全部参与者的Ack消息后,完成事务

中断事务:任何一个参与者返回no响应或是响应超时

1、请求回滚:协调者向参与者发送Rollback请求

2、事务回滚:参与者接收到Rollback请求后,利用一阶段记录中的Undo信息来执行事务回滚操作。完成后释放占用资源

3、反馈响应:向协调者发送Ack消息

4、中断事务:协调者收到所用参与者的Ack消息后,完成中断

二阶段提交优点:原理简单,实现方便

二阶段提交缺点:同步阻塞、单点问题、脑裂、太过保守

1、同步阻塞

二阶段提交过程中,所有参与该事物操作的逻辑都处于阻塞状态。各参与者等待其他参与者响应的过程中。将无法进行其他操作。

2、点单问题

协调者一旦出现问题,整个二阶段提交过程都无法进行。如果协调者是在阶段二中出现问题,那么参与者将会一直处于锁定事务资源的状态中。而无法完成事务操作。

3、脑裂(数据不一致)

当协调者向所有参与者commit请求后,发送局部网络异常或协调者尚未发送完commit请求之前自身发送崩溃。导致只有部分参与者收到commi请求。这部分收到请求的参与者就会进行事务提交。没收到请求的无法事务提交。造成数据分布式系统数据不一致。

4、太过保守

协调者指示参与者进行事务提交询问的过程中,参与者出现故障而导致协调者始终无法获取到所有参与者的响应信息。协调者只能依靠自身的超时机制来判断是否需要中断事务,这样做有些保守。因为二阶段提交没有容错机制,

猜你喜欢

转载自blog.csdn.net/RuningSun/article/details/81352673