一致性模型

首先明确一下分布式的组成定义,为下面打好铺垫

一致性模型_第1张图片

 都做到了让系统“表现得像只有一个副本”。它们的不同在于,前一种排序遵循了不同用户的操作的时间先后顺序,而后一种排序没有。实际上,如果我们要求系统满足线性一致性,就只能得到前一种排序结果;而如果只要求系统满足顺序一致性,就有可能得到后一种排序结果

1.顺序一致性(sequential consistency

  • 条件I:重排后的序列中每一个读操作返回的值,必须等于前面对同一个数据对象的最近一次写操作所写入的值。(写入原子,读原子)

  • 条件II:原来每个进程中各个操作的执行先后顺序,在这个重排后的序列中必须保持一致。

2.线性一致性(linearizability) CAP中的C 强一致性

     在上面两个条件上加入一个条件

     

  • 条件III:不同进程的操作,如果在时间上不重叠,那么它们的执行先后顺序,在这个重排后的序列中必须保持一致

   也就是我在MIT6.824利用raft日志来保障的特性,不会读到旧值,如果另一个客户端在这个客户端读前写入成功的话。

如果时间上重叠的话,两个先后顺序都可以

比如下面这两个事件

一致性模型_第2张图片

一致性模型_第3张图片

3.最终一致性(eventual consistency)弱一致性

一致性模型_第4张图片

因果一致性:因果一致性_boring_111的博客-CSDN博客

外部一致性:如何理解数据库的内部一致性和外部一致性? - 知乎

External Consistency 除了在串行做之上,还对事务串行的排列顺序提出了更多的要求。要求是这样的,如果一个事务 A 已经完成了,另一个事务 B 才开始,那么事务 B 在数据库里修改的数据的生效时间一定要在事务 A 的生效时间之后。这是一句废话吗?对于常见的单机数据库,这确实是废话,因为保证 A、B 的先后关系不费吹灰之力,所以一般单机数据库系统都隐含保证了这一点。但是在分布式数据库里,当 A、B 两个事务发生在不同的机器上时,保证先后关系是非常困难的,所以才用 External Consistency 专门描述这种特性得到了保证

External Consistency 和 Strict Serializability 是完全等价的。

 

 Reference·

条分缕析分布式:浅析强弱一致性

周刊(第22期):图解一致性模型 - codedump的网络日志

如何理解数据库的内部一致性和外部一致性? - 知乎

你可能感兴趣的:(MIT,6.824学习记录,分布式,数据库)