分布式数据库事务

 

在分布式数据库环境中,一个数据库事务能够更新多个场地上的数据,这种数据库事务称为分布式事务。

 

  分布式事务必须知足传统事务的特性,即原子性,一致性,分离性和持久性。可是分布式事务处理过程当中,某些场地(Server)可能发生故障,或 者因为网络发生故障而没法访问到某些场地。为了防止分布式系统部分失败时产生数据的不一致性。在分布式事务的控制中采用了两阶段提交协议(Two- Phase Commit Protocol)。即事务的提交分为两个阶段:

  预提交阶段(Pre-Commit Phase)
  决策后阶段(Post-Decision Phase)

  两阶段提交用来协调参与一个更新中的多个服务器的活动,以防止分布式系统部分失败时产生数据的不一致性。例如,若是一个更新操做要求位于三个不一样结点上的记录被改变,且其中只要有一个结点失败,另外两个结点必须检测到这个失败并取消它们所作的改变。

  为了支持两阶段提交,一个分布式更新事务中涉及到的服务器必须可以相互通讯。通常来讲一个服务器会被指定为"控制"或"提交"服务器并监控来自其它服务器的信息。

   在分布式更新期间,各服务器首先标志它们已经完成(但未提交)指定给它们的分布式事务的那一部分,并准备提交(以使它们的更新部分红为永久性的)。这是 两阶段提交的第一阶段。若是有一结点不能响应,那么控制服务器要指示其它结点撤消分布式事务的各个部分的影响。若是全部结点都回答准备好提交,控制服务器 则指示它们提交并等待它们的响应。等待确认信息阶段是第二阶段。在接收到能够提交指示后,每一个服务器提交分布式事务中属于本身的那一部分,并给控制服务器 发回提交完成信息。


  在一个分布式事务中,必须有一个场地的Server做为协调者(coordinator),它能向 其它场地的Server发出请求,并对它们的回答做出响应,由它来控制一个分布式事务的提交或撤消。该分布式事务中涉及到的其它场地的Server称为参 与者(Participant)。 数据库

事务两阶段提交的过程以下:   ● 两阶段提交在应用程序向协调者发出一个提交命令时被启动。这时提交进入第一阶段,即预提交阶段。在这一阶段中:   (1) 协调者准备局部(即在本地)提交并在日志中写入"预提交"日志项,并包含有该事务的全部参与者的名字。    (2) 协调者询问参与者可否提交该事务。一个参与者可能因为多种缘由不能提交。例如,该Server提供的约束条件(Constraints)的延迟检查不符合 限制条件时,不能提交;参与者自己的Server进程或硬件发生故障,不能提交;或者协调者访问不到某参与者(网络故障),这时协调者都认为是收到了一个 否认的回答。   (3) 若是参与者可以提交,则在其自己的日志中写入"准备提交"日志项,该日志项当即写入硬盘,而后给协调者发回一?quot;已准备好提交"的回答。   (4) 协调者等待全部参与者的回答,若是有参与者发回否认的回答,则协调者撤消该事务并给全部参与者发出一个"撤消该事务"的消息,结束该分布式事务,撤消该事务的全部影响。   ● 若是全部的参与者都送回"已准备好提交"的消息,则该事务的提交进入第二阶段,即决策后提交阶段。在这一阶段中:   (1) 协调者在日志中写入"提交"日志项,并当即写入硬盘。   (2) 协调者向参与者发出"提交该事务"的命令。各参与者接到该命令后,在各自的日志中写入"提交"日志项,并当即写入硬盘。而后送回"已提交"的消息,释放该事务占用的资源。    (3) 当全部的参与者都送回"已提交"的消息后,协调者在日志中写入"事务提交完成"日志项,释放协调者占用的资源 。这样,完成了该分布式事务的提交。
相关文章
相关标签/搜索