目录

介绍

时钟同步

假设

同步系统内部同步

异步系统的内部同步

伯克利算法 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,本篇到此结束,下一篇会继续对时间和全局状态进行讲解,辛苦各位观看,有任何问题欢迎随时评论探讨。

第一篇:时间和全局状态相关推荐

  1. 第三篇:时间和全局状态(三)

    目录 全局状态 全局状态 定义 Cut:截断/切分 全局状态 走向和线性化 快照 Chandy-Lamport 快照算法 假设 算法 初始化快照 复杂度 一致性:定理 一致性:证明 快照算法的可到达性 ...

  2. 第二篇:时间和全局状态(二)

    目录 逻辑时间和时钟 逻辑时间 Lamport's 逻辑时钟 向量时钟 逻辑时间和时钟 1.事件顺序 如果 a 在 b 被定义为时间之前发生,那么系统必须包含真实时钟 即使系统包含真实时钟,同步也是不 ...

  3. .NET Core TDD 前传: 编写易于测试的代码 -- 全局状态

    第1篇: 讲述了如何创造"缝".  "缝"(seam)是需要知道的概念. 第2篇, 避免在构建对象时写出不易测试的代码. 第3篇, 依赖项和迪米特法则. 本文是 ...

  4. react获取全局_使用react hooks实现的简单全局状态管理

    注意,此代码存储库已被弃用,不会再更新维护了. Note that this code repository has been deprecated and will not be updated a ...

  5. 迟来的 2018 年第一篇分享,满足你的碎片化时间

    大概有一个星期没有推送文章,也错过了和大家说新年快乐的机会.利用元旦前后的时间,完成了 2017 年给自己定下的一个目标:出国游玩.没想到的是,回程之际,还生病一场,让感冒陪我跨了个年.身体是革命的本 ...

  6. SpringBoot SpringBoot 基础篇(第一篇) 第2章 SpringBoot 全局配置 2.2 yaml 文件

    SpringBoot [千锋教育java教程SpringBoot2全套,springboot快速入门到项目实战视频教程] SpringBoot 基础篇(第一篇) 第2章 SpringBoot 全局配置 ...

  7. 微信小程序----全局状态管理 (便于全局埋点等操作)

    说明 由于我是一个有着一颗玻璃心的博主,导致在2018年后博客很少更新.原因是由于我的分享并没有解决到部分人的问题,而导致被骂了.当时这颗玻璃心就碎了,所以这两年以来很是消极,博客很少更新.这里给那些 ...

  8. 【重识云原生】第一章——不谋全局不足以谋一域

    云原生体系知识地图大纲: ​ 锲子 云原生概念这几年非常火爆,本人因有幸参与公司云原生转型项目调研,开始接触这一庞大技术体系,再通过与同业.各大头部云厂商超过150场的密集研讨交流,方得初窥全貌.同时 ...

  9. FPGA通信第一篇--USB2.0

    FPGA通信第一篇–USB2.0 1 初识USB 1.1 简介 USB(UniversalSerialBus)是一种支持热插拔的高速串行传输总线,它使用差分信号来传输数据.在USB1.0和USB1.1 ...

最新文章

  1. OC实用转换model的工具
  2. AWS — AWS 上的 5G 网络及 MEC 边缘计算商业案例
  3. win10下输入法突然变成繁体了怎么设置回来?(繁體)(快捷鍵:ctrl + shift +f)
  4. boost::regex模块部分正则表达式相关的测试程序
  5. 向xxxhub发了一个数据包,发现了···
  6. ReportViewer教程(15)-矩阵报表-6
  7. Enjoy模板里使用layui模板引擎laytpl
  8. Python3读写dbf文本
  9. C# 给Word每一页设置不同图片水印
  10. 第五届新疆省ACM-ICPC程序设计竞赛(重现赛)
  11. 记一次突如其来的小米前端面试
  12. Http远程控制App
  13. ansible dnf模块详解
  14. 最基本的顺序表(经典顺序表)
  15. 杂记——在开发ByteTalk中遇到的困难以及解决
  16. 用skycc营销软件,轻松当老板
  17. 运营好社群——打造你专属的新媒体流量入口! | 黎想
  18. 选择示波器要考虑的十大因素
  19. 怎么修改IE浏览器下载文件位置
  20. 【Neo4j】第 11 章 :在您的 Web 应用程序中使用 Neo4j

热门文章

  1. 叮!你有一份2018英特尔人工智能大会的邀请函,请查收!
  2. TensorFlow快餐教程:程序员快速入门深度学习五步法
  3. 干货 | AI 工程师必读,从实践的角度解析一名合格的AI工程师是怎样炼成的
  4. 一分钟AI | 特斯拉发布电动卡车,扫地机器人被曝窥探个人隐私
  5. 推荐一个工作流自动化工具
  6. 蓝绿部署、金丝雀发布(灰度发布)、AB测试……
  7. Mybatis接口Mapper内的方法为啥不能重载?
  8. 为什么阿里巴巴要禁用 Executors 创建线程池?
  9. 几步教你轻松搭建一个Java Web项目
  10. 新网杯top1方案:手把手构建中文语音合成模型!