分布式系统(四)——弱一致性模型

来源:互联网 发布:火车票抢票用什么软件 编辑:程序博客网 时间:2024/06/05 06:08

本文主要讲述分布式系统中的弱一致性模型,本文中的全部内容全部来自于清华大学分布式课程网站,网站地址http://thu-cmu.cs.tsinghua.edu.cn/curriculum/dscourse/index.html


我们在之前的分布式系统一致性模型中介绍了一致性模型,在我们实现顺序一致性模型的系统中,存在这样一个问题,如果两个不同机器操作位于同一存储页上的两个不同的变量,那么系统会把整个页分别发送给机器,但是,我们只是操作两个不同的变量,并不需要整个页的全部内容,因此,我们需要弱一致性模型来完成相应的工作。

目的

我们使用弱一致性的目的有两个:
一、减少发送的数据
我们需要值发送即将被写的数据,而不是整个存储页
二、允许多个读写同时运行
当一个数据的副本被写入时,这个时候,我们不把所有的读副本设为不可用,这样我们就可以实现读写同步进行

弱一致性

弱一致性具体的实现原则是,假设我们在分布式系统中有一个锁服务,当一个进程想要访问共享内存的时候,它应该获得这个锁,这样,在操作结束之后,该进程会释放这个锁,那么我们比较加锁前后的数据是否发生变化,如果发生变化,我们就把这个变化广播给其他持有这个文件的副本。

但是,存在一个新的问题,是不是每次释放所,就应该把所有的副本都进行更新,比如,你从来不会用到一个变量,然后这个变量被某个进程修改了。基于这个原因,我们新定义了一种弱一致性模型,叫做Lazy Release Consistency(LRC)模型。

LRC模型的定义如下:我们只有在获取某个锁的时候,采取获取这个锁内内容的更新,而且,我们只从上一次拥有这个锁的地方获取。
通过使用LRC我们可以简单的看到,我们如果不使用某个变量,那么我们永远不会获得他们的更新,此外,如果我们频繁的使用某几个变量,那么我们也不需要每次对持有这几个变量的存储页进行全盘更新,这样的话,我们可以有效的节省带宽。

实例

Example1
M0: a1 x=1 r1M1:                   a2 y=1 r2M2:                                       a1 print x r1

首先M2会向之前持有锁的M0去询问更新,把x更新为1,但是M1所做的更新不会被M2看到,及时xy存储在同一个存储页上。

Example2

M0: a1 x=1 r1M1:                       a1 a2 y=x r2 r1M2:                                                       a2 print x, y r2

这样一个执行流程,我们希望看到的是输出的xy都是1,M2只是获取了锁2,按照我们之前的理论,M1在这之前持有锁2,因此会把M1在2上做的更新发送给M2,由于M1只对y进行了改变,因此M2得不到x的更新。

为了解决上面的问题,我们提出了vector timestamp的概念,这个类似于数组的数据结构中存储了所有对锁执行操作的时间和操作内容,因此,我们在获取锁的时候,要跟之前持有锁的用户比较VT,把丢失的更新补充回来,这样就可以解决我们之前提到的问题。

0 0