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

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消息后,完成事物中断。

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

问:何为"参与者"?何为"协调者"?它们之间的关系是怎样的?

答:当一个事务操作需要跨越多个分布式节点的时候,为了保持事务的ACID特性,需要引入"协调者"来统一调度所有分布式节点的执行逻辑,这些被调度的分布式节点称为"参与者"。协调者负责调度参与者的行为,并最终决定这些参与者是否要把事务进行真正提交。


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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值