线性一致性和法定人数

举报
JavaEdge 发表于 2022/08/31 23:59:46 2022/08/31
【摘要】 线性一致性和法定人数Dynamo风格复制模型中,严格的法定人数读写应该是线性一致性的。但当有可变网络延迟时,就可能存在竞争条件,如图-6:图-6,x 初始值0,写客户端通过向所有三个副本( n = 3, w = 3 )发送写将 x 更新为 1:A并发从两个节点组成的法定人群( r = 2 )读数据,并在其中一个节点上看到新值 1B 也并发从两个不同节点组成的法定人数中读取,并从两个节点中取回...

线性一致性和法定人数

Dynamo风格复制模型中,严格的法定人数读写应该是线性一致性的。但当有可变网络延迟时,就可能存在竞争条件,如图-6:

图-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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。