第三章 分布式系统的同步

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5 6 0
1 0 7
5 6
2
2
3
6
5
2 3 5
4
3.4 原子事务
3.4.1 原子事务简介
两个例子 ◘ 老式磁带
以前的库存 输入 磁带 今天的更新 新的库存
计算机
输出 磁带
◘ 银行转帐 (1)提取(金额,账户1) (2)存入(金额,账户2)
3.4 原子事务
3.4.2 事务模型
稳定存储器 ◘ 不受洪水地震之类大灾难之外的任何其他错误的影响,可以 通过两个磁盘实现。适合于需高度容错的应用,例如事务。
地球第0天到 达中天
到银河系的距 离
到银河系的距 离
地球第n天到 达中天
物理时钟:UTC (统一协调时间),它是所有现代人使用的时间。
3.1 时钟同步
3.1.3 时钟同步算法
1-ρ≤dC/dt≤1+ρ 若保证两个时钟之间的差不超过δ,时钟至少在每δ/2ρ秒内再同步 一次。(ρ为最大漂移速度)
dC/dt>1
3.1 时钟同步
3.1.1 逻辑时钟
先发生关系
◘ a发生在b之前,记为:a→b。存在两种情况: ▪ 如果a和b是同一进程中两个事件,且a发生在b之前,则a→b为真; ▪ 如果a是一个进程发送消息的事件,b为另一个进程接收这一消息的 事件,则a→b为真; ◘ 性质: ▪ 先发生关系具有传递性:若a→b且 b→c,则a→c。
第3章 分布式系统的同步
时钟同步
互斥
选举算法
原子事务
分布式系统中的死锁
3.1 时钟同步
分布式算法的性质
• 相关信息分散在多台机器上 • 进程决策仅仅依赖于本地信息 • 系统中单点故障应避免 • 没有公用时钟和其他精确的全局时间资源存在
进行编译的 计算机
进行编译的 计算机
2144
2145
创建
2146
Lamport解决方案:
B
调整C到达的时间为 56-61,D到达的时 间为54-70
C
D
进程0
进程1
进程2
Baidu Nhomakorabea
3.1 时钟同步
3.1.1 逻辑时钟
Lamport算法补充说明 ◘ 在每两个事件之间,时钟必须至少滴答一下。如果一个进程以 相当快的速度连续发送或接收两条消息,它必须在这中间至少嘀嗒 一下。 ◘ 附加条件:两个事件不会精确的同时发生。如果进程1和进程 2同时发生了2个事件,发生时刻都是40,则前者记为40.1,后者为 40.2。
3.1 时钟同步
3.1.4 使用时钟同步
至多一次消息传递 每台机器上保存一个全局变量G,任何比G早的时间戳都能 安全地从表中移走。 G=当前时间-最大生存时间-最大时钟偏移 G是所有老消息的消息数目的梗概。每隔一定时间△T,将 当前的时间写入磁盘。当服务器重启时,从磁盘上重新装载G, 再加上 △T。 基于时钟的缓冲存储器的一致性
T0
时间
T1
说明:每台机器以小于或等于δ/2ρ秒的周期定期地向时间服务器
发送消息询问当前的时间,时间服务器接到消息后就尽快回答含有 当前时间CUTC值的消息。
3.1 时钟同步
3.1.3 时钟同步算法
Cristian’s算法 问题1:发送者如何根据时间服务器的返回值调整时间? 由于时间不能倒退,因此一种方法是根据时钟快慢,中断服务程 序调整(增大或减小)每次中断所加的时间值。 问题2:如何处理从时间服务器发送的应答到发送者存在的延迟? 精确记录从向时间服务器发送请求的起始时间于时间T0和接收到 应答的结束时间T1。 当前服务器时间估计值=CUTC+(T1-T0)/2 如果考虑服务器中断处理的时间I,那么传输的时间间隔为T1-T0I,单向传输时间为它的一半。

