2PC

2PC,是Two-Phase Commit 的缩写,也就是二阶段提交,是在数据库领域处理事务,保证原子性的一种常用算法。通常会把二阶段提交协议认为是一种一致性协议,在处理成功的时候统一执行事务,在处理失败的时候统一进行回滚,从而来有效的保证分布式数据的一致性。

协议说明

顾名思义,二阶段提交协议就是把事务的提交过程分为俩个阶段来进行处理,执行的过程如下:

  • 一、提交事务请求:
    协调者对所有的参与者发送事务内容并询问是否可以提交操作,并开始等待参与者的相应。参与者节点来执行事务操作,并把Undo和Redo的信息记录在日志中,当参与者成功的执行了事务就反馈给协调者Yes,表示事务可以执行;如果参与者没有成功的执行事务,那么就会反馈给协调者No相应,表示事务不可以执行。

  • 二、执行事务提交:
    当协调者从所有的参与者获得的反馈都是Yes的时候,就会执行事务的提交。协调者对所有的参与者发起一个Commit请求,当参与者收到了Commit请求之后就会正式的进行事务的提交,在完成了提交之后会反馈协调者一个Ack消息,当协调者收到了所有的Ack消息后完成事务。
    当协调者从所有的参与者获得的反馈包含了No,或者在等待超时之后没有获得所有的响应,就会中断事务,向所有的参与者发出rollback请求,参与者在收到了请求之后,回去查询在阶段一里记录的Undo信息来执行事务的回滚操作,并在完成回滚之后释放整个事务执行期间占用的资源,同样完成了回滚之后会反馈协调者一个Ack消息,当协调者收到了所有的Ack消息后完成事务中断。

优缺点

优点:原理简单,实现方便
缺点:同步阻塞,单点问题,数据不一致,太过保守。

缺点的前俩个都很容易理解,至于数据不一致的情况是在二阶段的commit的时候,可能有节点没有收到commit指令,于是出现了有的事务进行了提交,有的没有办法提交事务。太过保守则是任意一个节点的失败都会导致整个事务的失败。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容