欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

一致性协议-二阶段提交协议(2PC)解析

程序员文章站 2022-03-16 16:22:46
2PC是 Two-Phase Commit的缩写,即二阶段提交。二阶段提交协议是数据库领域,为了使分布式系统所有节点在事务处理过程中能够保证原子性和一致性的一种算法。目前,在绝大多数的关系型数...

2PCTwo-Phase Commit的缩写,即二阶段提交。二阶段提交协议是数据库领域,为了使分布式系统所有节点在事务处理过程中能够保证原子性和一致性的一种算法。目前,在绝大多数的关系型数据库都是采用二阶段提交协议来完成分布式事务处理的。

二阶段提交协议具体过程如下:

阶段一:提交事务请求:

1.事务询问:协调者向所有的参与者发送事务内容,询问是否可以进行事务提交,并开始等待各参与者的响应。

2.执行事务:各参与者节点执行事务操作,并将"未做"和"已做"信息记录事务日志中。

3.各参与者向协调者反馈事务询问的响应:如果参与者成功执行了事务操作,就反馈Yes响应,表示事务可以执行;如果参与者没有成功执行事务操作,就反馈No响应,表示事务不可以执行。

阶段一也称为投票阶段,即各参与者投票表明是否要继续执行接下去的事务提交操作。

阶段二:执行事务提交:

包含以下两种可能:

①执行事务提交:

假如所有的参与者反馈都是Yes响应,那么就执行事务提交。

1.发送提交请求:协调者向所有参与者节点发出Commit请求。

2.事务提交:参与者接收到Commit请求后,会正式执行事务提交操作,并在完成提交之后释放所占用的事物资源。

3.反馈事务提交结果:参与者在完成事务提交之后,向协调者发送Ack消息。

4.完成事务:协调者接收到所有参与者反馈的Ack消息后,完成事务。

②事物中断:

假如任何一个参与者向协调者反馈了No响应,或者在等待超时之后,协调者尚无法接收到所有参与者的反馈消息,就会中断事务。

1.发送回滚请求:协调者向所有参与者节点发送Rollback请求。

2.事务回滚:参与者接收到Rollback请求后,会利用其在阶段一中记录的"未做"信息来执行事务回滚操作,并在完成回滚之后释放占用的资源。

3.反馈事务回滚结果:参与者在完成事务回滚之后,向协调者发送Ack消息。

4.中断事务:协调者接收到所有参与者反馈的Ack消息后,完成事物中断。

以上就是二阶段提交协议的具体过程。二阶段提交将一个事务的处理过程分为投票和执行两个阶段,核心是对每一个事务都采用了先尝试后提交的处理方式。

优点:原理简单,实现方便。

缺点:同步阻塞、单点问题、脑裂、太过保守。