2 PC 和 3 PC

134 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第30天,点击查看活动详情

2PC

第一阶段:准备阶段

TM询问RM是否可以执行提交操作,并等待各RM响应

RM执行所有事务,并将undo信息和redo信息写入日志

第二阶段:提交阶段

情况一:RM都回复yes

1、TM向RM发送commit通知;

2、RM收到通知,执行提交操作,即commit操作,释放资源;

3、RM发送ACK消息

情况二和三:TM等待响应超时、RM中有一个回复no

1、TM向RM发送Rollback通知,请求回滚资源;

2、RM收到事务回滚通知之后执行rollback操作,

3、RM返回rollback信息

2PC需要三个接口。Commit、Prepare、Rollback,也就是XA协议

人工补偿方案

提交的时候有一个失败了怎么办?

一个commit成功,一个网络失败,导致它没有成功,这时候进行人工补偿。定时任务去执行

缺点

1、单点问题:

阶段2的时候,如果TM宕机了,RM就无法收到事务提交或者回滚的信息,那么一直处于阻塞状态,会一直消耗着资源

2、性能

阶段一的时候,一旦锁定资源后,都需要所有节点返回才能进入下一阶段,不能很好地应对高并发场景。

3、数据不一致

假设第二阶段后,TM发出commit通知,但是由于网络问题,一部分RM没有收到,这就导致了他们一直处于阻塞阶段,导致数据的不一致。

4、局限性,二阶段提交主要用在两个数据库之间(数据库实现了XA协议),但现在的业务,比如支付宝转账,是两个系统之间的转账,而不是底层两个数据库之间的交互,所以没办法使用2PC

3PC

在第二阶段缺少超时设置,第二阶段只有协调者有超时时间

参与者没有超时机制,协调者挂了,参与者还在等着

所以3阶段进行了改进,协调者参与者都有超时机制,如果参与者第三阶段迟迟等不到消息,就提交。

第三次的意义就是事务的完整性