文章目录
- 1.物理时钟同步
- 1.1 时钟同步问题
- 1.2 时钟同步算法
- 1.3 网络时间协议
- (1)Christian算法
- (2)考虑的问题
- (3)Berkeley算法-集中式方法
- (4)平均值算法-非集中式方法
- (5)多重外部时间源法
- (6)无线网络中的时间同步
- (7)参考广播同步协议(RBS)
- 2.逻辑时钟同步
- 2.1 基本概念
- 2.2 Lamport算法:校正算法
- (1)Lamport算法
- (2)全序多播:Lamport应用示例
- 2.3 向量时钟
- (1)因果性
- (2)Vector Clock
- (3)进程Pi上的向量时钟$VC_
- (4)向量修改规则
- (4)Pi的消息m在进程Pk正确递交的条件:
- 3.互斥控制
- 3.1基本概念
- 3.2 集中式算法
- 3.3 分布式算法(Ricart-Agrawala算法)
- (1)算法
- (2)举例
- (3)算法评价
- 3.4 令牌环算法
- 3.5 三种互斥算法的比较
- 4.选举算法
- 4.1 基本概念
- 4.2 霸道(Bully)算法
- 4.3 环算法
- 4.4 无线网络系统的选举算法
- 4.5 大型系统的选举
1.物理时钟同步
分布式协同处理:基于真实时间的同步
分布式算法的特点:
- 相关信息分布在多个场地上
- 应避免因单点失败造成整个系统的失败
- 不存在公共时钟或精确的全局时间
1.1 时钟同步问题
makefile误差
两计算机本地时钟不一致导致先后顺序错乱
1.2 时钟同步算法
同步问题:
- 如何与现实时钟同步
- 如何使不同机器之间相互同步
设进程P的机器时钟值 C p ( t ) C_p(t) Cp(t):t为UTC时间
最大偏移率( ρ \rho ρ)
- 精确时钟(理想情况):$C_p(t)=t
, 即 ,即 ,即dC/dt=1$ - 快时钟: d C / d t > 1 dC/dt>1 dC/dt>1
- 慢时钟: d C / d t < 1 dC/dt<1 dC/dt<1
时钟校正:
- 设时钟偏移率为 ρ \rho ρ,两个时钟之间的允许误差为 δ \delta δ
- 则 Δ t \Delta t Δt后,最大可能误差为 2 ρ Δ t 2\rho \Delta t 2ρΔt
- 为了保证 2 ρ Δ t ≤ δ 2\rho \Delta t ≤ \delta 2ρΔt≤δ,则$ \Delta t ≤ \delta/2\rho$;即每隔 δ / 2 ρ \delta/2\rho δ/2ρ 应该校准时间
校准原则:单调递增
- 假设:每秒产生100次中断,每次中断将时间加10毫秒
- 若调慢时钟,中断服务程序每次只加9毫秒
- 若加快时钟,每次加11毫秒
1.3 网络时间协议
(1)Christian算法
- 时间服务器, 可接受WWV的UTC时间
- 每隔 δ / ( 2 ρ ) δ/(2ρ) δ/(2ρ), 客户机向服务器询问时间
- 服务器返回CUTC
- 客户机校正自己时间
(2)考虑的问题
时间服务请求过程参数
- T 1 T_1 T1:A请求时间
- T 2 T_2 T2:B接收时间
- T 3 T_3 T3:B发送时间
- T_4:A接收时间
传输延时
- 假定双向路径相同
- d T r e q ≈ d T r e s dT_{req} \approx dT_{res} dTreq≈dTres
- 平均传输时延$ \delta=(dT_{req}+dT_{res})/2 \approx dT_{req} \approx dT_{res}$
时间偏差 θ \theta θ
- T 1 = T 2 − d T r e q + θ T_1 = T_2 - dT_{req} + \theta T1=T2−dTreq+θ
- T 4 = T 3 + d T r e s + θ T_4=T_3+dT_{res} + \theta T4=T3+dTres+θ
- θ = T 4 − T 3 − d T r e s = T 4 − T 3 − δ = T 4 − T 3 − ( T 2 − T 1 + θ ) + ( T 4 − T 3 − θ ) 2 = ( T 1 − T 2 ) + ( T 4 − T 3 ) 2 \theta = T_4-T_3 -dT_{res} = T_4-T_3-\delta = T_4-T_3- \frac{(T_2-T_1+\theta) + (T_4-T_3 -\theta)}{2} = \frac{(T_1-T_2)+(T_4-T_3)}{2} θ=T4−T3−dTres=T4−T3−δ=T4−T3−2(T2−T1+θ)+(T4−T3−θ)=2(T1−T2)+(T4−T3)
(3)Berkeley算法-集中式方法
- 时间监控器定期查询其他机器时间
- 计算出平均值
- 通知其他机器调整时间
(4)平均值算法-非集中式方法
- 划分固定时间间隔R
- 在每个间隔,所有机器广播自己的时钟时间
- 启动本地计时器手机在S时间间隔中到达的其他机器广播的时间
- 执行平均时间计算算法,得到新的时间值
(5)多重外部时间源法
消除传播延迟造成的误差
例:OSF DCE方法
- 接收所有时间源的当前UTC区间
- 去掉与其他区间不相交的区间
- 将相交部分的中间作为校准时间
(6)无线网络中的时间同步
传统分布式系统特点:
- 时间服务器容易部署
- 机器相互联系
- 双向协议
无线网络系统特点
- 结点资源受限
- 多跳路由器代价高
参考广播同步协议(RBS)
- 没有具体精确时间结点
- 目标:接收器之间相对同步
(7)参考广播同步协议(RBS)
一个节点广播一个消息m后,其他节点记录本地接收时间 T p , m T_{p,m} Tp,m。P和Q交换各自的接收时间,计算相互偏差
偏 差 [ p , q ] = ∑ k = 1 M ( T p . k − T q , k ) M M = { m 1 , m 2 , . . . , m k } 偏差[p,q]=\frac{\sum_{k=1}^{M}(T_{p.k}-T_{q,k})}{M} ~~ M=\{m_1, m_2,...,m_k\} 偏差[p,q]=M∑k=1M(Tp.k−Tq,k) M={m1,m2,...,mk}
偏移量随时间增大,采用线性回归方法估计
$$
偏差p,q = \alpha t + \beta
$$
其中,系数$ \alpha$ 、 β \beta β由 ( T p . k , T q , k ) (T_{p.k},T_{q,k}) (Tp.k,Tq,k)对计算确定
2.逻辑时钟同步
2.1 基本概念
物理时钟:真实事件
逻辑时钟:相对时间
确定事件的先后顺序,而不精确到事件。例子: 记录input.c的版本号, 而不是物理时间, 和input.o进行版本比对。
“之前”关系(happens-before): → \rightarrow →
- 同一进程:事件a在b之前出现,则: a → b a \rightarrow b a→b
- 不同进程:a为发送消息m,b为接收m,则: a → b a \rightarrow b a→b
- 具有传递性: a → b a \rightarrow b a→b, b → c b \rightarrow c b→c,则 a → c a \rightarrow c a→c
并发事件(concurrent):
- 两个事件相互对立。既不 a → b a \rightarrow b a→b,不 b → a b \rightarrow a b→a
2.2 Lamport算法:校正算法
(1)Lamport算法
C(a)表示事件a的时钟值。性质:
- if a → b a\rightarrow b a→b,then $C(a)<C(b) $
- $\forall a,b ~~~~ C(a) \neq C(b) $
- C是递增的
校正算法
- a → b a\rightarrow b a→b,
- if C ( b ) < C ( a ) C(b)<C(a) C(b)<C(a), then C ( b ) = C ( a ) + 1 C(b) = C(a) +1 C(b)=C(a)+1
三个进程,各有自己的局部时钟,他们速率不同;通过Lamport算法,校正时钟
校正算法:
- P i P_i Pi 在执行一个事件之前, P i P_i Pi执行 C i ← C i + 1 C_i \leftarrow C_i + 1 Ci←Ci+1
- P i P_i Pi 在发送消息m给 P j P_j Pj时,时间戳 t s ( m ) ← C i ts(m) \leftarrow C_i ts(m)←Ci
- P j P_j Pj接收到消息m后, C j ← m a x { C j , t s ( m ) } C_j \leftarrow max\{C_j, ts(m)\} Cj←max{Cj,ts(m)}
(2)全序多播:Lamport应用示例
问题:两个进程分别对同一个复制数据库进行更新时,造成不一致状态
原因:全局次序不一致。 u 1 → u 2 ; u 2 → u 1 u1→u2; u2→u1 u1→u2;u2→u1
解决方案:全序多播
-
发送进程多播发送消息m时,给m带上当前时间戳ts
-
当接收进程收到消息m后,存放其局部队列q,并按时间戳排序
-
接收进程向所有进程多播发送应答
-
当消息m被所有进程应答,且排在队列q队首后, 方可处理(递交给接收进程,从队列中删除)
定理:各个进程的局部队列的值最终都相同
2.3 向量时钟
(1)因果性
如果事件a, b存在因果关系, a为因, b为果, 则 C ( a ) < C ( b ) C(a)<C(b) C(a)<C(b); 但反之不一定成立。
通过向量时钟捕获因果关系
(2)Vector Clock
如果 V C ( a ) < V C ( b ) VC(a)<VC(b) VC(a)<VC(b), 则a与b为因果关系
(3)进程Pi上的向量时钟$VC_
i$的基本性质
- V C i [ i ] = n VC_i[i]=n VCi[i]=n, 在Pi中发生了n个事件
- V C i [ j ] = k VC_i[j]=k VCi[j]=k, Pi已知在Pj中发生了k个事件
(4)向量修改规则
- Pi在执行一个事件之前, Pi执行$VC_i[i]←VC_i[i]+1 $
- 当进程Pi发送消息m时,$ts(m)=VC_i $
- 当进程Pj收到m后,置$VC_j[k]=max{VC_j[k],ts(m)[k]} $
(4)Pi的消息m在进程Pk正确递交的条件:
- $ts(m)[i] = VC_k[i]+1 $
- $ts[m][j]≤VC_k[j] ~~for
alli≠j $ (符合因果关系)
3.互斥控制
3.1基本概念
互斥访问:当一个进程使用某个共享资源,其他进程不允许对这个资源操作
临界区:对共享资源进行操作的程序段
基本方法:信号量、管程
问题:死锁、饥饿
3.2 集中式算法
协调者:确定那个进程可进入临界区
通信量:3个消息:请求-许可-释放
优点:通信量少,实现简单,不会死锁、饿死
缺点:单点失败;单点瓶颈(大规模系统中)
3.3 分布式算法(Ricart-Agrawala算法)
(1)算法
在一个进程P打算进入临界区R之前,向所有其他进 程广播消息 < 临 界 区 R 名 、 进 程 号 、 时 间 戳 > <临界区R名、进程号、时间戳> <临界区R名、进程号、时间戳>
当一个进程P’收到消息后,做如下决定:
- 若P’不在临界区R中,也不想进入R,它就向P发送OK;
- 若P’已经在临界区R中,则不回答,并将P放入请求队列;
- 若P’也同时要进入临界区R,但是还没有进入时,则将发来的消息和它发送给其余进程的时间戳对比。如果P时间戳小, 则向P发送OK;否则,不回答,并将P放入请求队列;
当P收到所有的OK消息后,进入R。否则,等待。
当P退出R时,如果存在等待队列,则取出全部请求者,向其发送OK消息
(2)举例
共有0,1,2三个进程,进程0,2申请进入临界区
(3)算法评价
优点:不会死锁和饿死
缺点:
- n点失败
- n点瓶颈
- 2 ( n − 1 ) 2(n-1) 2(n−1)个消息
改进方案:
-
总是发送应答
-
超时重发请求
-
组通信(进程少且不改变组成员时)
-
简单多数同意(>1/2)
3.4 令牌环算法
构造一个逻辑环,得到令牌才可进入临界区
问题:令牌丢失检测
3.5 三种互斥算法的比较
算法 | 每次进出需要的消息 | 进入前的延迟(按消息次数) | 存在问题 |
集中式 | 3 | 2 | 协调者崩溃 |
分布式 | 2(n-1) | 2(n-1) | n点崩溃 |
令牌环 | 1到 ∞ \infty ∞ | 0到n-1 | 丢失令牌,进程崩溃 |
4.选举算法
4.1 基本概念
作用:
- 在分布式进程之间做出统一的的决定
- 例如:确定协调者
前提:
- 每个进程具有唯一的号码,如IP地址
- 每个进程知道其它进程的号码
选举标准:确定具有最大号码的进程
4.2 霸道(Bully)算法
将进程进行排序
- P向号码高的进程发E消息
- 如果没有响应,P选举获胜
- 如果有进程Q响应,则P结束,Q接管选举并继续下去。
4.3 环算法
所有进程按逻辑或物理次序排序,形成一个环
- 当一个进程P发现协调者C失效后,向后续进程发送E消息
- 每个进程继续向后传递E消息,直到返回P
- P再将新确定的协调者C’ 传给所有进程
4.4 无线网络系统的选举算法
选举一个协调者,它具有最大的能力
1、发起者,提出选举
2、向邻居结点扩展,形成一个生成树(spanning tree)
3、沿生成树向父节点返回 [ i , c m a x ] [i, c_{max}] [i,cmax], c m a x c_{max} cmax为最大值
4、发起者,向其余节点发布协调者
4.5 大型系统的选举
大型系统中需要选举多个节点
- 如p2p系统中的超级节点
对如何选择超级节点(superpeer)的要求:
- 普通节点对超级节点的访问延迟要小
- 超级节点应均匀地分布在覆盖网络中
- 相对于覆盖网络中的节点数量,应有一定数量的预先定义好的超级节点
- 每个超级节点服务的普通节点个数不能超过规定的数量
例:一个小型chord系统m=8(长度), k=3(预留)
-
P AND 11100000作为超级节点的键值
-
N个节点中平均有 2 k 2^k 2k个超级节点
M维空间中的超级节点选举
-
首先,在N个随机选择的节点中,放置N个令牌
-
每个节点不允许拥有一个以上的令牌
-
每个令牌具有排斥力,推动另一个令牌移动
-
通过互相排斥,最终达到在空间中的均匀分布