第一篇:时间和全局状态
Posted flying_1314
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第一篇:时间和全局状态相关的知识,希望对你有一定的参考价值。
目录
介绍
首先时间很重要,在以下三个方面:
- 审计
- 认证
- 一致性
然而,分布式系统中没有全局时钟
每台计算机都有自己的内部时钟
- 本地进程用来获取当前时间的值
- 不同计算机上的进程可以为其事件添加时间戳
- 但不同计算机上的时钟可能给出不同的时间
测量时间:
- 传统上以天文测量
宇宙时间—— 一种反映地球自转平均速度的太阳时间标准 - 现代测量时间的方法是原子钟
基于铯 133 原子的跃迁
仍需修正地球自转
1 秒是 Cs133 基态的两个超精细能级之间的 9,192,631,770 个过渡周期
UTC:协调的世界时间(宇宙时间)
- 国际计时标准
- 基于调整(很少)以与天文时间保持同步的原子时间
- 添加闰秒以补偿地球自转的减慢
- UTC 信号由覆盖世界许多地区的陆基无线电台和卫星定期广播
- 接收器可商用
- 接收信号的准确性(与完美的 UTC 相比)
- 无线电:0.1 – 10 毫秒
- GPS:1微秒
时钟:
- 硬件时钟
- 晶体振荡计数器
- H(t)
- 软件时钟是缩放和偏移添加版本
- C(t)=α*H(t) + β
- 测量相对于某个参考事件的时间
- 真实物理时间的近似值
时钟偏移和漂移:
- 偏移
- 任意两个时钟读数之间的差异
- 漂移
- 2个时钟计时的速率差异
- 为什么? 晶体、温度、湿度、电压等的物理差异
- 时钟漂移率
- 完美参考时钟和物理时钟之间的速率差异
- 通常10-6秒/秒(1毫秒~17分钟,1秒~11.6天)
错误的时钟
- 单调性条件
- 时钟总是前进:t’ > t => C(t’) > C(t)
- 我们还可以限制时钟的漂移
- 错误或者故障的时钟
- §不遵守单调性条件和/或其漂移边界的时钟
- 如果时钟完全停止运行,则称其为崩溃故障,否则称其为任意故障
- 正确的时钟不一定是准确的时钟!
时钟同步
- 外部同步
- 将过程时钟与外部参考时钟 S(t) 同步
- 将偏移限制为 D > 0
- |S(t) - Ci(t)| < D 对于所有 t
- 时钟 Ci 精确到界限 D 内
- 内部同步
- 同步分布式系统内的本地时钟,以不超过一个界限 D > 0
- |Ci(t) - Cj(t)| < D 对于所有 i, j, t
- 时钟 Ci 在界限 D 内一致
- 内部 => 外部?
- 不行
- 外部 => 内部?
- 对于外部同步界限为 D 的系统,内部同步界限为 2D
证明对于外部同步界限为 D 的系统,内部同步界限为 2D
外部同步: |S(t) - Ci(t)| < D
内部同步: |Ci(t) - Cj(t)| < D
提示:
从 |Ci(t) - Cj(t)| 这个公式开始,加上0,S(t) – S(t),然后就可以证明|Ci(t) - Cj(t)| < 2D 当|S(t) - Ci(t)| < D时。
假设
- N 个进程的分布式系统 (DS)
- 每个都在具有自己的物理时钟的单个处理器上
- 没有共享内存
- 每个进程 p 在给定时间都有一个状态 s
- 状态取决于内部变量值、它处理的文件等
- 进程只能通过消息进行通信
- 可以对进程中的事件进行排序:即,e ➝i e’
- 进程的历史
- hi = = <,, …>
同步系统内部同步
异步系统的内部同步
- 伯克利算法 Berkeley
异步系统的外部同步
- 克里斯蒂安的算法 Cristian
- 网络时间协议 Network Time protocol
同步系统内部同步
同步分布式系统是定义以下边界的系统:
- 进程执行步骤的时间已知下限和上限
- 发送的每条消息都在已知的有界时间内收到
- 每个进程都有一个本地时钟,其漂移率有一个已知的界限
但我们知道最小和最大传输延迟界限!
我们可以用什么来估计 Ttrans?
C = t + (max + min) / 2 是在网络上设置时钟的最佳点,max和min指的是传输时间最大和最小
- 2 时钟示例:最大偏斜为 u/2,其中 u = 最大 - 最小
- N 个时钟:时钟偏差的最佳界限是 u(1-1/N)
- 这不能用于互联网!
异步系统的内部同步
伯克利算法 Berkeley
1、Master(主服务器)轮询从slave(奴隶)服务器收集时间
2. Master 观察 Tround 并估计当前时钟值
3. Master 平均时钟值,包括它自己的
- 消除个人时钟跑得快的倾向
- 忽略远远超出他人时间的时间
4. Master发送每个时钟需要的调整量(为什么不是更新的时间?大家可以思考一下)
Master如果失败:leader选举算法
以下的图片就是上面的流程展示:
1、master 轮询
2 、slaves回复时间
3、master忽略太快的时间
4、master发出各个slave需要的时间调整量
异步系统的外部同步
克里斯蒂安的算法 Cristian
- 时间服务器 S 从 UTC 源接收信号
- 处理消息mr中的p进程请求时间并从S接收消息mt中的时间t,如下图所示
- p 将其时钟设置为 t + ?
- p 措施消息往返 Tround
- Cp = t + Tround/2
- 我们对网络的假设是什么?
- 精度为 ± (Tround/2 – min)
- 假设我们知道最小延迟
- p 可以收到 mt 的最早时间?
- t + min
- p 能收到 mt 的最晚时间?
- t + Tround - min
- p 之间可以接收到 mt:[t + min, t+Tround-min]
- 所以范围是:Tround-2*min
简单总结:
单个时间服务器可能会失败
- 使用一组同步服务器
它不处理故障时钟
网络时间协议 Network Time protocol
被设计通过互联网连接UTC(外部标准时间源),来时间外部客户端的同步
服务器之间的同步
1、如果发生故障,同步子网可以重新配置,例如:
- 失去其 UTC 源的主时钟可以成为次要时钟
- 失去主要时钟的次要时钟可以使用另一个主要时钟
这里的主要时钟和次要时钟都是相对而言,NTP可以想象一个树模型,最上面的是连接外部的UTC,下面一层的和上面一层的连接,那么下面一层就相对上面一层来说是次要时钟。
2、同步模式:
- 多播
- 高速局域网内的服务器将时间多播给其他设置时钟的服务器,假设传输延迟很小(不太准确)
- 程序调用
- 服务器接受来自其他计算机的请求(如 Cristian 的算法)。 精度更高。 如果没有硬件多播,则很有用。
- 对称
- 成对的服务器交换包含时间信息的消息
- 用于需要非常高的精度(例如,更高级别)
两个服务器之间的消息交换
所有消息都带有计时信息的历史记录
- 发送和接收上一个 NTP 消息的时间戳
- 发送当前消息的时间戳
- m’ = <Ti-3,Ti-2,Ti-1,message>
对于 2 个服务器之间交换的每对消息,该算法计算以下值(在时间 Ti)
- 延迟 :2 条消息的真实总传输延迟
- 偏移:估计2个时钟之间的真实偏移(o)
我们知道:
and
延迟,通过两个等式相加:
偏移,通过两个等式相减:
实现
1、服务器跟踪最近的 <oi,di> 对
- 选择对应于最小 di 的 oi 值
- oi – di /2 ≤ o ≤ oi + di /2
- oi 是偏移的估计值,di 是准确度的度量
- 根据选择的 oi 更新时钟
2、实验实现了 Internet 上 10 毫秒和 LAN 上 1 毫秒的同步精度
OK,本篇到此结束,下一篇会继续对时间和全局状态进行讲解,辛苦各位观看,有任何问题欢迎随时评论探讨。
以上是关于第一篇:时间和全局状态的主要内容,如果未能解决你的问题,请参考以下文章