分布式一致性协议--二阶段提交

2PC Two-Phase Commit  ,即二阶段提交,是计算机网络尤其是在数据库领域内,为了使基于分布式系统架构下的所有节点在进行事务处理过程中保持原子性和一致性的算法。

二阶段提交协议也被认为是一种一致性协议,用来保证分布式提醒数据库的一致性。目前,绝大多数的关系型数据库都是采用二阶段提交协议来完成分布式事务处理的,利用该协议能够非常方便地完成所有分布式事务参与者的协调,统一决定事务的提交或者回滚,从而能够有效地保证分布式数据一致性,因此,二阶段提交协议被广泛地应用在许多分布式系统中。
优点:原理简单,实现方便
 缺点:同步阻塞(执行中,所有参与该事务操作的逻辑都处于阻塞状态,无法进行其他操作)
    单点问题(协调者挂了,整个二阶提交无法运转)
    数据不一致(执行成功是,协调者commit,部分参与者没有收到。所以部分执行,部分未执行,出现数据    不一致)。
    太过保守(参与者故障,协调者只能依靠自身的超时机制判断是否需要事务中断,策略保守。二阶提交    没有设计较为完善的容错机制,任意一个节点的失败都会导致整个事务的失败)
    分布式一致性协议--二阶段提交_第1张图片

协议说明
阶段一:
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消息后,完成事务中断。

你可能感兴趣的:(分布式一致性原理)