当一个进程从大多数进程哪里获得允许而并不需要所有进程 都允许时就可以进入临界区。
3.2 互斥
3.2.3 令牌环算法
用软件的方法构造出一个逻辑环,环中每个进程都有一个位 置,每个进程都知道谁在自己的下一个位置。优点:消息比 分布式算法少。缺点:令牌丢失、进程崩溃。 2 1 0 9
网络
进程
3 4 5
问题:同步所有时钟产生一个单一的、无二义的时间标准可能吗? ——Lamport:时钟同步是可能的!!!
◘ 如果两个进程无相互作用,它们的时钟无需同步。 ◘ 时钟同步不需要绝对同步,不需所有进程在时间上完全一致,而是它们 在事件发生的顺序上要完全一致。 ◘ 只关心事件发生的顺序,而不关心是否与真实时间接近。(逻辑时钟)
并发事件 如果两个事件x和y,出现在不同的进程中,但并不交换消息,则x→y为
假, y→x也为假。则事件x和y称为并发事件。
3.1 时钟同步
3.1.1 逻辑时钟
Lamport算法 对于对每一事件a,给它分配一个时间值C(a)。这些时间值具有 下列性质:若a→b,则c(a)<c(b)。此外,时钟时间值C必须递增, 不能倒退。
2147
根据本地时 钟的时间
2142
output.o 2143
2144
创建
2145
根据本地时 钟的时间
时间
output.c
当每台机器都有自己的时钟,一个发生于另一个事件之后的事 件可能会标记一个比另一个事件更早的时间
3.1 时钟同步
3.1.1 逻辑时钟
计算机计时方法
◘ 计算机上的计时器通常由一个精确的石英晶体制成,它以一定的频率震 荡。 ◘ 每次震荡计数器减1,当计数器减为0时,产生一次中断(时钟点)。 ◘ 在多CPU系统中,不同计算机上的晶体以不同的频率震荡,导致时钟不 同步。(时钟偏移)
3.2 互斥
3.2.2 分布式算法
Ricart和Agrawale算法
8
0
8 12
0
12
OK OK
0
OK
8
1
2
12
1
OK
2
1
2
图3-9 (a)两个进程在同一时刻进入同一个临界区 (b)进程0的时间戳小,所以它获胜 (c)当进程0完成时,它发送消息OK,进程2现在可进入临界区
3.2 互斥
3.2.2 分布式算法
0 6 12 18 24 30 36 42 48 54 60 A 0 8 16 24 32 40 48 56 64 72 80 0 10 20 30 40 50 60 70 80 90 100
例子:三个进程,每个均 有自己的时钟,每个 时钟速率不同。
B
C
D
进程0
进程1
进程2
3.1 时钟同步
3.1.1 逻辑时钟
Ricart和Agrawale算法 ◘ 每次进入临界区需要2(n-1)条消息,n为系统中进程数。 ◘ 如何解决多点失效 当请求到达时,不管是许可还是拒绝,都要发送应答。 一旦请求或应答丢失,发送者的等待时间到,它继续发 送直到得到应答或者认为目的进程已经崩溃为止。 ◘ 使用组通信原语 ◘ 算法改进
3.2 互斥
3.2.2 分布式算法
Ricart和Agrawale算法 要求系统中所有的事件都是全序的。即对于任何事件组 (如消息),哪个先发生,哪个后发生必须无歧异。算法如下: ◘ 当一个进程想进入临界区,它要建立一个包括它要进入的 临界区的名字、处理机号和当前时间的消息,然后将消息 发给所有其他进程。(也包括发送给它自身) ◘ 当一个进程接收到另一个进程请求消息时,它取决于接收 方的状态以及临界区的命名。有三种情况要加以区别。 ① 若接收者不在临界区中,也不想进入临界区,它就向 发送者发送OK消息。
3.2 互斥
3.2.1 集中式算法
算法思想:选一个进程作为协调者,进程若要进入临界区,它向 协调者发送请求消息,协调者负责处理。
0 1 请求
C 协调者
2
OK 空 队 列
0
1 请求
C
2
无应答
0
释放
1
C
2
OK
协调者
2
协调者
图3-8 集中式算法

