码迷,mamicode.com
首页 > 其他好文 > 详细

分布式系统理论之两阶段提交协议

时间:2016-07-02 21:28:03      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

一,两阶段提交协议介绍

两阶段提交协议是用来保证分布式系统事务的协议。在分布式系统中,一个事务需要由多台机器协调完成,机器之间通过网络来通信,如何保证一组操作在多台机器上要么都做,要么都不做呢?(事务的ACID特性)

【比如,一个事务包括三个操作A,B,C,操作A,B,C分别 在机器1,2,3上完成,如果机器1成功提交了操作A,机器2成功提交了操作B,但是机器3执行操作C失败了,则需要撤消所有的操作……】

再扩展一下,把两阶段提交协议用到保证多个数据副本一致性的情景下,可以说:它是一种强一致性的中心化副本控制协议。比如,集群中的每个数据块都有三个副本,当修改某数据块时,为了保证一致性,这三个副本都需要修改。

强一致性体现在:当修改操作成功后,读取该副本时,一定能读到最新修改的数据。

中心化体现在:两阶段提交协议需要一个协调者来控制事务的流程。这个协调者可以视为中心控制节点。

副本控制协议:是指两阶段提交协议可用在保证副本一致性 情景中。

 

二,两阶段提交协议分析

在该协议中,节点分成两类:协调者和参与者。

技术分享

两阶段提交协议流程主要分成两个阶段:当Client向协调者发起请求后,

阶段①:投票阶段

协调者询问所有的参与者是否可以执行提交操作

各个参与者为事务做准备,如分配资源、加锁……

参与者向协调者发送响应(可以提交 或者 不能提交)

 

阶段②:提交阶段

协调者收到所有的参与者返回的“可以提交”响应。向各个参与者发送“正式提交”命令

参与者各自在本地完成正式提交操作,成功后向协调者返回响应(“提交成功”或者“提交失败”)

当协调者收到所有的参与都“成功提交”的响应后,本次事务成功提交。否则失败(可能需要回滚或者重试)

 

三,两阶段提交协议的特点

①协议是阻塞的

协调者需要等待所有的参与者都返回响应后,才能继续下一步操作。

②网络容错能力差

只要有一个参与者失败了(网络超时或者宕机),协调者需要一直等待直到超时,本次事务失败。

③协调者单点故障

在第二阶段中,当协调者未发出“正式提交” 就宕机时,参与者将进入“未知”状态,完全不知道下一步该怎么办(重新发送第一阶段中的“可以提交”响应或者超时等待)

 

四,参考资料

分布式系统的事务处理

如何用消息系统避免分布式事务?

分布式系统理论之两阶段提交协议

标签:

原文地址:http://www.cnblogs.com/hapjin/p/5635993.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!