admin 管理员组

文章数量: 887021

一致性

(一)一致性的概念

一致性是通过可见性来定义的。
一致性是指多副本中的数据一致性。

(二)全局排序的概念

尝试对所有进程的读写操作做一次全局排序(全局排序就是排成一列的意思)
  1. 全局排序中属于同一个进程的读写顺序肯定是不变的
  2. 进程间的读写顺序按照前一个进程的write操作对之后其他进程是否可见来排序,如果可见则 write(a,4) -> read(a,4), 如果不可见则 read(a,0) -> write(a,4)
全局排序排序了所有进程的读写操作

全局排序是对所有进程的读写操作的排列,关键是排序了所有进程的写操作,所以在顺序一致性模型下,所有进程看到的写操作都是一样的顺序,进程按顺序依次可见每个写操作。

可以反推:只要所有进程看到的写操作都是一样的顺序,那么所有进程的读写操作就能做全局排序。

(三)一致性的分类

一致性分为三种:强一致性,顺序一致性与弱一致性,图例是个典型。

强一致性
强一致性也称线性一致性

强一致性要求进程的写操作对其他线程立即可见
强一致性保障了客户端访问其任何一个节点,都能看到最新某个客户端写入的数据
关键词:立即可见

全局排序: Write(y,2) -> Write(x,4) -> Read(x,4) -> Read(y,2)

顺序一致性

顺序一致性没有严格的立即可见的要求,仅仅要求所有进程看到的写操作都是一样的顺序。
顺序一致性表示客户端访问某个节点,很可能看不到最新写入的数据
顺序一致性 -> 写操作的顺序是一致的

顺序一致性需要回答一个问题,如果写操作不是立即对其他进程可见,那么何时对其他进程可见??

全局排序: Write(y,2) -> Read(x,0) -> Write(x,4) -> Read(y,2)

弱一致性
弱一致性也称最终一致性

弱一致性是无法保证所有进程看到的写操作都是一样的顺序

(四)可见性

进程看到了某个写操作就表明这个写操作对当前进程可见。看到就是可见

本文标签: 一致性