首先明确一下分布式的组成定义,为下面打好铺垫
都做到了让系统“表现得像只有一个副本”。它们的不同在于,前一种排序遵循了不同用户的操作的时间先后顺序,而后一种排序没有。实际上,如果我们要求系统满足线性一致性,就只能得到前一种排序结果;而如果只要求系统满足顺序一致性,就有可能得到后一种排序结果
1.顺序一致性(sequential consistency)
-
条件I:重排后的序列中每一个读操作返回的值,必须等于前面对同一个数据对象的最近一次写操作所写入的值。(写入原子,读原子)
-
条件II:原来每个进程中各个操作的执行先后顺序,在这个重排后的序列中必须保持一致。
2.线性一致性(linearizability) CAP中的C 强一致性
在上面两个条件上加入一个条件
-
条件III:不同进程的操作,如果在时间上不重叠,那么它们的执行先后顺序,在这个重排后的序列中必须保持一致
也就是我在MIT6.824利用raft日志来保障的特性,不会读到旧值,如果另一个客户端在这个客户端读前写入成功的话。
如果时间上重叠的话,两个先后顺序都可以
比如下面这两个事件
3.最终一致性(eventual consistency)弱一致性
TODO;因果一致性,外部一致性
Reference·
条分缕析分布式:浅析强弱一致性
周刊(第22期):图解一致性模型 - codedump的网络日志