1.无主复制
Dynamo风格数据库采用的是无主复制的数据库类型
1.1无主复制中读写quorum
1.1.1.Problem:
在无主复制系统中,如果有n个副本,需要有多少个副本完成写请求处理,才能被认定为写成功?
(写成功的含义:客户端需要向特定数量的节点查询始终可以获取最新值)
1.1.2.形式化关系:
对于有n个副本的无主复制系统,写入需要w个节点确认,读取至少查询r个节点,则必须满足以下关系才可以使得每次查询都能获取最新值:
w
+
r
>
n
:
即
写
入
确
认
的
节
点
集
合
与
查
询
节
点
集
合
有
交
集
w+r>n:即写入确认的节点集合与查询节点集合有交集
w+r>n:即写入确认的节点集合与查询节点集合有交集
以上w和r可以判定读、写是否有效的最低票数.(通常,在读取和写入操作时都会并发向n个副本发送,参数w和r只是在读取或写入需要等候数)
1.1.3. w、r的设置
在Dynamo风格数据库中,参数n、w和r通常是可配置的。一个常见的选择是w=r=(n+1)/2.即多数节点
但是对于读写负载不均衡的数据库,则读多写少的数据库(r=1、w=n),读少写多的数据库(r=n、w=1)
1.1.4 w+r<=n的优缺点
优点:这种配置可以获得更低的延迟和更高的可用性。
缺点:这种配置可能读取时候不能保证获得是最新值(因为读取请求中可能恰好没有包含新值的节点)。
1.1.5 实际情况
虽然quorum设计上似乎可以保证读取最新值,但现实情况却往往更加复杂,Dynamo风格的数据库通常是针对最终一致性场景而优化的。所以最好不要把w和r视为绝对的保证。
本文是根据阅读《数据密集型应用系统设计》和查阅相关论文等而写成。