分布式系统的时间

Posted 白水baishui

tags:

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

1. 分布式系统的时间

1.1. 计算机时钟

计算机时钟有两种:

  1. 硬件时钟
    硬件时钟是指计算机内的时钟硬件计算出来的时间 H ( t ) H(t) H(t)。用于机器硬件同步,特别是流水线作业,一般用户不用管它如何工作,是硬件层的东西。
  2. 软件时钟
    软件时钟是指操作系统在启动时读取的硬件时钟 C ( t ) = α H ( t ) + β C(t)=\\alpha H(t)+\\beta C(t)=αH(t)+β,读取后独立运行,与硬件时钟无关。用于给用户展示、本质上是操作系统层的东西。

分布式系统中的每个计算机有它自己的时钟,本地进程可用它获得当前时间。但由于计算机时钟与完美时钟有漂移,它们的漂移率各不相同,导致不同计算机上的时钟可能给出不同的时间,这使得在不同计算机上,进程能用本地时间给事件打上时间戳在分布式系统内可能造成时间混乱。

时钟漂移,是指时钟的绝对偏差;
漂移率,是指漂移的程度,石英钟是 1 0 − 6 s / s 10^{-6}s/s 106s/s,即每1000000秒或11.6天有1秒的差别。

另一方面,由于计算机硬件本身有质量差别,即使分布式系统中所有计算机的时钟被设成相同时间,它们的时钟如果不做校正最终也会相差很大。

1.2. 时间同步

要在分布式系统内进行时间同步,首先就要判断单个机器的时间是否正确,只有时间是正确的,才能进行有效同步。

时间正确的三个性质

  • 时钟正确性
    如果一个硬件时钟 H H H的漂移率在一个已知的范围 ρ > 0 \\rho >0 ρ>0 内,那么这个硬件时钟 H H H是正确的;
  • 硬件时钟的误差有界性
    满足 ( 1 − ρ ) ( t ′ − t ) ≤ H ( t ′ ) − H ( t ) ≤ ( 1 + ρ ) ( t ′ − t ) (1-\\rho)(t'-t)\\leq H(t')-H(t) \\leq (1+\\rho)(t'-t) (1ρ)(tt)H(t)H(t)(1+ρ)(tt),其中 t ′ 、 t , ( t ′ > t ) t'、t,(t'>t) tt,(t>t)是实际时间, H ( t ′ ) 、 H ( t ) H(t')、H(t) H(t)H(t)是相应的硬件时钟值。
  • 软件时钟的单调性
    满足 C ( t ′ ) ≥ C ( t ) C(t')\\geq C(t) C(t)C(t),其中 t ′ 、 t , ( t ′ > t ) t'、t,(t'>t) tt,(t>t)是实际时间, C ( t ′ ) 、 C ( t ) C(t')、C(t) C(t)C(t)是相应的软件时钟值。

在有了正确时间之后,就可以进行时间同步了。时间同步分为两种:

  1. 外部同步
    用权威的外部时间源同步进程的时钟
  2. 内部同步
    内部同步的时钟未必是外部同步的,因为即使它们相互一致,它们整体上也可能都与时间的外部源有偏差。如果系统在范围 D D D内是外部同步的,那么同一系统在范围 2 D 2D 2D内是内部同步的,原因很简单,假设外部时间源的时间是 t t t,那么外部时间的最大差值范围就是 D = ( t , t + Δ t ) D=(t, t+\\Delta t) D=(t,t+Δt) ( t − Δ t , t ) (t-\\Delta t,t) (tΔt,t),内部时间的最大差值范围就是 2 D = ( t − Δ t , t + Δ t ) 2D=(t-\\Delta t,t+\\Delta t) 2D=(tΔt,t+Δt)

首先,在计算机系统中,当时间快了时,要逐步回拨,渐渐靠近正确时间,而不能一步到位,因为会违反时间单调性;当时间慢了时,可以直接将时间拨到正确时间。

1.3. 分布式系统的时间分类

  • 同步系统
    已知时钟漂移率的范围、已知最大的消息传输延迟、已知进程每一步的执行时间就可以构建一个同步分布式系统;
  • 异步系统
    在时钟漂移、消息传输延迟和进程执行时间上没有限制的系统只能是一个异步系统。

2. 同步系统的时间同步

2.1. Cristian外部同步方法

Cristian方法使用一个有标准时间的服务器 S S S,通过计算消息的往返时间来完成同步,该方法要求往返时间不能过长,否则同步的频率过大会导致同步失败。

同步流程

  1. 计算机进程 p p p 在发给 S S S 的消息 m r m_r mr 中请求获得准确的时间;
  2. S S S 在返回的消息 m t m_t mt上放置准确的时间值 t t t
  3. p p p 从返回的消息 m t m_t mt中接收准确的时间值 t t t,同时记算了发出消息到返回消息的往返时间差 T r o u n d T_{round} Tround
  4. p p p 设置它的时钟时间为 t + T r o u n d 2 t+\\frac{T_{round}}{2} t+2Tround

同步精度(时钟偏移的边界)分析
假设 p p p S S S之间的最小传输时间为 min ⁡ \\min min,注意 min ⁡ ≠ T r o u n d 2 \\min \\neq \\frac{T_{round}}{2} min=2Tround,因为 T r o u n d 2 \\frac{T_{round}}{2} 2Tround是实际时间, min ⁡ \\min min是理论最小值。

由于放置时间 t t t后,影响 p p p S S S同步的时间只有 m t m_t mt。那么很显然,当 T r o u n d T_{round} Tround确定时:

  • m t m_t mt 取最小值 min ⁡ \\min min
    p p p接收到 m t m_t mt时, S S S的实际时间是 t + min ⁡ t+\\min t+min
  • m t m_t mt 取最大值 T r o u n d − min ⁡ T_{round}-\\min Troundmin
    p p p接收到 m t m_t mt时, S S S的实际时间是 t + T r o u n d − min ⁡ t+T_{round}-\\min t+Troundmin

所以, S S S的时钟时间在范围 [ t + min ⁡ , t + T r o u n d − min ⁡ ] [t+\\min, t+T_{round}-\\min] [t+min,t+Tround以上是关于分布式系统的时间的主要内容,如果未能解决你的问题,请参考以下文章

分布式系统中的时间和顺序——关于Spanner中的Linearizability

分布式系统的特征

分布式系统:时间时钟和事件序列

进来抄作业:分布式系统中保证高可用性的常用经验

分布式系统的时间问题

分布式系统和集群系统有啥区别?