线性一致性和法定人数
【摘要】 线性一致性和法定人数Dynamo风格复制模型中,严格的法定人数读写应该是线性一致性的。但当有可变网络延迟时,就可能存在竞争条件,如图-6:图-6,x 初始值0,写客户端通过向所有三个副本( n = 3, w = 3 )发送写将 x 更新为 1:A并发从两个节点组成的法定人群( r = 2 )读数据,并在其中一个节点上看到新值 1B 也并发从两个不同节点组成的法定人数中读取,并从两个节点中取回...
Dynamo风格复制模型中,严格的法定人数读写应该是线性一致性的。但当有可变网络延迟时,就可能存在竞争条件,如图-6:
图-6,x 初始值0,写客户端通过向所有三个副本( n = 3, w = 3 )发送写将 x 更新为 1
:
-
A并发从两个节点组成的法定人群( r = 2 )读数据,并在其中一个节点上看到新值
1
-
B 也并发从两个不同节点组成的法定人数中读取,并从两个节点中取回旧
0
满足( w + r> n ),但执行非线性一致:B请求在A请求完成后开始,但B 返回旧值,而A返回新值。 (又如同 Alice 和 Bob 的图-1)
通过牺牲性能,可使 Dynamo 风格法定人数满足线性化:读必须在将结果返回给应用前,同步执行读修复,而写必须在发送写入之前,读法定数量节点的最新状态。然而,由于性能显著降低,Riak不支持同步读修复。 Cassandra 在进行法定人数读取时,确实 在等待读修复完成;但由于使用最后写入胜利的冲突解决方案,当出现同一键的并发写入时,也不保证线性一致性。
这种方式只能实现线性一致的读写;不能实现线性一致CAS,因为它需要一个共识算法。
总之,最安全假定就是 Dynamo 风格的无主复制的系统无法提供线性一致性。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)