第3章 分布式系统的同步
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
时间守护 3:00 3:00 3:00 3:00 +25 -10 -20 3:00 0 3:05 +5 +15 网络
3:25 (a)
2:50
3:25 (b)
2:50
3:05 (c)
3:05
13
平均值算法 – 非集中式方法
将时间划分成固定长度的再同步间隔,第i次 间隔开始于T0+iR,而结束于 T0+(i+1)R 2. 所有机器广播自己的时钟时间 3. 启动本地计时器收集在S时间间隔中到达的 其他机器广播的时间 4. 执行平均时间计算算法,得到新的时间值 (取平均值,去掉两端值 )
例2:汇款(提款存款)
32
事务模型
稳定存储器(Stable Storage): – 通过一对双工磁盘实现
33
事务原语
(1)BEGIN_TRA NSACTION:标记一个事务的开始; (2)END_TRANSACTION:结束事务并设法提交; (3)ABORT_TRANSACTION:取消事务并恢复旧值;
21
分布式算法(Ricart-Agrawala算法)
要求系统中所有事件都是全序的
1. 在一个进程P打算进入临界区R之前,向所有其他进程广播消息 <临界区R名、进程号、时间印>
2. 当一个进程P’收到消息后,做如下决定:
• • •
若P’不在临界区R中,也不想进入R,它就向P发送OK消息; 若P’已经在临界区R中,则不回答,并将P放入请求队列; 若P’也同时要进入临界区R,但是还没有进入时,则将发来的消 息和它发送给其余进程的时间戳对比。如果P时间印小,则P发送 OK消息;否则,不回答,并将P放入请求队列;
BEGIN TRANSACTION reserve WP-JFK reserve JFK-Nairobi Nairobi-Malindi full ABORT TRASACTION
当第三个航班的机票预定失 败后事务中止
35
事务的特性
1. 原子性(Atomic):对外部世界来说,事务的发 生是不可分割的;
28
欺负(Bully)算法
将进程进行排 序
P向高的进程发E 消息 如果没有响应,P 选举获胜 如果有进程Q响应, 则P结束,Q接管 选举并继续下去。
4
4
5 6
5 6
1. 2. 3.
5 6 6
29
环算法
所有进程按逻辑或物理次 序排序,形成一个环 当一个进程P发现协调者C 失效后,向后续进程发送E 消息 每个进程继续向后传递E消 息,直到返回P P在将新确定的协调者C’传 给所有进程
并发事件(concurrent)
6
Lamport算法
对每一事件a,在所有进程中都认可给它分配 一个时间值C(a)
–
–
–
if ab;则C(a)<C(b) a,b C(a) C(b) C是递增的
校正算法
– –
ab, if C(b)<C(a), 则C(b) = C(a) +1
7
Lamport算法
铯原子钟:9192631770次跃迁=1秒 TAI秒:国际原子时间 UTC秒:世界时间(在TAI秒中加入闰秒) 时间服务:WWV电台、GEOS卫星
10
20
10
时钟同步算法
如何与现实时钟同步 如何使不同机器之间相互同 步
dC/dt>1
设机器时钟值Cp(t), t 为UTC 时间
–
40
示例
x=0; y=0; BEGIN_TRANSACTION x=x+1; y=y+2; x=y*y; END_TRANSACTION (a)
3. 当P收到所有的OK消息后,进入R。否则,等待。
4. 当P退出R时,如果存在等待队列,则取出请求者,向其发送OK 消息。
22
分布式算法举例
举例: 共有0,1,2三个进程。 进程0,2申请进入临界区
0
0
0
2
2
2
23
分布式算法评价
• •
缺点:
•
n点失败 n点瓶颈 2(n-1)个消息
– – –
2 0 10 20 30 40 50 60 70 80 90
100
时 间
慢
(a)
快
慢
(b)
快
8
物理时钟与现实时钟
(1)如何用现实世界的时钟将它们同步起来; (2)如何使各时钟之间保持同步。
太阳日:连续的两次日中天的时间 太阳秒:solar-day/86400 平均太阳秒:如,格林威治时间
9
现实时钟
37
事务的实现
私有工作空间与影子更新:
当进程启动事务T时,分配一个私有工作空间W, 在提交或中止T前所有的读写操作都是在W中进行
0‘
3‘
影子块
38
先写日志(WAL)
就地更新(in-place) 日志纪录
–
〈事务标识,文件标识,块号,前像,后像〉
例:
39
先写日志协议
回滚(Rollback): 反做(undo)废弃事务的更新结果 只有当日志成功地写入稳存之后,才可以修改文件。 – 如果事务执行成功并被提交,则它的提交记录将被写入日志。 – 如果事务异常中止,则用日志来备份初始状态。从日志的未 尾开始,向回逐个读取日志记录,反做记录中描述的修改, 即回滚处理。 在系统崩溃后,日志也可用来进行的恢复。
相关信息散布在多个场地上 每个进程只能基于本地信息做决定
应避免因单点故障造成整个系统的失败
不存在公共时钟或精确的全局时间
4
时钟同步问题
例:makefile误差
output.o : cc –C output.c
进行编译的 计算机
2144
2145 创建output.o
2146
2147
根据本地时 钟的时间
改进方案:
超时重发 组通信 简单多数同意
比原来集中式算法慢,复杂,昂贵,而且不健壮。
24
令牌环算法
构造一个逻辑环,得到令牌才可进入临界区
3
25
三种互斥算法的比较
算法 集中式 分布式 令牌环
每次进出 需要的消息 3 2(n-1) 1到∞
进入前的延迟 (按消息次数) 2 2(n-1) 0到n-1
存在问题
o 两个问题:时间决不能倒退, 延迟 o 假设:每秒产生100次中断, 每次中断将时间加10毫秒 若调慢时钟,中断服务程序 每次只加9毫秒; 若加快时钟,则加11毫秒。 传播时间
12
Berkeley 算法 – 主动式方法
1. 2. 3.
时间监控器定期查询其他机 器时间 计算出平均值 通知其他机器调整时间
• • • •
服务器要一直保存一个全局变量 G = CurrentTime – MaxLifetime – MaxClockSkew 所有<G的时间印从表T中清除 对于具有新的ID的到达消息m,如果ts(m)<G则拒绝m, 否则,接受m 按照一定时间间隔T,定期地将G写入磁盘。 当系统重启后,G’=G+T
16
使用同步时钟
1. 2. 3.
基于时钟的缓存一致性
当客户读取一个副本到缓存时,设置一个租期(lease) 在租期过期之前,客户可更新副本,重续租期 如果已经过期,缓存中的副本失效
改进的一致性协议 • 当客户修改文件时,只需将所有没有到期的缓存副 本设为无效 • 如果某个客户崩溃,则等待直到该客户的租期过期
(4)READ:从一个文件(或其他类型的对象,如数据库)读取数 据;
(5)WRITE:将数据写入一个文件(或其他类型的对象,如数据 库)
34
事务举例
预定三个航班机票:中转站是JFK、Nairobi
BEGIN TRANSACTION reserve WP-JFK reserve JFK-Nairobi reserve Nairobi-Malindi END TRANSACTION
– – – –
稍快时钟
最大偏移率 精确时钟: dC/dt =1 快时钟: dC/dt 〉1 慢时钟: dC/dt < 1
时钟时间,C
dC/dt=1 最佳时 钟 稍慢时 dC/dt<1 钟
UTC,t
11
Christian’s 算法 -- 逐步调整法
时间服务器,可接受WWV的UTC时间 每隔δ/2ρ校准时间( 允许误差δ ,存在误差ρ )
2. 一致性(Consistent):事务不会破坏系统的恒定;
3. 隔离性(Isolated):并发的事务之间不会互相干 扰;可串行性(Serializable):多个事务并发执行 的结果,与它们顺序地执行效果相同。
4. 持久性(Durable):一旦一个事务提交,它的更 新结果不会因故障而丢失。
36
协调者崩溃 任何一个进程崩 溃 丢失令牌,进程 崩溃
26
主要内容
3.1 时钟同步 3.2 互斥 3.3 选举算法 3.4 原子性事务 3.5 分布式系统中的死锁
27
3.3 选举算法
许多分布式算法需要一个进程充当协调者,发起者, 排序者或其他特定的角色。 作用:做出统一的的决定
–
例如:确定协调者
隔离性(Isolated)
BEGIN_TRANSACTION x = 0; x = x+1; END_TRANSACTION (a) BEGIN_TRANSACTION x = 0; x = x+2; END_TRANSACTION (b) 时间 调度1 调度2 调度3 x=0; x=x+1; x=0; x=x+2; x=0; x=x+3; x=0; x=0; x=x+1; x=x+2; x=0; x=x+3; x=0; x=0; x=x+1; x=0; x=x+2; x=x+3; (d) 合法 合法 不合法 BEGIN_TRANSACTION x = 0; x = x+3; END_TRANSACTION (c)
0 0 6 12 18 24 30 36 42 48 54 60 D A 1 0 8 16 24 32 40 48 56 64 72 80 C B 2 0 10 20 30 40 50 60 70 80 90
100
0 0 6 12 18 24 30 36 42 48 70 76 D A
1 0 8 16 24 32 40 48 61 69 77 85 C B
1.
14
多个外部时间源法
例:OSF DCE方法
1. 接受所有时间源的当前UTC区间 2. 去掉与其他区间不相交的区间 3. 将相交部分的中点作为校准时间
时间
15
使用同步时钟
1. 2. 3.
最多一次消息提交
每个消息携带一个ID和一个时间印ts(timestamp) 服务器的表T中,记录每个连接C最近的时间印t 如果到达的消息m,ts(m)<t, 则拒绝m
17
主要内容
3.1 时钟同步 3.2 互斥 3.3 选举算法 3.4 原子性事务 3.5 分布式系统中的死锁
18
3.2 互 斥
基本概念
–
当一个进程使用某个共享资源,其他进程不允许对这个资源 操作 对共享资源进行操作的程序段 信号量、管程 死锁 活锁 饥饿
临界区(Critical Section):
第3章 分布式系统的同步
中国科技大学软件学院
丁箐
主要内容
3.1 时钟同步 3.2 互斥 3.3 选举算法 3.4 原子性事务 3.5 分布式系统中的死锁
2
主要内容
3.1 时钟同步 3.2 互斥 3.3 选举算法 3.4 原子性事务 3.5 分布式系统中的死锁
3
3.1 时钟同步
分布式算法的特点
进行编辑的 计算机
2142
2143
2144 创建output.c
2145
根据本地时 钟的时间
时间
时间
5
逻辑时钟
计时器:石英晶体+计数器 时钟偏差(clock skew) 逻辑时钟:相对时间 物理时钟:真实时间 “之前”关系:
– –
–
事件a在b之前出现,则ab a为发送消息m,b为接收m,则ab 具有传递性:ab, bc,则ac
2
Baidu Nhomakorabea
1.
2. 3.
5
30
主要内容
3.1 时钟同步 3.2 互斥 3.3 选举算法 3.4 原子性事务 3.5 分布式系统中的死锁
31
3.4 原子性(Atomic)事务
原子性: 组成原子事务的一组操作要么全部执行,要么一个也 不执行,并且事务失败后能返回到最初状态 例1: 老式磁带系统(备份)
–
基本方法:
–
问题:
– – –
19
集中式算法(仿照单处理机系统的方法 )
协调者:确定那个进程可进入临界区 通信量:3个消息:请求-许可-释放
C
C
C
缺点:单点失败 单协调者会成为执行的瓶颈
20
Win Thread 临界区
CreateMutex() WaitForSingleObject() ReleaseMutex() InitializeCriticalSection() EnterCriticalSection() LeaveCriticalSection()
3:25 (a)
2:50
3:25 (b)
2:50
3:05 (c)
3:05
13
平均值算法 – 非集中式方法
将时间划分成固定长度的再同步间隔,第i次 间隔开始于T0+iR,而结束于 T0+(i+1)R 2. 所有机器广播自己的时钟时间 3. 启动本地计时器收集在S时间间隔中到达的 其他机器广播的时间 4. 执行平均时间计算算法,得到新的时间值 (取平均值,去掉两端值 )
例2:汇款(提款存款)
32
事务模型
稳定存储器(Stable Storage): – 通过一对双工磁盘实现
33
事务原语
(1)BEGIN_TRA NSACTION:标记一个事务的开始; (2)END_TRANSACTION:结束事务并设法提交; (3)ABORT_TRANSACTION:取消事务并恢复旧值;
21
分布式算法(Ricart-Agrawala算法)
要求系统中所有事件都是全序的
1. 在一个进程P打算进入临界区R之前,向所有其他进程广播消息 <临界区R名、进程号、时间印>
2. 当一个进程P’收到消息后,做如下决定:
• • •
若P’不在临界区R中,也不想进入R,它就向P发送OK消息; 若P’已经在临界区R中,则不回答,并将P放入请求队列; 若P’也同时要进入临界区R,但是还没有进入时,则将发来的消 息和它发送给其余进程的时间戳对比。如果P时间印小,则P发送 OK消息;否则,不回答,并将P放入请求队列;
BEGIN TRANSACTION reserve WP-JFK reserve JFK-Nairobi Nairobi-Malindi full ABORT TRASACTION
当第三个航班的机票预定失 败后事务中止
35
事务的特性
1. 原子性(Atomic):对外部世界来说,事务的发 生是不可分割的;
28
欺负(Bully)算法
将进程进行排 序
P向高的进程发E 消息 如果没有响应,P 选举获胜 如果有进程Q响应, 则P结束,Q接管 选举并继续下去。
4
4
5 6
5 6
1. 2. 3.
5 6 6
29
环算法
所有进程按逻辑或物理次 序排序,形成一个环 当一个进程P发现协调者C 失效后,向后续进程发送E 消息 每个进程继续向后传递E消 息,直到返回P P在将新确定的协调者C’传 给所有进程
并发事件(concurrent)
6
Lamport算法
对每一事件a,在所有进程中都认可给它分配 一个时间值C(a)
–
–
–
if ab;则C(a)<C(b) a,b C(a) C(b) C是递增的
校正算法
– –
ab, if C(b)<C(a), 则C(b) = C(a) +1
7
Lamport算法
铯原子钟:9192631770次跃迁=1秒 TAI秒:国际原子时间 UTC秒:世界时间(在TAI秒中加入闰秒) 时间服务:WWV电台、GEOS卫星
10
20
10
时钟同步算法
如何与现实时钟同步 如何使不同机器之间相互同 步
dC/dt>1
设机器时钟值Cp(t), t 为UTC 时间
–
40
示例
x=0; y=0; BEGIN_TRANSACTION x=x+1; y=y+2; x=y*y; END_TRANSACTION (a)
3. 当P收到所有的OK消息后,进入R。否则,等待。
4. 当P退出R时,如果存在等待队列,则取出请求者,向其发送OK 消息。
22
分布式算法举例
举例: 共有0,1,2三个进程。 进程0,2申请进入临界区
0
0
0
2
2
2
23
分布式算法评价
• •
缺点:
•
n点失败 n点瓶颈 2(n-1)个消息
– – –
2 0 10 20 30 40 50 60 70 80 90
100
时 间
慢
(a)
快
慢
(b)
快
8
物理时钟与现实时钟
(1)如何用现实世界的时钟将它们同步起来; (2)如何使各时钟之间保持同步。
太阳日:连续的两次日中天的时间 太阳秒:solar-day/86400 平均太阳秒:如,格林威治时间
9
现实时钟
37
事务的实现
私有工作空间与影子更新:
当进程启动事务T时,分配一个私有工作空间W, 在提交或中止T前所有的读写操作都是在W中进行
0‘
3‘
影子块
38
先写日志(WAL)
就地更新(in-place) 日志纪录
–
〈事务标识,文件标识,块号,前像,后像〉
例:
39
先写日志协议
回滚(Rollback): 反做(undo)废弃事务的更新结果 只有当日志成功地写入稳存之后,才可以修改文件。 – 如果事务执行成功并被提交,则它的提交记录将被写入日志。 – 如果事务异常中止,则用日志来备份初始状态。从日志的未 尾开始,向回逐个读取日志记录,反做记录中描述的修改, 即回滚处理。 在系统崩溃后,日志也可用来进行的恢复。
相关信息散布在多个场地上 每个进程只能基于本地信息做决定
应避免因单点故障造成整个系统的失败
不存在公共时钟或精确的全局时间
4
时钟同步问题
例:makefile误差
output.o : cc –C output.c
进行编译的 计算机
2144
2145 创建output.o
2146
2147
根据本地时 钟的时间
改进方案:
超时重发 组通信 简单多数同意
比原来集中式算法慢,复杂,昂贵,而且不健壮。
24
令牌环算法
构造一个逻辑环,得到令牌才可进入临界区
3
25
三种互斥算法的比较
算法 集中式 分布式 令牌环
每次进出 需要的消息 3 2(n-1) 1到∞
进入前的延迟 (按消息次数) 2 2(n-1) 0到n-1
存在问题
o 两个问题:时间决不能倒退, 延迟 o 假设:每秒产生100次中断, 每次中断将时间加10毫秒 若调慢时钟,中断服务程序 每次只加9毫秒; 若加快时钟,则加11毫秒。 传播时间
12
Berkeley 算法 – 主动式方法
1. 2. 3.
时间监控器定期查询其他机 器时间 计算出平均值 通知其他机器调整时间
• • • •
服务器要一直保存一个全局变量 G = CurrentTime – MaxLifetime – MaxClockSkew 所有<G的时间印从表T中清除 对于具有新的ID的到达消息m,如果ts(m)<G则拒绝m, 否则,接受m 按照一定时间间隔T,定期地将G写入磁盘。 当系统重启后,G’=G+T
16
使用同步时钟
1. 2. 3.
基于时钟的缓存一致性
当客户读取一个副本到缓存时,设置一个租期(lease) 在租期过期之前,客户可更新副本,重续租期 如果已经过期,缓存中的副本失效
改进的一致性协议 • 当客户修改文件时,只需将所有没有到期的缓存副 本设为无效 • 如果某个客户崩溃,则等待直到该客户的租期过期
(4)READ:从一个文件(或其他类型的对象,如数据库)读取数 据;
(5)WRITE:将数据写入一个文件(或其他类型的对象,如数据 库)
34
事务举例
预定三个航班机票:中转站是JFK、Nairobi
BEGIN TRANSACTION reserve WP-JFK reserve JFK-Nairobi reserve Nairobi-Malindi END TRANSACTION
– – – –
稍快时钟
最大偏移率 精确时钟: dC/dt =1 快时钟: dC/dt 〉1 慢时钟: dC/dt < 1
时钟时间,C
dC/dt=1 最佳时 钟 稍慢时 dC/dt<1 钟
UTC,t
11
Christian’s 算法 -- 逐步调整法
时间服务器,可接受WWV的UTC时间 每隔δ/2ρ校准时间( 允许误差δ ,存在误差ρ )
2. 一致性(Consistent):事务不会破坏系统的恒定;
3. 隔离性(Isolated):并发的事务之间不会互相干 扰;可串行性(Serializable):多个事务并发执行 的结果,与它们顺序地执行效果相同。
4. 持久性(Durable):一旦一个事务提交,它的更 新结果不会因故障而丢失。
36
协调者崩溃 任何一个进程崩 溃 丢失令牌,进程 崩溃
26
主要内容
3.1 时钟同步 3.2 互斥 3.3 选举算法 3.4 原子性事务 3.5 分布式系统中的死锁
27
3.3 选举算法
许多分布式算法需要一个进程充当协调者,发起者, 排序者或其他特定的角色。 作用:做出统一的的决定
–
例如:确定协调者
隔离性(Isolated)
BEGIN_TRANSACTION x = 0; x = x+1; END_TRANSACTION (a) BEGIN_TRANSACTION x = 0; x = x+2; END_TRANSACTION (b) 时间 调度1 调度2 调度3 x=0; x=x+1; x=0; x=x+2; x=0; x=x+3; x=0; x=0; x=x+1; x=x+2; x=0; x=x+3; x=0; x=0; x=x+1; x=0; x=x+2; x=x+3; (d) 合法 合法 不合法 BEGIN_TRANSACTION x = 0; x = x+3; END_TRANSACTION (c)
0 0 6 12 18 24 30 36 42 48 54 60 D A 1 0 8 16 24 32 40 48 56 64 72 80 C B 2 0 10 20 30 40 50 60 70 80 90
100
0 0 6 12 18 24 30 36 42 48 70 76 D A
1 0 8 16 24 32 40 48 61 69 77 85 C B
1.
14
多个外部时间源法
例:OSF DCE方法
1. 接受所有时间源的当前UTC区间 2. 去掉与其他区间不相交的区间 3. 将相交部分的中点作为校准时间
时间
15
使用同步时钟
1. 2. 3.
最多一次消息提交
每个消息携带一个ID和一个时间印ts(timestamp) 服务器的表T中,记录每个连接C最近的时间印t 如果到达的消息m,ts(m)<t, 则拒绝m
17
主要内容
3.1 时钟同步 3.2 互斥 3.3 选举算法 3.4 原子性事务 3.5 分布式系统中的死锁
18
3.2 互 斥
基本概念
–
当一个进程使用某个共享资源,其他进程不允许对这个资源 操作 对共享资源进行操作的程序段 信号量、管程 死锁 活锁 饥饿
临界区(Critical Section):
第3章 分布式系统的同步
中国科技大学软件学院
丁箐
主要内容
3.1 时钟同步 3.2 互斥 3.3 选举算法 3.4 原子性事务 3.5 分布式系统中的死锁
2
主要内容
3.1 时钟同步 3.2 互斥 3.3 选举算法 3.4 原子性事务 3.5 分布式系统中的死锁
3
3.1 时钟同步
分布式算法的特点
进行编辑的 计算机
2142
2143
2144 创建output.c
2145
根据本地时 钟的时间
时间
时间
5
逻辑时钟
计时器:石英晶体+计数器 时钟偏差(clock skew) 逻辑时钟:相对时间 物理时钟:真实时间 “之前”关系:
– –
–
事件a在b之前出现,则ab a为发送消息m,b为接收m,则ab 具有传递性:ab, bc,则ac
2
Baidu Nhomakorabea
1.
2. 3.
5
30
主要内容
3.1 时钟同步 3.2 互斥 3.3 选举算法 3.4 原子性事务 3.5 分布式系统中的死锁
31
3.4 原子性(Atomic)事务
原子性: 组成原子事务的一组操作要么全部执行,要么一个也 不执行,并且事务失败后能返回到最初状态 例1: 老式磁带系统(备份)
–
基本方法:
–
问题:
– – –
19
集中式算法(仿照单处理机系统的方法 )
协调者:确定那个进程可进入临界区 通信量:3个消息:请求-许可-释放
C
C
C
缺点:单点失败 单协调者会成为执行的瓶颈
20
Win Thread 临界区
CreateMutex() WaitForSingleObject() ReleaseMutex() InitializeCriticalSection() EnterCriticalSection() LeaveCriticalSection()