分布式数据管理相关的一个主要问题是如何保持多副本数据的一致性
保持多个副本的一致性,也就是当一个副本更新后,需要保证其他的副本也同样得到更新,一致性模型是进程和数据存储之间的一个基本约定。(利用一致性模型保证副本一致性)
严格一致性
最严格的一致性模型。严格一致模型中,对一个数据项所进行的任何读操作所返回的值总是对该数据项最近一次进行写操作的结果。(需要全局时钟,难以实现)
顺序一致性
需要满足以下两个条件:
1.所有进程对数据项的所有操作可以认为是按照某个顺序进行的。
2.任何进程对这个顺序的观点是一样的。
进程要对这个读取顺序一致
可线性化一致性
比严格一致性的限制弱,但比顺序一致性的限制强
相关一致性
如果事件B是由一个更早的事件A引起的,或者受事件A影响,则称这两个事件是因果相关
因果关系的操作称作并发的操作
具有潜在因果关系的所有写操作能够被所有的进程以相同的顺序看见,而并发的写操作可以被不同的进程以不同的顺序看见
FIFO一致性
一个进程中的所有写操作能够以它在该进程中出现的顺序被其他进程看见,但不同进程中的写操作在不同进程看来具有不同顺序
视作一个管道,先入先出
处理机一致性
不仅一个进程中的所有写操作能够以它在该进程中出现的顺序被所有其他进程看见
还要求不同进程对同一个数据项的写操作应该被所有进程以相同的顺序看见。
其他进程以相同顺序出现,可以bca、abc、bac,但是每个要一致
弱一致性
1.访问与数据存储有关的同步变量时,必须遵守顺序一致性模型
2.以前的所有写操作在每个副本上没有完成之前,不允许执行对同步变量进行操作
3.以前的所有对同步变量的操作完成之前,不允许执行对数据项进行任何读或写操作
释放一致性
Acquire(请求)操作:其他进程对远程副本的修改应该传播到本地并对本地副本进行更新
Release(释放)操作:本地进程对本地数据副本的修改应该传播到所有的远程副本上
1.在前面的所有acquire操作完全成功完成之前,对共享数据的读写操作不能执行
2.在一个释放操作被允许执行前,所有以前的读写操作必须完成
3.对同步变量的访问必须遵守FIFO的一致性模型
请求是不能省略的。
进入一致性
当前所有者就是最后一个对该同步变量执行acquire操作的进程,所有者进入和退出临界区不必重复地在网络上发送报文
不拥有对应的同步变量,需要向当前所有者发送一个报文请求以获得所有权。
𝑷𝟏分别活动x和y的锁,可以进行写操作
𝑷𝟐没有获得数据项y的锁,读数据y时返回NIL值
𝑷𝟑获得数据项y的锁,读数据y时返回值b