在分布式存储中,为避免数据灾难,我们需要多个数据副本。 但是,为什么总复印数量默认为3而不是2?
两份副本将节省近50%的存储需求。
选择3份副本的主要原因是什么?
答案 0 :(得分:3)
使用两份数据时,他们不同您选择哪个版本?第三个是打破平局。
至于为什么他们会有所不同,如果一台计算机停机一点 - 或者即使他们不能互相交谈 - 除非系统停止接受写入,否则他们的数据会有所不同。但是,如果有一台计算机关闭或与其他计算机分离,则另外两台计算机仍然可以接受数据,而不必担心第一段中的场景。 (除非你有相关的失败,你应该仍然计划。)
<强>更新即可。通常,您会发现分布式算法使用基于Quorum的系统来确保写入。在大多数情况下,它是简单多数,这意味着节点中至少ceil(n/2)
必须具有该值才能持久写入。之后,您可以保证没有任何内容可以取消写入该值,因为您无法获得ceil(n/2)
个更多节点来取消该决策。在双节点系统ceil(n/2) = 2
中;因此,如果其中一个节点发生故障,您将无法接受写入。但是在三节点系统中,ceil(n/2) = 2
仍然存在,因此一个节点可以关闭,系统仍然可以接受写入。
真的是耐用性与成本与延迟的问题。您在系统中投入的节点越多,您就越不会丢失数据。一个节点相当简陋;两个节点略短于短暂。三个节点非常好,许多系统都停在那里。但是需要更高耐久性的系统将需要5,7或9个节点。
我在互联网上最可靠的系统之一上工作,我们在仲裁中使用5个节点,最多16个节点作为热备份。对我们来说,与所需的耐久性相比,成本很低;为了延迟起见,我们选择在仲裁中使用5个节点,以便在持久性方面略微提升备份并获得法定人数的一些读取压力。
答案 1 :(得分:0)
与冗余的显着改善相比,成本增加并不显着。
答案 2 :(得分:0)
在这个问题中添加Michael answer,选择了三个,因为它提供了非常简单的容错级别。在存在拜占庭故障的情况下,这被称为“t fault-tolerance”,其中t为1.这些数据副本中至多有1个可以在不关闭系统的情况下变得陈旧/损坏/错误。
通常选择t作为相关系统的SLA,或通过经验证据。给定值t,需要2 * t + 1个副本来处理容错。