-4

在 Riak 中,默认数据桶被复制到 3 个不同的节点 (N=3)。此外,在读取或写入请求被认为成功之前必须响应的副本数量是 2 个节点(R=2,W=2)。

我们知道当 N 小于或等于 R+W 时,Riak 提供了强一致性。因此通过这些默认值,Riak 提供了强一致性(如 MySQL)。我无法理解为什么有些人说 Riak 不是强一致性,它提供了最终一致性?

4

2 回答 2

2

R 和 W 值(连同 PW(主要写入)、PR(主要写入)和 DW(持久写入))允许您根据应用程序的要求调整一致性。尽管这可以保证正常操作期间的一致性,但由于 Riak 如何处理网络分区等故障场景,它仍然最终保持一致。

如果我们假设我们有一个由 5 个节点组成的集群,其中 N 设置为 3,并且在一段时间内将 2 个节点与其余节点进行分区,那么所有节点仍然能够根据前面提到的参数同时接受读取和写入。如果我们进一步假设 PR 和 PW 设置为 0,则可以在分区就位时更新分区两侧的记录。这可能会导致在集群连接恢复之前无法解决的不一致问题,从而使系统最终保持一致。

PR 和 PW 允许用户指定必须存在一定数量的主分区所有者才能使读/写成功,如果这些设置为 > 0 的值,则分区集群可能不会允许在网络分区持续期间对所有节点上的所有对象进行读/写。

于 2013-01-03T15:45:12.440 回答
1

Riak 和类似系统提供的更好的术语可能是可调一致性,因为它们提供了在一致性、可用性和分区容限之间进行权衡决策的能力。相比之下,MySQL 和其他 RDBMS 系统竭尽全力保证一致性。这是一项昂贵的保证,并不总是物有所值。

于 2013-01-03T15:03:46.840 回答