第一篇:时间和全局状态

Posted flying_1314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第一篇:时间和全局状态相关的知识,希望对你有一定的参考价值。

目录

 

介绍

时钟同步

假设

同步系统内部同步

异步系统的内部同步

伯克利算法 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 = = <e_{i}^{0},e_{i}^{1}, …>

同步系统内部同步
异步系统的内部同步

  • 伯克利算法 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)

  • 延迟 d_{i}:2 条消息的真实总传输延迟
  • 偏移o_{i}:估计2个时钟之间的真实偏移(o)

我们知道:

T_{i-2} = T_{i-3} + t + o and T_{i} = T_{i-1}+t^{'} -o

延迟,通过两个等式相加:

d_{i} = t+t^{'} = T_{i-2} -T_{i-3} + T_{i} - T_{i-1}

偏移,通过两个等式相减:

o=o_{i} +(t^{'}-t)/2;when,o_{i}=(T_{i-2}-T_{i-3}+T_{i-1}-T_{i})/2

实现

1、服务器跟踪最近的 <oi,di> 对

  • 选择对应于最小 di 的 oi 值
    • oi – di /2 ≤ o ≤ oi + di /2
    • oi 是偏移的估计值,di 是准确度的度量
  • 根据选择的 oi 更新时钟

2、实验实现了 Internet 上 10 毫秒和 LAN 上 1 毫秒的同步精度

OK,本篇到此结束,下一篇会继续对时间和全局状态进行讲解,辛苦各位观看,有任何问题欢迎随时评论探讨。

以上是关于第一篇:时间和全局状态的主要内容,如果未能解决你的问题,请参考以下文章

NODEJS环境搭建 第一篇 安装和部署NODEJS

死磕MyCat使用篇之第一篇

PLC状态机编程第一篇-状态机介绍

python开发第一篇:目录

Flutter状态管理终极方案GetX第一篇——路由

openpcdet之pointpillar代码阅读——第一篇:数据增强与数据处理