当读取和写入都设置为仲裁时,我可以保证客户端在读取时始终获得最新值。
我意识到这可能是一个新手问题,但我不明白这个设置如何不提供一致性,可用性和分区。
答案 0 :(得分:1)
如果没有足够的副本可用,则在法定人数下,您将无法使用(即不接受读取或写入)。您可以选择在较低的一致性级别上放松和读/写,以获得可用性,但是您将无法保持一致。
还有一种情况是读取和写入的法定数量可以保证您检索到最新的“写入”数据。但是,如果协调器不知道所需的分区是否已关闭(即在3个节点中的2个节点失败后没有传播八卦),它将发出对3个副本的写入[假设复制因子为3的仲裁一致性]。一个活动节点将写入,而另外两个不会(它们已关闭)。写入超时(它不会失败)。写入超时,即使一个节点写入也不是写入失败。这是一个“正在进行中”的写作。我们现在说下来的节点出现了。如果客户端接下来请求具有仲裁一致性的数据,则会发生以下两种情况之一:
通常,您需要平衡一致性和可用性要求。这就是可调谐一致性这个术语的来源。
答案 1 :(得分:0)
说在网络上它充满了反驳(或者至少试图)布鲁尔CAP定理的链接......从定理的角度来看,C说的是
所有节点同时看到相同的数据
与客户始终检索新信息的保证完全不同。严格遵循这个定理,在你的情况下,它不受尊重。
答案 2 :(得分:0)
DataStax文档包含Configuring Data Consistency部分。在查看所有可用的一致性配置时,对于QUORUM,它指出:
在法定数量的副本响应后,无论数据中心如何,都返回具有最新时间戳的记录。如果您能够容忍某种程度的失败,请确保一致性。
请注意,最后一部分“容忍某种程度的失败”。就在那里,它表明使用QUORUM一致性就牺牲了可用性(A)。
上面引用的文档还进一步定义了QUORUM级别,说明您的复制因子也起作用:
如果一致性是最重要的,您可以确保始终读取 使用以下公式反映最近的写作:
(nodes_written + nodes_read)> replication_factor
例如,如果您的应用程序使用QUORUM一致性级别 对于写入和读取操作,您正在使用复制 因子3,这确保总是写2个节点,2 总是读取节点。写入和读取节点的组合(4) 大于复制因子(3)确保强读 一致性。
最后,这一切都取决于您的应用要求。如果您的应用程序需要高度可用,ONE可能是您的最佳选择。另一方面,如果你需要强一致性,那么QUORUM(甚至是ALL)将是更好的选择。