优点:容易实现、需要交互的消息少(请求、允许、释放)。 缺点:单点故障、瓶颈、无法辨认服务器崩溃。
欺负算法:当一个进程发现协调者不再相应请求时,它发起选 举。进程P选举过程如下:
◘ P向所有号码比它大的进程发送选举(Election)消息 ◘ 若无人响应,P获胜成为协调者。 ◘ 若有号码比它大的进程响应,响应者接管,P的工作完成。 由于最大的进程总能取胜,因而将该算法命名为欺负算法。
3.3 选举算法
3.3.1 欺负(bully)算法
选举 5 选举 选举 6
2
1
2
1
OK OK
4 0
4 0
以前的协调 者崩溃
5 6
2 4 0
选举
1
5
选举
6 3
选举
7
(a)
3
7
(b)
3
7
(c)
2
1 5 6
OK
2
1 5 6
协调者
4 0
7 3
(d)
4
0 7 3
(e)
协调者
3.3 选举算法
3.3.2 环算法
选举过程 ◘ 发起者沿环发送选举消息,若某点失效则绕过。 ◘ 每次发送者都将自己的进程号加入到消息中。 ◘ 最后,消息到达始发者手中,沿环发送协调者消息。
3.2 互斥
3.2.2 分布式算法
Ricart和Agrawale算法 ② 若接收者已经在临界区中,它就不必回答,而是负责对 请求队列排队。 ③ 若接收者要进入临界区,但是还没有进入时,它要将发 来的消息和它发送给其余进程的时间戳对比,取小的那个。 如果来得消息时间戳小,接收者发送OK消息。如果接收者 本身的时间戳小,那么接收者负责排列请求队列而不发送 任何消息。 ◘ 在发送完允许进入临界区的请求后,进程将不做任何事,仅 等待所有的允许消息,一旦得到允许,它就进入临界区。 ◘ 从临界区退出时,向队列中所有进程发送OK消息,并将它从 队列中删除。
算法 集中式 每次进出需要 的消息 3 进入前的延迟 (按消息次数) 2 问题 协调者崩溃
分布式
令牌环
2(n-1)
1到无穷大
2(n-1)
0到n-1
任何一个进程崩溃
丢失令牌,进程崩溃
表3-1 三种互斥算法比较
3.3 选举算法
3.3.1 欺负(bully)算法
假设每个进程有一个特殊的号码,通常选举算法总是找拥有最 大号码的进程。
3.1 时钟同步
3.1.3 时钟同步算法
Berkeley算法

时间守护进程(时间服务器)定期地询问每台机器的时间。 然后基于这些回答计算出平均值并告诉所有的机器将它们的时钟 拨快或拨慢到一个新的值。(适合于没有WWV接收器的系统)
3:00 3:00 3:00 3:00 +25 3:00 0 -10 -20 3:00 +5 +15
稍快时钟
dC/dt=1
时钟时间C
最佳时钟
dC/dt<1
稍慢时钟
UTC,t
图3-5 不是所有的时钟都按正确的速率中断
3.1 时钟同步
3.1.3 时钟同步算法
Cristian’s算法
适合于只有一台机器上有WWV接收器 (时间服务器),其它所有机器与 它同步的系统。
发送机器 时间服务器 请求 I,中断处理时 间 CUTC T0和T1都是由相同时钟测量的
3:25
2:50
3:25
机器应答
2:50
3:05
3:05
时间守护进程询问其它 机器的时间值
时间守护进程通知每个 机器如何调整时间
3.1 时钟同步
3.1.3 时钟同步算法
平均值算法 ◘ 将时间分成固定长度的再同步间隔,第i次间隔开始于T0+iR, 结束于T0+(i+1)R .T0是过去某一约定的时间,R是一个系统 参数。 ◘ 在每次间隔开始处,每台机器根据自己的时钟广播发送当 前的时间。 ◘ 在机器广播发送时间之后,它启动本地计时器收集在S时间 间隔中到达的其他广播。 ◘ 当所有广播到达后,执行一个算法,得到新的时间值。这 个算法可以是求这些值得平均值,或者是去掉m个最大值和 m个最小值,平均其余值。
lamport算法遵循的规则:
◘ 若在同一进程中a发生在b之前,则C(a)<C(b); ◘ 若a和b分别代表发送消息和接收消息,则C(a)<C(b); ◘ 对所有的a和b,C(a)≠C(b)。
3.1 时钟同步
3.1.2 物理时钟
地球轨道
中天点:太阳到 达一天的最高 点
在n天以后的中天 点地球已经旋转 了将近360度
令牌持有者可 能进入临界区 或将令牌往下 传递
0 2 4 9 7 1 6 5 8 3
8 7
6
图3-10 (a) 网络中一组未排序的进程
(b) 用软件构造进程的逻辑环
3.2 互斥
3.2.4 三种算法的比较
集中式、分布式和令牌环三种算法的性质的比较:进程进入或退 出临界区需要的消息数目,每次进入前的延迟以及一些与算法有 关的问题。
Lamport算法 Lamport解决方案直接使用先发生关系,每条消息携带发送者的 时钟以指出其发送的时刻,当消息到达时,接收者时钟若比消息发 送时钟小,就立即将自己的时钟调到比发送时间大1或更多的值。
0 6 12 18 24 30 36 42 48 70 76 A 0 8 16 24 32 40 48 61 69 77 85 0 10 20 30 40 50 60 70 80 90 100
相关文档
最新文档