首页 理论教育分布式数据库技术:严格副本控制协议

分布式数据库技术:严格副本控制协议

【摘要】:ROWA协议是强加单副本一致性的协议,它把一个逻辑读变成对任意一个副本的读操作,把一个逻辑写变成对所有副本的写操作,从而让所有副本有同一个值。ROWA协议简单优雅,但有一个致命缺陷:只要有一个副本不能用,更新事务就不能终止。实际上已经提出了这个协议的不少变种,有一个协议称为可用副本协议。因此,协调者在提交前需进行验证。ROWA-A协议比简单ROWA协议更能抗故障,包括网络分割。另一类严格副本控制协议是基于选举的。

严格副本控制协议强加单副本等价性(one-copy equivalence)作为正确性依据。它要求所有的数据库副本都是互一致的。ROWA协议是强加单副本一致性的协议,它把一个逻辑读变成对任意一个副本的读操作,把一个逻辑写变成对所有副本的写操作,从而让所有副本有同一个值。这样,当提交这个更新事务时,所有副本的值都是一样的。

ROWA协议简单优雅,但有一个致命缺陷:只要有一个副本不能用,更新事务就不能终止。所以在可用性上就出现了问题。

有一种替代的方法称为读-写均可用(read one write all available,ROWA-A)协议。基本思路是,该写命令在所有可用副本上执行,事务终止。那时不能用的副本在变得可用时将新更新的值再传播给它。

实际上已经提出了这个协议的不少变种,有一个协议称为可用副本协议。这里,若要更新数据x,协调者启动一个事务T,向所有有x副本的节点发送WT(x)等待确认(或者拒绝)消息。如果在其获得所有响应前超时,就认为该副本不可用,在可用节点上继续实施更新。这些不可用节点在其恢复时更新其数据库到最后状态。很可能这些节点根本不知道T的存在以及T对x进行的更新。

有两件事需要强调:首先,有可能在协调者认为不可用的节点里已经更新了x但是其答复信息没有到达协调者。其次,有些节点在T启动时已经不可用,接着恢复,开始执行这个事务。因此,协调者在提交前需进行验证。(www.chuimin.cn)

(1)协调者检验是否自己认为不可用的节点依然不可用,方法是发送查询消息给所有节点。那些可用的节点就会给出回答。如果协调者从其中一个原来不可用的节点得到答复,就夭折这个事务,因为它不知道原来不可用的节点原来的状态:有可能这个节点其实一直是可用的,它实施了原始的WT(x)操作但是答复消息延迟了,或者它确实在T启动时不可用,但可用时却去执行另外一个事务S的操作Ws(x)了。后一种情况会导致非可串行化。

(2)如果T的协调者没从节点得到任何响应,则认为它不可用了,然后检查一下以保证当执行WT(x)时可用的节点是否仍然可用。如果答案为是,则T执行提交。

ROWA-A协议比简单ROWA协议更能抗故障,包括网络分割。

另一类严格副本控制协议是基于选举的。本质上,每个读/写操作必须获得充分的能够提交的选举人数。这些协议可以是保守的也可以是乐观的。