Quorum NWR

来源:互联网 发布:c语言模块化编程教程 编辑:程序博客网 时间:2024/05/17 23:03

NWR是一种在分布式存储系统中用于控制一致性级别的一种策略。在Amazon的Dynamo云存储系统中,就应用NWR来控制一致性。

让我们先来看看这三个字母的含义:

N:同一份数据的Replica的份数
W:是更新一个数据对象的时候需要确保成功更新的份数
R: 读取一个数据需要读取的Replica的份数

NWR值的不同组合会产生不同的一致性效果,当W+R>N的时候,整个系统对于客户端来讲能保证强一致性。当W+R<N的时候只能保证最终一致性。

以常见的N=3、W=2、R=2为例:

N=3,表示,任何一个对象都必须有三个副本(Replica),W=2表示,对数据的修改操作(Write)只需要在3个Replica中的2个上面完成就返回,R=2表示,从三个对象中要读取到2个数据对象,才能返回。

在分布式系统中,数据的单点是不允许存在的。即线上正常存在的Replica数量是1的情况是非常危险的,因为一旦这个Replica再次错误,就可能发生数据的永久性错误。假如我们把N设置成为2,那么,只要有一个存储节点发生损坏,就会有单点的存在。所以N必须大于2。N约高,系统的维护和整体成本就越高。工业界通常把N设置为3。

当W是2、R是2的时候,W+R>N,这种情况对于客户端就是强一致性的。

 

在上图所示的系统中,由于W等于2,所以更新操作只需要确保完成两份就可以了。无论存储在Node3上面的第三份数据是否完成,都直接返回。假设后续的操作从Node1和Node3分别读取了两个数据。然而,Node3上面的数据尚未真正完成之前的更新操作。因此,客户端会发现读到的两个版本不一致,这个时候,只需要选择出最新的数据就可以了。

从不等式中可以看到,当W+R>N的时候,整个系统能够保证R>N-W。也就是说,至少每次都能够读到一份最新的数据。因此只需要把最新的数据返回即可。所以,虽然服务器上的三份Replica有不一致的情况,对于客户端来讲,每次读到的数据都是最新的。所以这种情况对于客户端来讲是强一致性的。

另外的几种情况:<N,W,R>=<1,1,1>和单点运行的数据库是同一个配置。<N,W,R>=<2,1,1>,则相当于Slave-Master模式。由于1+1不大于2,所以这种情况是可能读到非最新数据的。也就是这种配置是不一致的。

W越大,写性能越差。R越大,读性能越差。N越大,数据可靠性就越强。为了保障一致性,平衡读写性能,通常的配置是:W=Q, R=Q ,Q=N/2+1(N=3,R=2,W=2的配置就满足这个公式)。

 

转自:http://ultimatearchitecture.net/index.php/2010/06/22/quorum-nwr/