【问题标题】:Why is leader election mandatory for a write but not for a read request?为什么领导选举对于写入是强制性的,而不是对于读取请求?
【发布时间】:2018-10-07 19:33:53
【问题描述】:

在可靠的分布式系统中,leader 选举对于写入成功是强制性的,我可以理解它需要遵循 Paxos 算法。

但是,为什么读取请求不需要领导者选举(从而达成共识)? (例如在 Zookeeper 中)

我错过了什么吗?

【问题讨论】:

    标签: apache-zookeeper distributed-computing consensus paxos


    【解决方案1】:

    Zookeeper 读取不可线性化,因此不需要共识协调。相反,它们是顺序一致的,允许从客户端连接的节点进行本地读取。

    同样如此,例如筏。您可以执行本地读取并获得最多的顺序一致性(前提是您与节点协调以不读取比您所看到的更旧的数据),但如果您想要线性化读取,您必须“提交”读取操作(即,让系统在您读取之前就提交哪些写入达成一致),同样需要达成共识。

    Zookeeper 不可线性化。参见例如https://github.com/jepsen-io/jepsen/issues/399。人们普遍认为可以同步+阅读(在此编辑之前,我在这里重复了这个神话),但引用 Zookeeper 文档:

    使用同步有一个警告,它是相当技术性的,并且与 ZooKeeper 内部密切相关。 (可以跳过它。)因为 ZooKeeper 应该为读取提供快速读取服务并针对读取主导的工作负载进行扩展,所以同步的实现已被简化,它并没有像创建常规更新操作那样真正遍历执行管道,设置数据,或删除。它只是到达领导者,领导者将响应排队返回给发送它的跟随者。领导者认为自己是领导者 l 的可能性很小,但不再得到法定人数的支持,因为法定人数现在支持不同的领导者 lʹ。在这种情况下,领导者 l 可能没有处理完所有更新,同步调用可能无法兑现其保证。

    【讨论】:

      猜你喜欢
      • 2021-02-14
      • 2012-10-25
      • 1970-01-01
      • 2021-12-27
      • 2016-01-26
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多