首页 理论教育分布式数据库技术-基于选举的协议实现

分布式数据库技术-基于选举的协议实现

【摘要】:基于法定人数选举法可以作为一个副本控制方法,也可作为提交方法在网络分割时保证事务的原子性。事务提交前,必须获得提交法定选举人数Vc的通过。后两条规则说明选举的两条规则。在协调者从PRECOMMIT状态移到COMMIT状态和发送″global-commit″命令时,协调者必须获得提交选举人数参与者的同意,这是为了满足规则。图10.193PC协议在选举人方案中的状态转换基于选举人提交算法,有两点是很重要的。

许多研究人员建议将选举作为一种技术来管理并发数据的存取。基本思想是,如果大多数节点选择执行一个事务,则执行这个事务。这是多数选举的思想。

多数选举的思想现在已经推广到法定人数选举法。换言之,取代多数原则,可以将之改变为法定人数原则。例如,现实生活中,规定达到3人的法定人数就可以提交提案。这里的法定人数是3。基于法定人数选举法可以作为一个副本控制方法,也可作为提交方法在网络分割时保证事务的原子性。在非副本数据库中,这就涉及选举原则和提交协议的集成。

假设给系统中的每个节点指定一个选举(权)Vi,令总的选举权数为V,夭折和提交的法定人数分别为Va和Vc,且必须服从如下提交规则。

(1)Va+Vc≤V,其中0≤Va、Vc≤V。

(2)事务提交前,必须获得提交法定选举人数Vc的通过。

(3)事务夭折前,必须获得夭折法定选举人数Va的通过。

第一条规则保证一个事务不能同时既提交又夭折。后两条规则说明选举的两条规则。

将这三条规则进行修改后集成到3PC协议里。在协调者从PRECOMMIT状态移到COMMIT状态和发送″global-commit″命令时,协调者必须获得提交选举人数参与者的同意,这是为了满足规则。注意,规则无须显式实现,因为在WAIT或READY状态的事务已经准备夭折事务,所以夭折选举人数已经存在。

网络发生分割时,每个分割中的节点选择一个新协调者,这与3PC终止协议的故障处理类似。基本差别是,不能从WAIT或READY状态转换成ABORT状态。首先,一个或一个以上的协调者试图终止这个事务。我们不希望按照不同的方式终止,或者让事务的执行不保持一致性。因此,我们希望协调者能够显式获得夭折选举人的支持。其次,如果新选举的协调者出现故障,协调堵塞不知道达到了提交或夭折选举人数,这样,必须要求参与者做出显式决策是加入还是夭折选举人,而且从此不后悔。遗憾的是,READY(或WAIT)状态不满足这些需求。这样就在READY和ABORT状态间引入了另外一个状态,PREABORT。从PREABORT状态到ABORT状态的转换要求达到夭折的法定选举人数。

修改后,终止协议工作如下。一旦选出新协调者,新协调者请求所有参与者报告自己的本地状态。根据响应,按如下方式终止事务。

(1)至少有一个参与者处于COMMIT状态,协调者决定提交事务,发送″global-commit″消息给所有参与者。(www.chuimin.cn)

(2)至少有一个参与者处于ABORT状态,协调者决定夭折事务,发送″global-abort″消息给所有参与者。

(3)如果在PRECOMMIT状态,有选举权的参与者达到了提交选举人数,那么协调者决定提交该事务,向所有参与者发送″global-commit″消息。

(4)如果在PREABORT状态,有选举权的参与者达到了夭折选举人数,那么协调者决定夭折该事务,向所有参与者发送″global-abort″消息。

(5)如果第(3)种情况不成立,但是在PRECOMMIT和READY状态有选举权的参与者的选举人数达到了提交选举人数,那么协调者将参与者通过发送″prepare-to-commit″消息转入PRECOMMIT状态。协调者等待第(3)种情况成立。

(6)类似地,如果第(4)种情况不成立,但是在PREABORT和READY状态有选举权的参与者的选举人数达到了夭折选举人数,那么协调者将参与者通过发送″prepare-to-abort″消息转入PREABORT状态。协调者等待第(4)种情况成立。

3PC协议在选举人方案中的状态转换如图10.19所示。

图10.19 3PC协议在选举人方案中的状态转换

基于选举人提交算法,有两点是很重要的。首先,它是阻塞的。分割中的协调者如果由于消息丢失或者发生多分割不能形成夭折或提交选举人数。其次是该算法足以处理节点故障以及网络分割。

当两个分割归并时,新的更大分割的节点可以简单地执行终止协议,即协调者把参与者选举结论收集起来,终止该事务。