1、第6章 分布式一致性,东北大学信息学院于 戈 2006年4月,主要内容,6.1 一致性与复制 6.2 以数据为中心的一致性模型 6.3 以客户端为中心的一致性模型 6.4 分布协议 6.5 一致性协议 6.6分布式共享内存(DSM) 6.7 举例:基于页面的DSM 6.8 习题,6.1 一致性与复制,复制的理由 提高可靠性:防止单点失败,数据校验 提高性能:并行性,可伸缩性 复制的代价 一致性维护 例:Web页的Cache,Internet,对象复制问题(1),单副本对象的同步 例:两个客户并发访问一个分布式远程对象,对象复制问题(2),解决方法 (a) 由远程对象自己处理对它的并发调用 (b
2、) 由对象适配器处理并发调用,对象复制问题(3),多副本对象的同步的解决方法 (a) 构造感知复制对象,由对象自己保证一致性 (b) 由分布式系统负责复制管理(由对象所在的服务器负责并发控制),可伸缩性问题,将数据的副本放置在进程附近减少访问时间 复制策略 设进程P对数据d的访问N次/秒,d的更新M次/秒 当NM时,不应复制 可伸缩问题 紧一致性需对所有副本进行全局同步 解决策略 松一致性,所有副本不一定保持完全相同,避免立即全局同步,6.2 以数据为中心的一致性模型,分布式数据仓(data store)模型 物理上分布的和复制的 例如,分布式共享内存、数据库、文件 操作:进程发出的读操作,写
3、操作,一致性模型,数据相干性(coherency) 数据在各个数据仓中的值保持一致 一致性模型 进程与数据仓之间的契约(contract) 如果进程遵守约定的规则,数据仓就能工作正常。 如果进程违反了这些规则,数据仓就不再保证操作的正确性,严格一致性,规则:对数据项x的读操作返回的值为最近写入x的值 特点:绝对全局时间次序(使“最近”没有不确定性) 例:严格一致性:,严格一致性,不可实现性 没有全局时钟 光速限制:T1:W1(x)S2, T2:R2(x); T2-T1=10-9 例:非严格一致性,顺序一致性,规则:所有进程执行的结果,等同于它们的操作按某种顺序在数据仓上执行的结果。每个进程的操
4、作都按照程序规定的顺序。 例:顺序一致性,P2,P1,P4,P3,顺序一致性,所有进程看到相同的内存访问操作次序 等价于数据库的可串行化(serializability) 例:非顺序一致性,P1: W(x)1 P2: W(x)2 P3: R(x)2 R(x)1 P4: R(x)1 R(x)2,P2,P1,P4,P3,时间,例: 3个并行执行的进程 90种正确的执行顺序,顺序一致性举例,形式化描述 执行(Execution):进程Pi在数据仓S上的读写操作序列,记为Ei 例:E1 = W1(x)1; E2 = W2(x)2; E3 = R3(x)2,R3(x)1E4 = R4(x)2,R4(x)
5、1 历程(History):合并E1,E2,En后的序列 就像在一个集中式数据仓上执行,顺序一致性,合法历程必须满足: 保持程序的操作次序,即必须维持原有的程序顺序 服务数据相干性,即读操作R(x)必须总是返回其执行之前最近执行的写操作W(x)v所写入的值 例:H= W2(x)2,R3(x)2,R4(x)2,W1(x)1,R3(x)1,R4(x)1 非法历程 例: H= W2(x)2,R3(x)2, R4(x)1,R4(x)2, W1(x)1,R3(x)1 性能问题: 设读操作时间为r,写操作时间为w, 包传输时间为t 则r+wt对于任何顺序一致性存储,改变协议以提高读操作性能必将降低写操作性
6、能,顺序一致性,线性一致性(Linearizable),规则:具有顺序一致性,且如果tsop1(x) tsop2(y),则OP1(x) OP2(y) 每个操作带有全局时钟戳 执行结果是顺序一致性的 每个进程的操作遵照时间戳顺序注意:可线性化的数据存储是顺序一致性的。它们的区别是:线性化是根据一系列同步时间戳确定序列顺序的。,因果一致性,因果关系(三种情况): 1.P1写x,P2读x,则R2(x)与W1(x)具有因果关系 2.P1读x,P2写x,则W2(x)与R1(x)具有因果关系 3.传递性:P1写x,P2读x,然后写y,则W2(y)与W1(x)具有因果关系定义: 对于具有因果关系的写操作,所
7、有进程看到的执行顺序应相同。并发写操作在不同主机上被看到的顺序可以不同。即所有进程必须以相同的顺序看到具有因果关系的写操作。不同机器上的进程可以以不同的顺序看到并发的写操作,因果一致性,例:因果一致性例:违反因果一致性,因果一致性,例:符合因果一致性(W1(x)与W2(x)是并行操作)实现技术 操作依赖图 时间戳向量,FIFO一致性,规则:同一个进程的写操作的执行次序,其它进程看到的都相同。不同进程的写操作的执行次序,不同进程看到的可以是不同的 例:符合FIFO一致性,但不符合因果一致性,FIFO一致性,例:符合FIFO一致性,但不符合顺序一致性,FIFO一致性,也称作内存管道一致性(Pipe
8、lined RAM) 分布式共享内存系统 实现技术: 写操作标签(进程ID,顺序号),处理机一致性,规则:与FIFO一致性相似 附加条件: 存储相干性:对于任意存储器地址X, 对于写入X的顺序是全局一致的。 写入不同地址,对于不同进程来看,不需要相同顺序,同步变量:与一个数据区相关联 Synchronize(S) 同步所有的数据局部拷贝 导出: 导入: 规则: 对同步变量的访问必须满足顺序一致性。 在所有先前的写操作完成之前,不能访问同步变量 在所有先前的同步操作完成之前,不能访问(读/写)数据。,弱一致性,弱一致性,例:弱一致性例:非弱一致性,释放一致性(1),被保护数据: 需要保持一致的共
9、享数据 Acquire(L)操作:进入临界区 导入数据:使被保护数据的局部拷贝与远程的最新版本一致 Release(L)操作:退出临界区 导出数据:将被保护数据上的变化传播到其它的局部拷贝上,释放一致性(2),规则 在访问共享数据前,所有先前的acquire操作都必须完成。 在执行release前,先前的所有读写操作都必须完成。 对同步变量的访问必须满足FIFO一致性 例:符合释放一致性,释放一致性(3),及时释放一致性(EAGER release) 当执行了释放操作,执行此操作的处理机将所有修改的数据传给所有那些已经有其缓冲拷贝且可能需要它的处理机 滞后释放一致性(LAZY release
10、) 在执行释放时,不发送任何数据。 在执行获取操作时,处理机试图从拥有这些变量的机器上取得它们的最新值,入口项一致性(1),同步变量 与某个共享数据项相关联 不是与数据区中的所有保护型数据关联 所有者(owner):最后一个acquire它的进程。 其他进程必须从当前所有者手中取得拥有权。 非互斥方式(non-exclusive):可以读,但不能写,入口项一致性(2),规则: 在进程P获取同步变量S之前,有关的被保护的共享数据上的全部更新操作都必须完成; 在进程P以互斥模式获取同步变量S之前,不允许其他进程同时拥S,即使在非互斥模式下; 在进程P以互斥模式获取同步变量S之后,任意其他进程都不能
11、对S执行非互斥式访问,除非由S的拥有者P进行。,入口项一致性(3),例:入口项一致性,P1:Acq(Lx) W(x)1 Acq(Ly) W(y)2 Rel(Lx) P2: P3:,Rel(Ly) Acq(Lx) R(x)1 R(y)0 Acq(Ly) R(y)2,优点 减少开销 增加并行性,一致性模型总结(1),无同步操作,一致性模型总结(2),同步操作,6.3 以客户为中心的一致性模型,分布式数据存储区 没有同时更新(无写-写冲突)或容易解决 大多数操作为读操作 例:Web网页(服务器,代理缓存) 最终一致性(eventual consistency) 如果很长时间不发生更新操作,则所有的副
12、本将逐渐变为一致的。,最终一致性(1),移动用户问题,最终一致性(1),客户为中心的一致性(Client-centric) 保证对一个客户对数据存储的访问是一致的 不考虑不同客户之间的并发访问 假设 每个数据项x有一个拥有者,只有拥有者可以修改x 客户的读写操作在本地副本上进行 更新最终将传播给其他副本上。,客户为中心的一致性,记号 xit: 数据项x在局部场地Li上在时刻t的版本 WS(xit): 得出xit的写操作集 WS(xit1, xjt2): WS(xit)中的写操作在t2时刻在Lj上执行,单调读一致性,当一个进程读了数据项x的值后,所有后续的对x的读操作,都将返回相同的值,或者更新
13、的值 例:读email(旧金山-纽约) 示例:,(a):符合单调读一致性,b): 不能保证单调读一致性,单调写一致性,一个进程对数据项x的写操作,必须在该进程对x的所有后续写操作之前完成。 例:软件库更新(版本1,.,n) 示例:,(a):符合单调写一致性,(b): 不能保证单调写一致性,读自己写一致性,一个进程对数据项x的写操作结果,总能被该进程对x的后续读操作读到。 例1:Web网页更新、浏览 例2:数字图书馆密码更新 示例:,(a):符合读自己写一致性,(b): 不能保证自己写一致性,写跟随读一致性,一个进程在对数据项x读操作之后对x的写操作,必须在x已读出的相同值或者更近的值之上进行
14、例:BBS跟帖(读文章A,写文章B) 示例:,(a):符合写跟随读一致性,(b): 不能保证写跟随读一致性,实现技术(1),基本方法 写操作:全局唯一标识符。 服务器ID:执行位置 序号: 执行顺序 读集合Rset(c):与客户c读操作相关的写操作标识符 写集合Wset(c):客户c执行的写操作的标识符,S1,S2,Rset,Wset,Log,Log,实现技术(2),单调读一致性 当客户c执行读操作r时,它的服务器s检查c的读集合Rset(c),是否所有写操作已在c的本地更新; 如果c的本地没有更新,则请求更新; 执行r后,将与r有关的写操作标识符加入Rset (c)。 单调写一致性 当客户c
15、执行写操作w时,它的服务器s检查c的写集合Wset (c),是否所有写操作已在c的本地执行; 如果在c的本地没有执行,则请求执行; 将w的标识符加入Wset (c)。,实现技术(3),读自己写一致性 当客户c执行读操作r时,它的服务器s检查c的写集合Wset (c),是否所有写操作已在c的本地执行; 如果在c的本地没有执行,则请求执行; 写跟随读一致性 当客户c执行写操作w时,它的服务器s检查c的读集合Rset (c),是否所有写操作已在c的本地执行; 如果在c的本地没有执行,则请求执行; 问题 Wset(c)和Rset(c)将非常大,性能降低,实现技术(4),基于session的优化方法 减
16、少写集和读集中的元素个数 定义session: 打开,关闭 WS(c)和RS(c)在session打开时建立,关闭时清除 基于时间戳向量的优化方法 减小写集和读集表示形式的大小 对一个写操作WID,赋予时间戳ts(WID) 服务器Si维持一个时间戳向量RCVD(i)。RCVD(i) j为Si收到的来自Sj的最近写操作的时间戳。,实现技术(5),基于时间戳向量的优化方法(续) 对写集或读集A维持一个时间戳向量VT(A)。VT(A)i为在Si上的最大时间戳 并操作:VT(A+B)。VT(A+B)i=maxVT(A)i, VT(B)i 包含关系:VT(A)VT(B)VT(A)i VT(B)i 例:单
17、调读一致性 设客户c在服务器Si上执行读操作r; c的读集为VT(Rset) ,Si有RCVD(i) 如果RCVD(i)j VT(Rset)j,则在Si进行更新 执行后,VT(Rest)j=maxVT(Rest)j, RCVD(i)j,6.4 分布协议,分布式数据仓的设计 复制副本的位置:永久型、服务器型、客户型,永久型副本,构成分布式数据仓的初始集合 静态的、固定的 副本数量较少 例1:Web场地的分布类型 局域网:轮回策略型服务器 Internet:镜像服务器 例2:分布式数据库 工作站集群(COW) 联邦数据库,服务器发起型副本(1),推送式缓存(push cache) 动态设置新的副本
18、作用: 当负载发生变化时,如突然增加。 减少服务器负担 减少客户的通信开销 问题 在何时、何地发起复制,服务器发起型副本(2),实现方法 访问计数:cnt(S,F), S为服务器,F为文件 复制阈值:rep(S,F) 删除阈值:del(S,F) 距离:dist(S,C),C为客户。该信息来自路由数据库 复制副本 复制副本条件:cnt(S,F) rep(S,F) 删除副本 删除副本条件:cnt(S,F) del(S,F) 迁移副本 迁移副本条件: del(S,F) cnt(S,F) rep(S,F),服务器发起型副本(3),举例:计数来自不同客户的请求,将文件复制到离客户附近的服务器上。 如果c
19、ntQ(P,F)cnt(Q,F),将F迁移到P,客户端发起型副本,客户缓存(cache) 客户端的本地存储 缓存命中率(cache hit): 请求的数据可在缓存中取出的概率 提高命中率:缓存可由多个客户共享 客户缓存的设置 与客户相同的机器 局域网上多个客户共享的机器上 广域网上的代理服务器上,更新传播(1),当客户执行一个更新操作后,该操作将传播到所有副本 传播状态与传播操作 传播更新通告 传输数据拷贝 传播更新操作,更新传播(2),通告无效协议(invalidation) 传输被修改的数据的位置 占用很少网络带宽 适用于读/写比非常低的情况 数据传输(data shipping) 传输被
20、修改的数据 占用较多网络带宽 适用于读/写比非常高的情况,更新传播(3),操作传输(operation shipping) 主动复制技术 - 每个副本有一个进程主动地进行更新 占用最少网络带宽 要求有较高处理能力,推式与拉式协议(1),推式协议:基于服务器的协议 不需要请求,就将更新传播给副本 可保持高度的一致性,通常用于永久性副本和服务器副本之间 优点:适用于读/写比非常高的情况 拉式协议:基于客户的协议 由客户请求服务器发送更新 优点:适用于读/写比非常低的情况 缺点:当cache miss时,响应时间长,推式与拉式协议(2),推式协议与拉式协议的比较,推式与拉式协议(3),推拉混合式方法
21、 基于租期的更新传播方法 租期(lease):服务器承诺在租期时间内向客户传播更新。当租期过期后,客户申请新的租期,或自己取修改数据 租期的准则 基于年龄的租期:经常修改的数据,租期长。 基于刷新频率的租期:经常使用的数据,租期长。 基于状态空间开销的租期:负载小时,租期长。,单播方式与多播方式,多播 一对多通信 适用于从服务器到客户的推式协议 单播 一对一通信 适用于从客户到服务器的拉式协议,S,S,传染协议(1),传染算法 单个消息,服务器之间的信息交换 实现最终一致性 更新传播模型 基于传染病理论 服务器状态 感染的(infective):已被更新,并愿意参加传播 疑似的(suscept
22、ible):还未被更新 隔离的(removed):不愿意参加传播,传染协议(2),反熵(anti-entropy)传播模型 熵:系统混乱度的量度 服务器P随机地选择服务器Q,交换更新 P只将自己的更新推送给Q P只从Q中拉取新的更新 P和Q互相发送更新 传播方法 传播谣言(rumor spreading)、传言(gossiping) 仍为疑似的服务器的比例:s=e-(k+1)(1-s),传染协议,删除数据 旧版本问题解决方案 死亡证,6.5 一致性协议,一致性协议: 对一致性模型的实现方法的描述 基于主副本的协议 主副本:在数据的所有复制副本中,写操作必须先在主副本上进行。 远程写协议:所有写
23、操作由远程服务器执行 本地写协议:将主副本读到执行写操作的本地上执行,远程写协议(1),单个主副本服务器,远程写协议(2),带有备份的主副本服务器,本地写协议(1),单个主副本服务器,本地写协议(2),带有备份的主副本服务器,复制式写协议(1),主动复制 将各更新操作发给各个副本上的进程 问题1:更新顺序问题 解决方案: 全序多播机制:如Lamport时间戳向量 顺序管理器(sequencer):集中式协调器,负责为每个操作赋予唯一的顺序号,转发给各个副本。,复制式写协议(2),问题2:重复调用问题 对象副本的重复调用 服务器的重复调用,复制式写协议(3),解决方案:设置了解副本通信层 基于发
24、送者模式:由协调者决定发送调用/响应 示例:,(a)对复制对象的调用,(b)复制对象返回的应答,基于合法数的协议(1),基于多数表决的复制写协议 与主副本协议的区别:多个副本同时执行写操作 基本算法: 设有N各副本 设置读合法数NR,写合法数Nw 要求:NR + Nw N; Nw N/2,基于合法数的协议(2),举例:,ROWA协议,不正确写合法数,正确读写合法数,6.6分布式共享内存(DSM),CPU与存储器连接模型 单片机 理想的共享存储器多处理机,层次结构,UNIX共享内存举例,多处理器结构 带缓存的多处理器结构 总线仲裁机制:集中式和非集中式,基于总线的多处理机,CPU,内存,总线,(
25、a),总线,(b),CPU,CPU,内存,通写缓冲(write-though)一致性协议,缓存拥有权(ownership)协议,Cache分成若干个cache块 每个Cache块处于三种状态: Invalid数据无效 Clean与存储器数据一致 Dirty数据被更新,与存储器数据不一致 各CPU监听(snoopy)其它CPU在总线的操作,缓存拥有权(ownership)协议,多个CPU可有读拥有权 只有一个CPU有写拥有权 当一个CPU写一个数据 取得对该数据的拥有权 其它CPU将该数据的缓存块置为“invalid” 在本地缓存块中,写数据,并置为“dirty” 适当时候,刷新存储区,或提供给
26、其它CPU,缓存拥有权协议举例,W初始状态(W1)A读W(W1) A写W(W2) A再写W(W3) C读写W(W3),缓存拥有权(ownership)协议,特点 通过各CPU对总线的监听保持缓存一致性 该协议实现在存储器管理单元中 整个算法在一个存储器周期中完成 召回(callback)协议 用软件实现,6.7 举例:基于页面的DSM,页块:地址空间管理的基本单位,实现技术,虚拟地址空间 内存映射(memory mapping) 缺页中断(pagefault),存储映射技术,两个进程共享同一个文件,存储映射技术,s 错误代码 addr 内存地址 len 长度 prot controls pro
27、tection flags 标志位 fd 文件描述符号 offset文件内位移,页面的大小,错误共享:两个无关的变量位于同一页,处理机读页举例,P,W,拥有者,1.读,P,R,拥有者,1.读,P,R,拥有者,1.读,页面,处理器1,处理器2,R,P,R,1.读,P,1.请求复制,2.将页标志为R,3.读,P,R,拥有者,R,拥有者,W,拥有者,1.请求降级,2.请求复制,3.将页标志为R,4.读,进程P读一个页的6种不同情况,处理机写页举例,P,R,1.请求置无效,2.请求拥有者,3.将页标志为W,4.写入,P,1.请求置无效,2.请求拥有者,3.请求页面,4.将页标志为W,5.写入,P,R,
28、拥有者,R,拥有者,W,拥有者,1.请求置无效,2.请求拥有者,3.请求页面,4.将页标志为W,5.写入,进程P写一个页的6种不同情况,拥有者定位协议,四消息协议:请求-响应-请求-响应 三消息协议:请求-转发请求-响应,P,拥有者,页面管理器,1.请求,2.响应,3.请求,4.响应,P,拥有者,页面管理器,1.请求,3.响应,2.转发请求,(a),(b),查找拷贝,. 每个页面的拥有者通过拷贝集得知哪个其它CPU正共享该页面 例:4个页面,5个CPU,DSM应用举例,分布并行式对象数据库系统FISH,分布透明性,Fragment 1,copy,Fragment 2,copy,Query 1,
29、Query 2,Database,存储器映射技术,进程结构,RPC Socket,server process,server thread,Server,clientprocess,client thread,cleint,server process,server thread,lock table,Server,client process,client thread,client,lock table,Site 1,Site 2,RPCSocket,基于pagefault的封锁,Transaction_Begin( );。O1-amount = O2-amount+500;。Transc
30、ation_End( );,Server,Receive requesting; check locking table;,Grant locking; send response;,Pagefault exception,Client,get addr., conflict type get page number,send locking request,set attr. (read/write),Locking table;,memory object tabele,Oid addr size,pid type user,(3)(1) (2)(7) (4)(6) (5),小结,以数据为
31、中心的一致性模型 以客户为中心的一致性模型 复制的一致性维护策略 一致性协议,6.7 习 题,在内存一致性模型的讨论中,经常提到软件和内存的约定。为什么需要这样的约定,举例说明? 下图为顺序一致性内存的一个例子。对P2做少量改动,使它破坏顺序一致性。释放一致性的大多数实现方法是在release时同步共享变量,而不是在acquire时同步,但为什么还需要acquire 操作?,习 题(续),在如下并行执行的进程P1和P2,列出顺序一致性所允许的6种语句交叉执行情况 。 假设两个变量a和b,恰好位于基于分页的DSM系统的同一页上。然而,它们都不是共享变量。是否会发生错误共享?,a=1; b=1; If (b=0) kill (P2) if(a=0) kill (P1) (a) P1 (b) P2,