一致性模型是关于分布式系统中提供多少一致性的一组规定。之前的帖子中,有关于 PACELC 理论中 Latency 和 Consistency 之间权衡的信息,以及根据这个权衡会提供多少一致性。
上一篇文章中讨论的Replicache也是分布式系统的一种。据说 Replicache 遵循因果一致性。
来源
一致性,让您始终按时间顺序读取值。写入值后发生的任何读取都将始终读取该值。为了满足这一点,需要两个条件。有一个所有节点共享的全局时钟,必须与其同步,并且必须立即执行写入。
w(x)a:将值a写入x,r(x)a:从x读取值a
当节点 1 在时间 t 发生 w(x)a,并且在 t delta(0.00000000000000001s)之后节点 2 出现 r(x) 时,节点 2 必须读取值 a。
必须存在一个全局时钟来串行化操作,以便操作不会在同一个 t 时间执行,并且写入必须立即执行,以便必须在 t delta 时间读取写入的值。
但这实际上是不可能的。因此,严格一致性作为一种理论而存在。
如果在以下情况下遵守严格一致性
正确答案如下。
顺序一致性的核心关键词是“全局排序”。所有写/读操作的行为必须像有一个统一的序列一样。另外,每个进程(客户端)执行的操作必须按照该顺序执行。
下面的例子中,p3和p4可以读取什么值?
以下与严格一致性相同,因此也满足顺序一致性。
您可以在下面找到全局排序,因此顺序一致性是正确的。
全局排序:w(x)a, r(x)a, w(x)b, r(x)b
但是,在下面的例子中,a 写在 b 之前,但读取的时间晚一些。在这种情况下,不满足顺序一致性。
因果关系是指因果关系。 “发生在 (→)” 理解这是一种关系很重要。
A → B 在以下情况下成立。
因果一致性是一种规则,其中因果关系在所有节点中都可见。
下面的案例是因果一致性。
这里可以找到的唯一“发生之前”关系是 w(x)a → r(x)a 和 w(x)b → r(x)b,所有进程都满足这些关系。 P3先读b就可以了。这是因为两次写操作是独立的,所以w(x)a→w(x)b不存在因果关系。
以下内容并未建立因果一致性。原因是w(x)a→w(x)c存在因果关系,并且P3中c先于a读取。
最终 这是一条(最终)变得一致的规则。在某个时刻,当没有写操作并且网络稳定时,所有节点最终将看到相同的值。这是一个非常有限的约定。
据说复制遵循因果一致性。这是一个稍微强一点的因果一致性,我们稍后再了解。
以上是一致性模型和复制缓存的详细内容。更多信息请关注PHP中文网其他相关文章!