实现线性一致系统

举报
JavaEdge 发表于 2022/08/31 23:59:22 2022/08/31
【摘要】 实现线性一致系统线性一致性本质意味着 “表现得好像只有一个数据副本,且其上所有操作都是原子的”,所以最简单方案:真就只用一个数据副本。但无容错性:若持有该副本的节点失效,数据将丢失或无法访问,直到节点重启。系统容错最常用方案,复制:单主复制(部分支持线性一致)单主复制系统中,仅主库承担写,而追随者在其他节点上保留数据副本。若从【主库】或同步更新的【从库】读,则可满足线性一致性 iv。但并非每...

实现线性一致系统

线性一致性本质意味着 “表现得好像只有一个数据副本,且其上所有操作都是原子的”,所以最简单方案:真就只用一个数据副本。但无容错性:若持有该副本的节点失效,数据将丢失或无法访问,直到节点重启。

系统容错最常用方案,复制:

  • 单主复制(部分支持线性一致)

    单主复制系统中,仅主库承担写,而追随者在其他节点上保留数据副本。若从【主库】或同步更新的【从库】读,则可满足线性一致性 iv。但并非每个单主DB都是线性一致,因为它们可能采用快照隔离设计或并发处理上存在bug。

    [iv]  对单主DB分区(分片),使每个分区有一个单独领导者,不会影响线性一致性,因为线性一致性只是对单一对象的保证,而交叉分区事务是不同问题。

    从【主库】读取的前提,你确定知道领导者是谁。某节点可能自认为是领导者,而事实并非如此,若自以为是的领导者继续对外服务,就会违反线性一致性。若使用异步复制,故障切换时甚至可能丢失一些已提交的写入,这同时违反持久性和线性一致性。

  • 共识算法(线性一致)

    类似单主复制。但共识协议内置防止脑裂和过期副本的措施。因此,共识算法可安全实现线性一致性存储。如zk、etcd。

  • 多主复制(非线性一致)

    多主复制系统通常无法线性一致,因为它们同时在多节点并发写,并将其异步复制到其他节点。因此,可能产生写冲突,正是因为多数据副本引入的结果。

  • 无主复制(可能非线性一致)

    无主复制系统,有人认为通过要求法定读写( w + r > n )满足即可获得 “强一致性”,但这完全取决于具体quorum配置及强一致性的定义,可能并不保证线性一致。

    如日历时钟的 “最后写入胜利” 冲突解决方法几乎肯定是非线性一致,因为时钟偏差,不能保证时间戳与实际事件顺序一致。不规范的法定人数也破坏线性一致。即使严格的法定人数,非线性一致的行为也是可能的。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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