参考:
整体(“爹!”)https://zhuanlan.zhihu.com/p/341819774
基本组播和可靠组播 https://blog.csdn.net/fragile98/article/details/113880738
有序组播 https://www.icode9.com/content-4-872325.html
两阶段锁
本文是在“整体”上,结合自己的看法和老师给的考察框架总结的,其他的同上一篇(包括跪拜)
may the flame guide thee
第四章 协调和协定
1.分布式互斥的含义
-
目的 -
- 基于消息传递,实现对临界区资源的互斥访问,防止干扰并保证一致性
-
假设 -
-
执行临界区的应用层协议 -
- enter():进入临界区,必要情况下可以阻塞进入
- resourceAccesses():在临界区访问共享资源
- exit():离开临界区,其他进程可以访问临界区
-
基本要求 -
-
安全性(ME1) -
-
活性(ME2) -
- 进入和离开临界区的请求最终成功执行
- 既无死锁也无饥饿
-
顺序(ME3) -
- 如果一个进入临界区的请求发生在先,则进入临界区时仍按此顺序。
- 而因为没有全局时钟,有时使用的一个有用的公平性条件,利用了请求进入临界区的消息之间的发生在先顺序
-
性能 -
2.解决分布式互斥的方法(4种):中央服务器、环、组播+逻辑时钟、Maekawa投票算法
架构
2)环
- 架构,进程安排在一个逻辑环中,每个进程 Pi 与环中的下一个进程 P(i+1) mod N 有一个通信信道
-
满足安全性和活性,但不满足顺序性 -
性能分析 -
-
带宽消耗,由于令牌的传递会持续消耗带宽 -
客户延迟 -
- Min:0 个消息,正好收到令牌的情况
- Max:N 个消息,刚刚传递了令牌的情况
-
同步延迟 -
- Min:1 个消息,进程依次进入临界区
- Max:N 个消息,在一个进程离开和下一个进程进入临界区之间的同步延迟
3)组播 + 逻辑时钟的算法
-
基本思想 -
-
进程进入临界区需要所有其它进程的同意 -
- 组播+应答,要进入临界区的进程组播一个请求消息,并且只有在其他进程都回答了这个消息时才能进入
-
并发控制 -
- 采用 Lamport 时间戳避免死锁,请求进入的消息形如 <T, pi>
- T 是发送者的时间戳, pi 是发送者的标识符。
- 如果请求具有相等的时间戳,那么请求将根据进程的标识符排序。
-
伪码算法 -
- RELEASED 表示在临界区外, HELD 表示在临界区内,WANTED 表示希望进入。
-
性能分析 -
-
带宽消耗 -
- enter(),需要 2(N-1),即 N-1 个请求和 N-1 个应答
-
客户延迟,一个消息往返时间 -
同步延迟,一个消息传递时间
4)Maekawa 投票算法
3. 分布式选举的含义
-
基本概念 -
- 选举算法,选举一个唯一的进程扮演特定的角色
- 召集选举,一个进程启动了选举算法的一次运行,原则上 N 个进程可以并发召集 N 次选举
- 参加者,进程参加了选举算法的某次运行
- 非参加者,进程当前没有参加任何选举算法
- 进程标识符,唯一可按全序排序的任何数值
-
基本要求 -
-
安全性 -
- 每一个进程都有一个变量 elected
- 参与的进程 pi 有 electedi= “空”(进程第一次成为一次选举的参与者时,该值还没有定义) 或 electedi = P(P是在运行结束时具有最大标识符的非崩溃进程)
-
活性 -
- 所有进程 pi 都参加并且最终置 electedi≠“空”或进程 pi 崩溃
- 可能有还不是参与者的进程 pj, electedi 记录着上次当选进程的标识符
-
性能分析 -
- 带宽消耗,与发送消息的总数成正比
- 回转时间,从启动算法到终止算法之间串行消息传输的次数
4 解决分布式选举的方法(2种):环、霸道
1)基于环的选举算法
每一个进程有到下一个进程的通信通道,按顺时针发送消息给邻居
-
目的 -
-
基本思想 -
- 最初,每个进程被标记为选举中的一个非参与者。
- 任何进程可以开始一次选举,它把自己标记为一个参与者,然后把自己的标识符放到一个选举消息里,并把消息顺时针发送给它的邻居
-
伪码算法
-
性能分析 -
-
最坏情况 -
- 启动选举算法的逆时针邻居刚好具有最大标识符
- 带宽消耗,一共需要 3N-1 个消息(为什么??)
- 回转时间,3N-1
-
最好情况,2N -
且不具备容错能力
2)霸道算法
-
性能分析 -
- 最好,N-2,标识符次大的进程发起选举,回转时间为 1 个消息
- 最坏,O(N*N),标识符最小的进程发起选举
5.基本组播可靠组播的区别
-
区分一下组播和广播 -
- 组播,发送一个消息给进程组的每一个进程
- 广播,发送一个消息给系统中所有进程
-
组播通信系统模型 -
1)基本组播
? 如果
-
组播进程不出错 -
Unicast 是可靠的 -
发送方不崩溃 我们认为信息可以最终传送到组内 -
-
两个原语
- Deliver(m):传递由组播发送的消息到调用进程 到应用层
- Receive(m):只是接收到消息
-
- B-multicast(g,m):对每个进程 p 属于 g,send(p, m)
- 进程 p receive(m)时,p 执行 B-deliver(m)
2)可靠组播
-
-
性质(建议结合下一张图理解,别卡着) -
- 完整性:一个正确的进程 p 传递一个消息 m 至多一次,消息总可以通过一个与发送者相关的序号区别
- 有效性:如果一个正确的进程组播消息 m,那么它终将传递 m,并接受他到应用层(Liveness for sender)
- 协定:如果一个正确的进程传递消息 m,那么在 group(m) 中其他正确的进程终将传递 m(要么所有都能传递到,要么所有都传不了)
-
有效性和协定保障了整体的活性(overall liveness):如果一些正确的进程组播了信息m,那所有正确进程都会传递信息m。 -
例子 如果一个进程B-multicast到一半崩溃了,其他一半进程deliver了m,另一半没有。就破坏了协定(Agreement)
6.实现可靠组播的方法(大爹说要好好看)
可以用于投票,但不一定用于投票,思路上要分开
1)B-multicast 实现可靠组播
(以发动者为开始)初始化为空(其他参与者收到消息后也初始化参与信息为空)
收到信息后检查信息m是否已经在收到的参与信息,不在则添加其中((全局消息)完整性)。如果发起者不是收到信息者,组播信息(协定)上传最新信息到应用层(有效性)
-
算法评价
- 满足有效性、完整性、协定
- 效率低,每个消息被发送到每个进程 |g| 次
2)用 IP 组播实现可靠组播
“java中组播的例子好像是先建立一个虚拟ip,然后组中的都从这个ip接受。 这样服务器只用往虚拟ip发,所有人都可以收到。”
-
特点
- 即使用户数量成倍增长,主干带宽不需要随之增加
- 将 IP 组播、捎带确认法和否定确认相结合
-
- 基于 IP 组播,IP 组播通信通常是成功的
- 稍待确认,在发送给组中的消息中捎带确认
- 否认确认,进程检测到他们漏过一个消息时,发送一个单独的应答消息
-
实现
- 设存在组g,每个进程p,维护两个信息:
- 1.Sg.p:意为下一个要发送的信息序号(个人理解,s以为send,g意为group,p代表发送的进程,这里指代任意g组中进程)
- 2.Rg.q:意为来自进程q的最新消息的序号(个人理解,R指代Received(过去式),q指代g组中上一个发消息的进程)
- p要R-multicast一个消息到组g
- 1.捎带Sg,p和确认(即<q, Rg,q>)(设想发送json格式,多一个元素“序号”,内容是全组人公认的下一个消息好,怎么公认是共识机制的事情,这里假设都打成了共识)
- 2.本地计数器更新:Sg,p = Sg,p +1
- 收到一个来自p的广播消息m,准备R-deliver:
- 收到消息的进程q比对收到消息的序号sg,p=Rg.p+1(1.考虑只有组播消息,否则不满足 +1 限定)
- 若m.S <= Rg,p, 则该消息已投递,直接丢弃
- 若m.S > Rg,p +1或对任意捎带过来的确认<q, Rq>有Rq > Rg,q, 则漏掉了一个或多个消息。将消息暂存在保留队列中,并发送否认确认NACK,要求重新发送丢失消息。
- 保留队列 hold-back queue
- 保留队列并不是可靠性必须的,但它简化了协议,使我们能使用序号来代表已投递的消息集。也提供了投递顺序保证。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fRczfNiv-1638620904415)(C:\Users\14182\AppData\Roaming\Typora\typora-user-images\image-20211202171527672.png)]
?算法评价
? ?完整性
? ?通过检测重复消息和IP组播性质实现
? ?有效性
? ?仅在IP组播具有有效性时成立
? ?协定
? ?需要:进程无限组播消息(保证有机会探测消息丢失,因为是被动NACK)+无限保留消息副本时成立(一旦收到NACK,重发)à 不现实
? ?某些派生协议实现了协定
3)有序组播
? ?如果一个正确的进程发出multcast(g, m),然后发出multicast(g, m’),那么每个投递m’的正确的进程将在m’前投递m。
? ?保证每个进程发送的消息在其它进程中的接收顺序一致
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3fMyk6bG-1638620904416)(https://www.icode9.com/i/ll/?i=20210220132606355.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZyYWdpbGU5OA==,size_16,color_FFFFFF,t_70)]
- 因果排序、
- Causal Ordering => FIFO Ordering
如果一个组播协议实施因果排序,那他肯定也是FIFO ordering 相反FIFO不能证明有因果排序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-88ynWzze-1638620904417)(https://www.icode9.com/i/ll/?i=20210220133037431.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZyYWdpbGU5OA==,size_16,color_FFFFFF,t_70)]
- 全排序
- 保证所有进程以同样的顺序传递所有的组播。
全排序并不关心组播发送的顺序。 如果一个正确的进程在传递M之前传递M’,那么其他的进程也在传递M之前传递M’。 - 在所有进程中,传递顺序都是M1:1,M2:1,M3:1,M3:2
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w3IRRUzJ-1638620904418)(https://www.icode9.com/i/ll/?i=20210225162800342.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZyYWdpbGU5OA==,size_16,color_FFFFFF,t_70)]
? 全排序不能保证因果 ? 因果也不能保证全排序
以下是满足因果排序的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m0TkkOO5-1638620904419)(https://www.icode9.com/i/ll/?i=20210225163609830.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZyYWdpbGU5OA==,size_16,color_FFFFFF,t_70)]
但是下图不满足全排序,在圈出来的两个地方的两个信息传递的顺序不一样。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D4K3XP5x-1638620904419)(https://www.icode9.com/i/ll/?i=20210225163657610.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZyYWdpbGU5OA==,size_16,color_FFFFFF,t_70)]
简单的说,FIFO就是本地看到谁先来就是谁,因果要求有因果的事件可以看出排序,无因果顺序先后都行,全排序要求所有节点对事件排序一致
7.共识、拜占庭将军问题、交互一致性 含义
1)共识
-
共识问题:一个或多个进程提议一个值后,应达成一致意见 ?pi: 进程i ?vi: 进程pi的提议值(proposed value) ?di: 进程pi的决定变量(decision value) -
基本要求 -
- 终止性,每个正确的进程最终设置它的决定变量di
- 协定性,如果 Pi 和 Pj 是正确的且已进入决定状态,那么 di=dj
- 完整性,如果正确的进程都提议了同一个值,那么处于决定状态的任何正确进程都已选择该值
-
问题描述 -
- 3 个或更多的将军协商是进攻还是撤退
- 1 个或多个将军可能会叛变
- 所有未叛变的将军执行相同的命令
-
与共识问题区别 -
- 拜占庭是一个独立的进程提供一个值,其他进程决定是否采取该值
- 共识是每个进程都会提议一个值
3)交互一致性
-
每一个进程提供一个值,最终就一个值向量达成一致 -
- 决定向量:向量中每个分量与一个进程的值对应
- 可以应用在分布式机器获取其他所有机器的状态信息
-
算法要求 -
- 终止性,每个正确进程最终设置它的决定变量
- 协定性,所有正确进程的决定向量都相同g
- 完整性,如果进程 Pi 是正确的,那么所有正确的进程都把 Vi 作为他们决定向量中第 i 个分量
8.3 个、4 个拜占庭将军问题分析
1)三个拜占庭将军
-
两个条件 -
- 每两个忠诚的将军必须收到相同的值 V(i)(第 i 个将军的命令)
- 如果第 i 个将军是忠诚的,那么他发送的命令和每个忠诚将军收到的 V(i) 相同
-
简化模型 -
2)四个拜占庭将军
-
解决方案 -
-
正确的将军通过两轮消息取得一致 -
- 第一轮,司令给每个中尉发送一个值
- 第二轮,每个中尉将自己的值发给自己的同级
- 每个中尉执行 majority() 函数
-
性能讨论 -
- 进行 f+1 轮消息传递
- 发送了 O(N 的 f+1 次方)
- 上图,错误节点小于33%,必然得到共识如果将军对的,忠臣可以得到消息;将军错的,忠臣得到共识(皇帝是傻逼)
第五章:事务和并发控制
1.串行等价的概念、充要条件、应用(背错了没分)
-
串行等价 -
- 如果并发事务交错执行操作的效果等同于按某种次序一次执行一个事务的效果,那么这种交错执行是一种串行等价的交错执行
- 相同效果: 读操作 返回值相同,且对象变量相同
-
两个事务串行等价充要条件 -
- 两个事务中所有的冲突操作都按相同的次序在它们访问的对象上执行(先T后U *2)
-
应用 -
2.事务的三种基本控制方法(锁、乐观方法:向前、向后、时间戳)的原理、实现、比较
1)锁
-
死锁:死锁是一种状态,在该状态下一组事务中的每一个事务都在等待其它事务释放某个锁 -
预防死锁 -
-
死锁检测 -
- 维护等待图
- 检测等待图中是否存在环路
- 若存在环路,则选择放弃一个事务
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UKLruCuu-1638620904422)(C:\Users\14182\AppData\Roaming\Typora\typora-user-images\image-20211202213322564.png)] -
锁超时,解除死锁最常用的方式 -
- 每个锁都有一个时间期限
- 超过时间期限的锁成为可剥夺锁
- 若存在等待可剥夺锁保护的对象,则对象解锁
2)乐观并发控制
-
乐观策略 -
-
事务三阶段 -
-
工作阶段(给副本拿着用(指读写),分配个事务号) -
- 每个事务拥有所修改事务的临时版本
- 放弃时没有副作用
- 临时值(写操作)对其他事务不可见
- 每个事务维护访问对象的两个集合:读集合和写集合
-
验证阶段(用户表示结束,系统看冲突没) -
- 在收到closeTransaction请求时,判断是否与其他事务存在冲突
- 成功允许提交
- 失败放弃当前事务或者放弃冲突的事务
-
更新阶段(不冲突就更新)
- 只读事务通过验证立即提交
- 写事务在对象的临时版本记录到持久存储器后提交
-
事务的验证
- n通过读-写冲突规则确保某个事务的执行对其他重叠事务而言是串行等价的
- 重叠事务是指该事务启动时还没有提交的任何事务
-
-
事务号 -
- 每个事务在进入验证阶段前被赋予一个事务号
- 事务号是整数,并按升序排序
- 事务按事务号顺序进入验证阶段
- 事务按事务号提交
-
冲突规则 -
- 事务 Tv 的验证测试
- Ti 和 Tv 之间存在冲突
- 事务 Tv 对事务 Ti 而言是可串行化的
- 每次只允许一个事务处于验证和更新阶段
向后验证
? startTn+1=T2,finishTn=T3(俺寻思这里的Tv应该是指图上T1)
向前验证
-
n验证失败后,冲突解决方法
- 放弃当前进行验证事务
- 推迟验证
- 放弃所有冲突的活动事务,提交已验证事务。
-
向前验证和向后验证的比较 -
- 向前验证在处理冲突时比较灵活
- 向后验证将较大的读集合和较早事务的写集合进行比较
- 向前验证将较小的写集合和活动事务的读集合进行比较
- 向后验证需要存储已提交事务的写集合
- 向前验证不允许在验证过程中开始新事务
年少无知,人颂我写;年老言休,人写我读
饥饿
? 一个事务放弃后会被重启,但不能保证事务最终能通过验证检查
? 利用信号量,实现资源的互斥访问,避免事务饥饿
3) 时间戳排序
-
时间戳 -
- 每个事务在启动时被赋予一个唯一的时间戳
- 时间戳定义了该事务在事务时间序列中的位置
- 不会引起死锁
-
基本思想
-
冲突规则 -
-
写请求有效 -
- 对象的最后一次读访问或写访问由一个较早的事务执行的情况下
-
读请求有效 -
-
基于时间戳的并发控制 -
-
临时版本 -
- 写操作记录在对象的临时版本中(简单地说,所有临时版本都是最新写版本的复制)
- 临时版本中的写操作对其他事务不可见
-
读和写时间戳 -
- 已提交对象的写时间戳比所有临时版本都要早
- 读时间戳集用集合中最大值来表示
- 事务的读操作作用于时间戳小于该事务时间戳的最大写时间戳的对象版本上
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O7p7H36D-1638620904425)(C:\Users\14182\AppData\Roaming\Typora\typora-user-images\image-20211203153300522.png)]
时间戳排序的写规则
-
- 结合上述规则1,2,决定是否接受事务 Tc 对对象 D 执行写操作
if (Tc ≥ D的最大读时间戳 && Tc > D的提交版本上的写时间戳)
在D的临时版本上执行写操作,写时间戳置为 Tc
else /* 写操作太晚了 */
放弃事务 Tc
abc中T3大于提交版本T1的时间戳,所以图上有T3,表示事务被接受。不管上一个是否是紧密相连的(b),后面有没有其他更新的事务(先接受3再接收4,注意这里4是临时版本!)
d中4从临时变为提交版本,就没必要收3了,T3放弃,不在记录(图中出现)
时间戳排序的读规则
规则3,决定是否接收事务Tc对对象D执行的读操作
if (Tc > D提交版本的写时间戳)
设Dselected是D的具有最大写时间戳的版本≤Tc;
if (Dselected已提交)
在Dselected版本上完成读操作
else
等待直到形成Dselected版本的事务提交或放弃,然后重新应用读规则;
}else
放弃事务 Tc
举例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cjZvecAL-1638620904426)(C:\Users\14182\AppData\Roaming\Typora\typora-user-images\image-20211203155919962.png)]
我方以时间戳T3请求,服务器方a中有个提交板T2,b中虽然有T4,但因为是临时版本不影响,C中针对临时版本想读(被选中),那就只能等临时版本写完,d中T4>T3,类似给报社说要读10.1的报纸但摊位只有10.2的报纸,读取失败
时间戳应用举例
开始时假设ABC三个账户(对象)刚被(编辑用户S)初始化写入
随后T要B中账户转账给A,先请求读对象,B维护的读序列序列加上T,然后写对象B,写对象A,期间U编辑者想编辑B,但发现B上一个时间戳事件还是临时状态,于是系统拒绝U对B的读并等待T转为提交版B,提交后UgetB的读取版,B的读取序列也加上U
3.该说不说的啊
这章比较烦(也可能是那段时间病了全靠自己理解),几个控制方法的应用对比,ppt后面很多题很有代表性,建议看一下
第六章:复制
1.复制的概念、动机、基本要求
-
概念 -
-
复制的动机:增强服务 -
-
增强性能 -
- 浏览器对 WEB 资源的缓存
- 数据在多个服务器之间的透明复制
-
提高可用性
-
- 应对服务器故障
- 网络分区和断链操作:预先复制(n乘火车的用户,无线网络可能会中断(断链工作或者断链操作))
-
增强容错能力(正确性) -
- 允许一定数量和类型的故障
- (软件、硬件、网络)
- f+1放崩溃,2f+1防拜占庭(51%???)
- 更新统一
-
基本要求 -
-
复制透明性 -
- 对客户屏蔽多个物理拷贝的存在
- 客户仅对一个逻辑对象进行操作
-
一致性 -
- 在不同应用中有不同强度的一致性需求
- 复制对象集合的操作必须满足应用需求
2 复制的系统模型:主动复制、被动复制
1)系统模型
2)被动复制
-
-
一个副本管理器 + 多个次副本管理器 -
- 若主副本管理器出现故障,则某个备份副本管理器将提升为主副本管理器
- Raft?
-
操作事件次序
-
请求:前端将请求发送给主副本管理器 -
协调(排序):主副本管理器按接收次序对请求排序(FIFO,因果,全排序) -
执行:主副本管理器执行请求并存储响应
- 包括试探性执行,即执行效果可以去除
-
协定(共识) -
- 若请求为更新操作,则主副本管理器向每个备份副本管理器发送更新后的状态、响应和唯一标识符(中心认证类共识)
- 备份副本管理器返回确认
-
响应 -
- 主副本管理器将响应发送给前端(也可以多个,总之返回第一个到达的应答)
- 前端将响应发送给客户
-
可线性化一致性
-
操作的次序由时间决定 链式复制可以提供可线性化 被动复制(主备份)可以提供可线性化
3)主动复制
-
请求:前端使用全序、可靠的组播原语将请求组播到副本管理器组 -
协调:组通信系统以同样的次序(全序)将请求传递到每个副本管理器 -
执行:每个副本管理器以相同的方式执行请求 -
协定:鉴于组播的传递语义,不需要该阶段(因为组播,已经服务器对数据状态已经有了共识) -
响应 -
- 每个副本管理器将响应发给前端
- 前端将响应发给客户
4)复制的一致性
- 可线性化和顺序一致性
- 更弱的一致性(甚至不关心单个副本的错觉)
- 因果一致性(正确排序因果相关的写操作)
- 因果关系:A读了B写的数据;然后B又写了数据
- 所有进程必须以相同的次序看到因果相关的写操作
- 不同进程可能会以不同的次序看到并发的写操作
- 最终一致性 (只要所有的副本最终都收敛到同一个副本)
- 网络分区将一个副本管理器组分为两个或更多的子组
- 一个子组的成员可相互通信,不同子组的成员不能通信
- 如果没有发生分区,相互冲突的两个事务之一将放弃
- 当分区存在时,冲突事务已经被允许在不同分区中提交
3.单拷贝串行化的概念 + 读一个写所有方案原理、适用条件(节点不失效上锁)、本地验证方法
目的:复制数据上的事务
4.gossip 体系结构、基本操作
-
每个前端维护一个向量时间戳 -
- 每个副本管理器有一条对应的记录
- 更新或查询信息中包含时间戳
- 合并操作返回的时间戳与前端时间戳
-
向量时间戳的作用 -
副本管理器状态
- 值:副本管理器维护的应用状态的值
- 值的时间戳:更新的向量时间戳
- 更新日志:记录更新操作
- 副本的时间戳:已经被副本服务器接收到的更新
- 已执行操作表:记录已经执行的更新的唯一标识符,防止重复执行
- 时间戳表:确定何时一个更新已经应用于所有的副本管理器
5.Coda 体系结构、复制策略(略过Bayou和AFS)
-
Coda 目标:
- 提供一个共享的文件系统
- 在存储全部或部分不可访问时刻完全依赖本地资源继续操作计算机
-
扩展(相对AFS亮点):
- 采用文件卷复制技术——提高吞吐率和容错性
- 在客户计算机上缓存文件副本——断链处理
-
体系结构 -
-
Venus/Vice 进程 -
- Venus:前端和副本管理器的混合体
- Vice:副本管理器
-
卷存储组(VSG) -
-
可用的卷存储组(AVSG) -
-
文件访问过程 -
- 当前 AVSG 任何一个服务器提供文件服务,并缓存在客户计算机上
- 对每个副本管理器进行更新分布
-
关闭文件 -
- 修改过的拷贝 并行 广播到 AVSG 中的所有服务器上
-
复制策略 -
|