【分布式系统】Ch 7 一致性和复制 (Consistency & Replication)
文章目录
前言
为了实现分布式存储系统的高可靠和高可用性,数据在系统中一般存储多个副本以实现自动容错。
分布式存储系统通过复制协议将数据同步到多个存储节点,并要做到保持多个副本之间的数据一致性。
因此,复制和一致性两个概念紧密相关。将重点介绍两种一致性模型,分别是以数据为中心和以用户为中心的一致性模型。
一、介绍
1.数据复制
1)复制的目的:提高分布式系统的可靠性、性能。
- 高可靠性的体现:一个副本失效后,可以转换到另一个副本继续运行;通过多个副本可以对数据提供更好的保护。
- 性能的体现:利用不同地理位置的副本迅速响应;利用不同的副本分担工作负荷。
2)复制的难点:保持各个副本间的一致性。
3)复制的代价:复制带来的多个拷贝可能导致一致性方面的问题。为了让多个拷贝间保持一致性,需要进行数据同步 ,因此需要付出代价。
2. 一致性模型
1)一致性问题: 更为具体地讲,我们是在讨论共享数据的读操作和写操作时讨论一致性问题。这里用广义的术语来讲,共享数据是通过分布式数据存储实现的。
- 一致性模型:一致性模型实际上是进程和数据存储之间的一个约定。若进程统一准守某些规则,那么数据存储将正常运行。
二、以数据为中心的一致性模型
·不引入同步变量的方式
1. 严格一致性 (Strictly Consistency)
要求:对所有进程来说,所有写操作结果都是瞬息可见的。
其意味着,1)系统维持着对一个绝对的全局时间顺序。2)显然,这对分布式系统来讲是不可能的。后面将用时间间隔来代替绝对时间以对一致性要求放宽。
图a符合严格一致性,图b则不符合。
2. 顺序一致性 (Sequential Consistency)
一致性程度弱于严格一致性。
一致性要求:假设所有进程在共享数据上的读写操作按某种顺序执行,重点在于对于所有进程以相同的顺序看见共享存储器的访问。 这其中不需要时间作为顺序判断者,相比严格一致性,没有了最近写入的概念。
a)符合顺序一致性:所有进程以相同顺序看见共享存储器访问。
b) 不符合,P3和P4看见顺序不同。
3. 可线性化 (Linearizability)
在顺序一致性上加上时间戳。所有进程以相同顺序看见共享存储器访问,并且访问是根据(非唯一的)全局时间戳进行排序的。
4. 因果一致性 (Casual Consistency)
要求:
1)所有进程必须以相同的顺序看到具有潜在因果关系的写操作。
2)不同机器上的进程可以以不同顺序看到并发的写操作。
上图例子允许在因果一致性中出现(假设P2的写操作依赖P1的写操作,潜在关系a在b前面)。但不符合顺序和严格一致性。
a) 违反因果一致性:P3和P4的a、b读顺序不同。
b) 在并发情况下符合因果一致性的一个顺序。
5. 先进先出一致性 (FIFO Consistency)
相比于因果一致性,忽略不同进程之间的操作顺序,像管道一样限定同一进程的顺序(只要同一个进程的操作顺序保证正确)。
符合,a与(b,c)之间不要求顺序,但P2要求顺序b必须在c之前。
·引入同步变量的方式
1. 弱一致性(Weak Consistency)
要求对共享数据结构访问保持顺序一致性。对于同步变量的操作具有顺序一致性,全局可见。
并且只有当没有写操作等待处理的时候才可以进行,以保证对临界区域的顺序访问。在同步节点,所有使用者看到相同的顺序。
只有在执行了一次同步后,共享数据才被认为是一致的,如P2所示。
2. 释放一致性(Release Consistency)
弱一致性无法区分使用者是要进入还是退出临界区,因此释放一致性使用两个不同操作进行区分(require-release之间形成临界区)当release后,所有使用者可看到该操作。
3. 入口一致性(Entry Consistency)
简单讲就是对每个共享数据定义一个同步变量(锁)。没有进行同步就进行的读操作结果不保证。 如P2中对y值的读取。
、
三、以用户为中心的一致性模型
重点强调:单一用户访问不同副本的一致性。
有以下四种方案:单调读、单调写、写后读、读后写。
1. 单调读
在b的L2中读取为x2后,才收到来自L1的写操作,不保证单调读。
2. 单调写
3. 写后读
4. 读后写
四、副本管理
五、一致性协议
1. 远程写 & 本地写
2. 主动复制
3. 基于法定数量的协议
总结
- 以数据为中心的一致性
- 以用户为中心的一致性主要有四种,单调读,单调写,写后读,读后写。