一种多副本复制算法----法定数共识算法

一种阻止分区中的事务产生不一致的方法是制定一个规则,使操作只能在某一个分区中进行。由于不同分区中的副本管理器不能相互通信,因此每一个分区中的副本管理器子组必须独立地决定它们是否能进行操作。法定数是一个副本管理器子组,它的大小使它具有执行操作的权利。例如,如果拥有大多数成员是一个标准的话,那么含大多数成员的子组可形成一个法定组,因为其他的子组不会拥有大多数成员

在一个法定数共识的复制方案中,一个逻辑对象上的更新操作可以成功地被副本管理器组一个子组完成。该子组的其他成员将拥有对象的过时的拷贝。版本号或时间戳可以用来决定拷贝是否是最新的。如果使用版本的话,那么,对象的初始状态是第一个版本,并且经过每一个变化后,我们有个新的版本。每个对象的每个拷贝有一个版本号,只有最新的版本拥有当前版本号,而过时的副本有一个较早的版本号。操作应该只被应用于具有当前版本号的拷贝。

Gifford开发了一个文件复制方案,其中一定数量的“选票”被分配给一个逻辑文件在副

本管理器上的每个物理拷贝。选票可以看成是一个对使用特定拷贝的需求度的权重。每个read操作必须在它对任何最新拷贝进行读之前,先获得一个有R个选票的读法定数,每个wite操作必须在它进行更新操作之前,获得一个有W个选票的写法定数。其中,对一个副本管理器组,R和W的设置要满足下面条件:

W>总选票的一半

R+W>组选票的总数

这就确保了任何一对(由一个读法定数和一个写法定数或两个写法定数组成),一定包含相同的拷贝。因此,在分区出现时,不可能在不同的分区中进行同一拷贝上的冲突操作。

为了进行一个read操作,首先必须通过足够多的版本号查询来发现一组拷贝,从而收集一个读法定数,选票的数量不得少于R。并不要求所有这些拷贝都是最新的。由于每个读法定数和每个写法定数存在重叠,每个读法定数必定至少包括一个当前拷贝。read操作可在任何最新的拷贝上执行。

为了进行一个 wrte操作,首先必须通过足够多的版本号查询来收集一个写法定数,法定数中的成员必须具有最新的拷贝,并且选票的数量不得少于W。如果没有足够的最新拷贝,那么一个非当前的文件会被一个当前文件的拷贝所替代,以使法定数得以建立。由写法定数中的每个副本管理器进行wite操作中指定的更新,增加所有对象副本的版本号,wite操作的完成要报告给客户然后在剩下可用的副本管理器中的文件由写操作以后台任务方式进行更新。任何副本管理器,如果它的文件拷贝的写版本号比写法定数拥有的文件拷贝的版本号旧时,那么它上的这个文件整个由来自最新更新过的副本管理器的一个副本替换掉。在 Gifford的复制方案中,两阶段读---写加锁可以用来进行并发控制。用准备的版本号查询来获得读法定数 R 时,使得每个联系到的副本管理器都被设置了一个读锁。当在写法定数W中执行write操作时,每个被涉及的副本管理器上设置了一个写锁(这里,锁被用在与版本号一样的粒度)。由于一个读法定数和一个写法定数重叠,并且两个写法定数也重叠,因此这些锁保证了单拷贝串行化。

副本管理器组的配置能力

加权投票算法的一个重要性质是副本管理器组能够通过配置来提供不同的性能或可靠性。一旦通过它的选票配置得到一个副本管理器组的可靠性和性能, write 操作的可靠性和性能的提高可以通过减少W而得以增加,同样可以通过减少R来提高 read 操作的可靠性和性能。

该算法既允许使用客户机本地磁盘的文件拷贝,也允许使用文件服务器上的文件。客户机上的文件拷贝被认为是弱代表(weak representative) ,并且总是给它们分配0个选票。这就确保它们不会包含在任何法定数中。一旦获得了某个读法定数,一个read 操作就可以在任何最新的拷贝上执行。因此,如果一个文件的本地拷贝是最新的,则读操作可以在该拷贝上执行。弱代表能用来加快read 操作速度。

Gifford的例子Gifford给出了全个例子,这三个例子通过给一个组上的不同副本管理器分配权重和分配适当的R和W,从而显示出不同的特性。现在基于下面的表再现Gifford的例子。阻塞概率表示在进行一个读或写操作时,不能获得法定组的概率。假设在发请求时,任何副本管理器不可用的概率 均为0.01。阻塞概率据此计算。

 

例1用来在一个有若干弱代表和单个副本管理器的应用中,配置一个具有高读写率的文件。复制 用来提高系统的性能,而不是可靠性。局域网上有一个副本管理器,它可以在75ms内被访问。两个客户已经选择在它们的本地磁盘上做弱代表,它们能在65mS内访问,结果导致了低延时和更少的网络流量。

例2用来配置一个有中等读写率的文件,该文件主要通过局域网被访问。局域网上的副本管理器 被分配两个选票,远程网络上的每个副本管理器被分配一个选票。读可以在本地副本管理器上执行,但写操作必须访问本地副本管理器和一个远程副本管理器。如果本地副本管理器出现故障,文件在只读模式下仍然是可用的。客户为了获得更低的读延时,可以创建本地的弱代表。

例3用来配置一个具有非常高读写率的文件,例如在一个具有三副本管理器环境下的系统目录。客户能从任何副本管理器上读,文件不可用的概率很低。更新必须作用于所有的拷贝。同样,为了降 低读操作延时,客户可以在本地机器上创建弱代表。

  

例1

例2

例3

延迟ms

副本1

75

75

75

副本2

65

100

150

副本3

65

150

150

选票配置

副本1

1

2

1

副本2

0

1

1

副本3

0

1

1

法定数

R

1

2

1

W

1

3

3

 

法定数共识方法的主要缺点是,由于需要从R个副本管理器中收集一个读法定数,因此read操作的性能被降低了。

Herfihy为抽象数据类型扩展了法定数共识方法。这种方法允许考虑操作的语义,因此提 高了对象的可用性。Herlihy的方法使用时间戳而不是版本号,这样做的好处是不需要为了在执行一个 写操作前得到一个新版本号而进行版本号査询。Heriihy声称的主要好处是使用语义知识吋以提高法定组选择的数量。

Dynamo中的法定数共识

Dynam使用类似法定数的方法来维护副本之间的一致性。与Gifford模式一样,读和写操作必须分别用R和W个结点,并且R + W>N。在Dynamo中,N是所有副本的结点的数。R和W的值影响可用性、持续性和一致性。DeCandia认为Dynamo中一个常规配置是 [N, R,W]=[3, 2, 2]。

在分区的情况下,Gifford的法定数仅能在一个“大多数”分区上操作。但Dynamo使用“马虎的法定数”,该法定数与N个结点相关,副本被存在替代结点上,在目标结点恢复时,由替代结点传递值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值