我正在阅读aerospike手册的强一致性模式。在最后一个示例“Strong Consistency for reads”中,他们解释说,在分区的情况下,他们需要一个名为“regime”的概念来确保读取的线性化。为什么我们需要那个?写入少数派不会成功,因为它们不会被复制,所以我们担心什么?缺少对活动主机的写入?
问问题
90 次
1 回答
3
归结为当集群分区时,所有节点可能不会同时分区。
考虑 Aerospike 的单个数据分区(分片)。先前机制中的主副本位于分区的少数一侧,没有其所有副本,因此需要放弃作为主副本,而新体制中的副本需要升级为主副本。由于我们处于网络分区中,因此这两个节点无法协调此交换。先前机制的主控可能会在确定它不再是主控之前收到读取。为了确保线性读取,读取事务发出一个副本 ping,其中包括 master 认为它所在的当前机制。如果任何副本报告该机制已推进,则读取失败,否则副本 ping 允许事务继续进行。
如果任何新的写入能够在新机制上完成,那么根据活跃度规则,可以确保针对旧机制的任何线性化读取都将失败。
于 2020-02-25T21:46:51.157 回答