您的位置 首页 > 数码极客

“如何理解分布式开发“分布式开发模式

两阶段提交

两阶段提交协议最早由分布式事务专家Jim Gray在1978年的一篇文章Notes on Database Operating Systems中提及。两阶段提交协议可以保证数据的强一致性,即保证了分布式事务的原子性:所有结点要么全做要么全不做。许多分布式关系型数据管理系统采用此协议来完成分布式事务。它是协调所有分布式原子事务参与者,并决定提交或取消(回滚)的分布式算法,同时也是解决一致性问题的算法。该算法能够解决很多临时性系统故障(包括进程、网络节点、通信等故障),被广泛地使用。但是,它并不能够通过配置来解决所有的故障,在某些情况下它还需要人为的参与才能解决问题。

顾名思义,两阶段提交分为以下两个阶段。

  • 准备阶段(Prepare Phase)。
  • 提交阶段(Commit Phase)。

MySQL从5.5版本开始支持这个协议,SQL Server从SQL Server2005开始支持,Oracle从Oracle7开始支持。

在两阶段提交协议中,系统一般包含以下两类角色。

  • 协调者(Coordinator):通常一个系统中只有一个。
  • 参与者(Participant):一般包含多个,在数据存储系统中可以理解为数据副本的个数。

准备阶段

在准备阶段,协调者将通知事务参与者准备提交或取消事务,写本地的redo和undo日志,但不提交,然后进入表决过程。在表决过程中,参与者将告知协调者自己的决策:同意(事务参与者本地作业执行成功)或取消(本地作业执行故障)。协调者协议流程如下。

  • 写本地日志“BEGIN_COMMIT”,并进入WAIT状态。
  • 向所有参与者发送“VOTE_REQUEST”消息。
  • 等待并接收参与者发送的对“VOTE_REQUEST”的响应。参与者响应“VOTE_ABORT”或“VOTE_COMMIT”消息给协调者。

提交阶段

在该阶段,协调者将基于第一个阶段的投票结果进行决策:提交或取消。当且仅当所有的参与者同意提交事务,协调者才通知所有的参与者提交事务,否则协调者将通知所有的参与者取消事务。参与者在接收到协调者发来的消息后将执行相应的操作。

协调者协议流程如下。

若收到任何一个参与者发送的“VOTE_ABORT”消息。

★ 写本地“GLOBAL_ABORT”日志,进入ABORT状态。

★ 向所有的参与者发送“GLOBAL_ABORT”消息。

若收到所有参与者发送的“VOTE_COMMIT”消息。

★ 写本地“GLOBAL_COMMIT”日志,进入COMMIT状态。

★ 向所有的参与者发送“GLOBAL_COMMIT”消息。

等待并接收参与者发送的对“GLOBAL_ABORT”消息或“GLOBAL_COMMIT”消息的确认响应消息,一旦收到所有参与者的确认消息,写本地“END_TRANSACTION”日志,流程结束。

两阶段提交状态机

图18-2所示为两阶段提交协议中的协调者及参与者的状态机。左侧(a)为协调者状态机,右侧(b)为参与者状态机。

两阶段提交的缺陷

一般情况下,两阶段提交机制都能较好地运行,当在事务进行过程中有参与者宕机时,重启以后,可以通过询问其他参与者或者协调者,从而知道这个事务到底提交了没有。当然,这一切的前提都是各个参与者在进行每一步操作时都会事先写入日志。两阶段提交不能解决的困境如下。

  • 同步阻塞。执行过程中,所有参与节点都是事务阻塞型的。当参与者占有公共资源时,其他第三方节点访问公共资源不得不处于阻塞状态。
  • 单点故障。由于协调者的重要性,一旦协调者发生故障,参与者会一直阻塞下去。尤其在第二阶段,协调者发生故障,那么所有的参与者还都处于锁定事务资源的状态中,而无法继续完成事务操作。如果是协调者“挂掉”,可以重新选举一个协调者,但是无法解决因为协调者宕机导致的参与者处于阻塞状态的问题。
  • 数据不一致。在两阶段提交的阶段二中,当协调者向参与者发送COMMIT请求之后,发生了局部网络异常或者在发送COMMIT请求过程中协调者发生了故障,这会导致只有一部分参与者接收到了COMMIT请求。而在这部分参与者接收到COMMIT请求之后就会执行COMMIT操作。但是其他部分未接收到COMMIT请求的机器则无法执行事务提交。于是整个分布式系统便出现了数据不一致性的现象。

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“如何理解分布式开发,分布式开发模式,java分布式开发,如何理解分布式购买,如何理解分布式锁,简述:你如何理解分布式?”边界阅读