【问题标题】:distributed storage: why the redundant copy is 3 by default instead of 2?分布式存储:为什么冗余副本默认是3而不是2?
【发布时间】:2016-06-03 16:56:54
【问题描述】:

在分布式存储中,为了避免数据灾难,我们需要多个数据副本。 但是,为什么总拷贝数默认是3而不是2呢?

两份副本将节省近 50% 的存储需求。

选择3份的主要原因是什么?

【问题讨论】:

    标签: storage distributed-system


    【解决方案1】:

    当使用两个数据副本时,它们不同你选择哪个版本?第三个充当平局断路器。

    至于为什么它们会有所不同,如果一台计算机停机了一段时间——或者即使它们无法相互通信——它们的数据也会不同,除非系统停止接受写入。但是,对于三台计算机,如果其中一台出现故障或与其他计算机分离,另外两台仍然可以接受数据,而不必担心第一段中的情况。 (除非你有相关的失败,你仍然应该计划。)


    更新。通常,您会发现分布式算法使用 基于 Quorum 的系统来确保写入。在大多数情况下,它是简单多数,这意味着至少ceil(n/2) 的节点必须具有该值才能持久写入。之后,您可以保证没有任何东西可以取消写入该值,因为您无法获得ceil(n/2) 更多节点来推翻该决定。在双节点系统中ceil(n/2) = 2;因此,如果其中一个节点出现故障,您将无法再接受写入。但在三节点系统中,ceil(n/2) = 2 仍然存在,所以一个节点可以宕机,系统仍然可以接受写入。

    这确实是一个耐用性、成本和延迟的问题。您在系统中投入的节点越多,您就越有可能不会丢失数据。一个节点相当短暂;两个节点的短暂性稍差。三个节点还不错,很多系统都停在那里。但是需要更高持久性的系统将需要 5、7 或 9 个节点。

    我在互联网上最可靠的系统之一上工作,我们使用 quorum 中的 5 个节点以及多达 16 个节点作为热备份。对我们来说,与所需的耐用性相比,成本很少;我们选择在仲裁中使用 5 个节点是为了延迟备份,以提高持久性并承受仲裁的一些读取压力。

    【讨论】:

    • 如果每次读取都需要检查三个副本(通常分布在不同的服务器)具有相同的校验和。为什么不能只检查每个写入并确保每个副本都具有相同的校验和,然后返回每个写入请求,从而轻松阅读。实际上,读请求比写请求多。
    • @VanYu 这完全取决于您使用的协议。示例: ABD 确实需要从多个节点读取; Raft 没有。
    • 对不起,我不知道什么是 ABD,介意提供全名吗?像ceph这样的现有产品,他们也默认选择3副本,但读取不检查所有副本校验和,只是从主OSD读取。 ceph使用3个副本的主要原因是什么?
    • ABD 以作者 Attiya Bar-Noy 和 Dolev 的名字命名,他们在 2011 年获得了 Djikstra 奖,他们在 1995 年发表了题为在消息传递系统中稳健地共享内存
    • @VanYu 用更多信息更新了答案。
    【解决方案2】:

    因为与显着改善冗余相比,成本增加并不显着。

    【讨论】:

      【解决方案3】:

      在这个问题中添加到迈克尔的answer,选择三个是因为它提供了非常简单的容错级别。这在存在拜占庭故障时称为“不容错”,其中 t 为 1。也就是说,在不关闭系统的情况下,这些数据副本中最多有 1 个可能会过时/损坏/出错。

      t 通常被预先选择为相关系统的 SLA,或通过经验证据。给定一个 t 值,需要 2*t+1 个副本来处理容错。

      【讨论】:

        猜你喜欢
        • 2012-08-05
        • 1970-01-01
        • 2018-12-10
        • 1970-01-01
        • 2017-07-10
        • 2019-01-11
        • 1970-01-01
        • 2011-10-17
        • 1970-01-01
        相关资源
        最近更新 更多