第一篇:时间和全局状态
目录
介绍
时钟同步
假设
同步系统内部同步
异步系统的内部同步
伯克利算法 Berkeley
异步系统的外部同步
克里斯蒂安的算法 Cristian
网络时间协议 Network Time protocol
介绍
首先时间很重要,在以下三个方面:
- 审计
- 认证
- 一致性
然而,分布式系统中没有全局时钟
每台计算机都有自己的内部时钟
- 本地进程用来获取当前时间的值
- 不同计算机上的进程可以为其事件添加时间戳
- 但不同计算机上的时钟可能给出不同的时间
测量时间:
- 传统上以天文测量
宇宙时间—— 一种反映地球自转平均速度的太阳时间标准 - 现代测量时间的方法是原子钟
基于铯 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,本篇到此结束,下一篇会继续对时间和全局状态进行讲解,辛苦各位观看,有任何问题欢迎随时评论探讨。
第一篇:时间和全局状态相关推荐
- 第三篇:时间和全局状态(三)
目录 全局状态 全局状态 定义 Cut:截断/切分 全局状态 走向和线性化 快照 Chandy-Lamport 快照算法 假设 算法 初始化快照 复杂度 一致性:定理 一致性:证明 快照算法的可到达性 ...
- 第二篇:时间和全局状态(二)
目录 逻辑时间和时钟 逻辑时间 Lamport's 逻辑时钟 向量时钟 逻辑时间和时钟 1.事件顺序 如果 a 在 b 被定义为时间之前发生,那么系统必须包含真实时钟 即使系统包含真实时钟,同步也是不 ...
- .NET Core TDD 前传: 编写易于测试的代码 -- 全局状态
第1篇: 讲述了如何创造"缝". "缝"(seam)是需要知道的概念. 第2篇, 避免在构建对象时写出不易测试的代码. 第3篇, 依赖项和迪米特法则. 本文是 ...
- react获取全局_使用react hooks实现的简单全局状态管理
注意,此代码存储库已被弃用,不会再更新维护了. Note that this code repository has been deprecated and will not be updated a ...
- 迟来的 2018 年第一篇分享,满足你的碎片化时间
大概有一个星期没有推送文章,也错过了和大家说新年快乐的机会.利用元旦前后的时间,完成了 2017 年给自己定下的一个目标:出国游玩.没想到的是,回程之际,还生病一场,让感冒陪我跨了个年.身体是革命的本 ...
- SpringBoot SpringBoot 基础篇(第一篇) 第2章 SpringBoot 全局配置 2.2 yaml 文件
SpringBoot [千锋教育java教程SpringBoot2全套,springboot快速入门到项目实战视频教程] SpringBoot 基础篇(第一篇) 第2章 SpringBoot 全局配置 ...
- 微信小程序----全局状态管理 (便于全局埋点等操作)
说明 由于我是一个有着一颗玻璃心的博主,导致在2018年后博客很少更新.原因是由于我的分享并没有解决到部分人的问题,而导致被骂了.当时这颗玻璃心就碎了,所以这两年以来很是消极,博客很少更新.这里给那些 ...
- 【重识云原生】第一章——不谋全局不足以谋一域
云原生体系知识地图大纲: 锲子 云原生概念这几年非常火爆,本人因有幸参与公司云原生转型项目调研,开始接触这一庞大技术体系,再通过与同业.各大头部云厂商超过150场的密集研讨交流,方得初窥全貌.同时 ...
- FPGA通信第一篇--USB2.0
FPGA通信第一篇–USB2.0 1 初识USB 1.1 简介 USB(UniversalSerialBus)是一种支持热插拔的高速串行传输总线,它使用差分信号来传输数据.在USB1.0和USB1.1 ...
最新文章
- OC实用转换model的工具
- AWS — AWS 上的 5G 网络及 MEC 边缘计算商业案例
- win10下输入法突然变成繁体了怎么设置回来?(繁體)(快捷鍵:ctrl + shift +f)
- boost::regex模块部分正则表达式相关的测试程序
- 向xxxhub发了一个数据包,发现了···
- ReportViewer教程(15)-矩阵报表-6
- Enjoy模板里使用layui模板引擎laytpl
- Python3读写dbf文本
- C# 给Word每一页设置不同图片水印
- 第五届新疆省ACM-ICPC程序设计竞赛(重现赛)
- 记一次突如其来的小米前端面试
- Http远程控制App
- ansible dnf模块详解
- 最基本的顺序表(经典顺序表)
- 杂记——在开发ByteTalk中遇到的困难以及解决
- 用skycc营销软件,轻松当老板
- 运营好社群——打造你专属的新媒体流量入口! | 黎想
- 选择示波器要考虑的十大因素
- 怎么修改IE浏览器下载文件位置
- 【Neo4j】第 11 章 :在您的 Web 应用程序中使用 Neo4j