分布式系统:3.Time, clocks, and ordering of events

本文最后更新于:2022年3月15日 中午

3 Time, clocks, and ordering of events

为什么时间重要?

在debug的时候,时间戳很重要,这允许我们重建在不同节点上运行的环境。

分布式系统需要时间戳:

  • 超时检测、重试的时间限制
  • 性能衡量
  • 决定几个结点之间时间发生的顺序
  • 有些数据具有时间有效性(例如cache)

两种时钟:

  • 物理时钟
  • 逻辑时钟

3.1 物理时钟

3.2 时钟同步和单调钟

由于时钟偏移(clock skew),需要时钟同步

NTP

Network Time Protocol 网络时间协议

用于通过数据包交换的可变延迟数据网络在计算机系统之间进行时钟同步

Untitled

  • NTP协议解释 当客户端想要同步服务端的时间时,客户端会构造一个NTP协议包发送到NTP服务端,客户端会记下此时发送的时间t1,经过一段网络延时传输后,服务器在t2时刻收到数据包,经过一段时间处理后在t3时刻向客户端返回数据包,再经过一段网络延时传输后客户端在t4时刻收到NTP服务器数据包。 定义网络往返的延迟为$\delta$,客户端和服务器的时间偏差为$\theta$,则有: $$
    \delta = (t_4-t_1)-(t_3-t_2)\\theta =t_3+\frac{\delta}{2}-t_4=\frac{(t_2-t_1)+(t_3-t_4)}{2}
    $$
  • NTP同步方式slew step的区别 Untitled ntp在没有开启slew方式时,会一直使用step的方式,分步调整偏差。在开启了slew方式时,在600s内的偏差会使用slew方式以0.5ms/s的速度缓慢平滑的进行微调,整个过程<=14天消除偏差,如果此时偏差查过了600的话会继续使用step的方式分步分阶段调整偏差。

3.3 因果律 Causality

我们认为a的发生先于b当且仅当:

  • a和b发生在同一个节点上,a比b在本地先执行
  • 时间a发送信号m,事件b接受了信号m才发生
  • 存在c,可以认为a先于c,c先于b

否则称a和b无关(平行)