资讯详情

分布式系统-同步化-时钟同步-物理时钟与Lamport时间戳(逻辑时钟)

1、概述

同步化是分布式系统中的一个重要概念。同步化主要解决排序问题。例如,多个线程不能同时操作变量,而是使用或无结构同步多个线程。同步的目的是将多个线程排序为操作时间序来操作变量。

在单个计算机中,时间是明确的。当过程想要获得时间时,系统调用过程,然后操作系统内核返回时间。 然而,在分布式系统中,每台计算机的时钟可能是一致的或不一致的。即使分布式系统中的每台计算机中的时钟是一致的,这个时钟也不是分布式系统的全局。如果不是全局时钟,分布式系统可能会出现问题。

注意

2、物理时钟

计算机中的时钟是物理硬件,通常称为计时器,计算机的计时器通常是石英晶体管。以一定频率振荡石英晶体管。然后两个寄存器与每个石英晶体相连,一个是计数器,另一个是保持寄存器。石英晶体振荡使计数器减1。当计数器为0时,会产生中断,然后计数器将初始值重新安装在保持寄存器中。计数器产生的中断称为时钟滴答。当出现中断时,操作系统会响应中断,并调用中断处理程序将时钟存储器中的值加1。

时钟中断示意图(图片来自网络-示意图显示增加1): 在这里插入图片描述

2.1.物理时钟问题

物理时钟在计算中的主要问题是时钟偏移(clock skew)。流行点描述时钟偏移是指时钟摆动的偏移变慢或变快或变慢,导致时钟不同步。

时间偏移基本上不影响同一计算机过程的时间获取,因为即使有时间偏移,不同过程在不同时间获得的时间仍然不同,但分布式系统会有问题。

在分布式系统中,过程分布在不同的计算机上,当每台计算机的时钟偏移时,整个分布式系统中的时钟不同步。如果整个分布式系统中的时钟不同步,则依赖时钟同步的程序将出现问题。

时钟同步算法是解决物理时钟不同步的主要方法。这些算法包括但不限于:网络时间协议Berkeley算法、Critian算法。

2.2.物理时钟同步-网络时间协议(NTP)

网络时间协议是利用计算机与时间服务器同步计算机时钟,实现高精度的时间校正。

2.3.物理时钟同步-Berkeley算法

Berkeley 算法 适用于无线电时钟(radio clock)对于不可用的分布式系统,该系统无法知道真实时间,只能平均时间作为标准时间。时间服务器将定期从每个客户端获取时间,平均处理后,将每个客户端的时间和平均时间的偏移传回,以达到统一使用这个平均时间的目的。该算法适用于时间不一致、时钟速率不一致的系统。如果客户端时间偏移过大,超过容忍值,平均时间的计算通常不参与。如此可以防止系统的时间被单个异常的时钟过度影响。

Berkeley时钟同步算法图:

2.物理时钟同步-Cristian 算法

3、逻辑时钟

逻辑时钟的焦点在顺序上是一致的,这个时间不一定与实际时间相同。

3.1、Lamport逻辑时钟

Lamport逻辑时钟是一个happens-before关系,happens-before意思是先发生(happens-before在Java/go内存模型也在使用)。happens-before关系使用表达式:a->b表示读作“a发生在b之前,这意味着所有过程都同意事件a先发生,然后事件b发生。

定义逻辑时钟

  1. 如果a和b是同一过程中的两个事件,a在b以前发生过,然后a->b为真。
  2. 如果a是一个过程发送消息的事件,而b是另一个过程接收消息的事件,a->b为真。

先发关系是一种传递关系,所以如果a->b且b->c则a->c。时间x和y发生在两个不交换信息的过程中,那么x->y不为真,y->x不是真的,我们称这两个事件并发;按照这个理解,happen-before分布式系统中一主多备之间的时间关系是偏序关系。

3.2 Lamport实现逻辑时钟

实现Lamport逻辑时钟,每个时钟的过程Pi维护局部计数器Ci,按以下步骤更新计数器:

  1. 在执行事件之前,P执行Ci=Ci 1;
  2. 当进程Pi给m发消息Pj,执行1步后,戳m的时间ts(m)设置为Ci;
  3. 当收到消息m时,过程Pj调整自己的局部计数器Cj=max(Cj, ts(m)),然后执行第一步,并将信息传输给应用程序。

3.3 Lamport时钟校正

3.4 时钟校正说明

图a和图b说明:

  1. 图a和图b有三个过程;
  2. 图a解释了使用物理时钟获得的时间分配;
  3. 图b说明了使用Lamport逻辑时钟的时间分配。

3.4.1 图a-物理时钟

图a中的三个过程P1、P2和P每台计算机都有自己的时钟,每台物理时钟以不同的速度工作,以获得不同的时间。

时间6,过程P1将消息m1发送给进程P2,当m消息到达过程P2时,进程P2的时时钟值是16;进程P2发送消息m2和进程P3发送消息m3.发送时间和时钟值仍在合理的时钟值范围内;但在过程中P3发送m3到进程P2并达到P2的时钟值有问题,因为发送消息的时间应该小于达到消息的时间,而Lamport逻辑时钟解决了这个问题(看图片b)。

3.4.2 图b-Lamport逻辑时钟

Lamport逻辑时钟是让事件遵循happen-before关系。因为消息m3在时刻60离开P2,那么消息m3到达进程P1时应在61时或更晚。因此,每个消息都应根据发送者时钟的发送时间调整时钟值。图b中进程P3在收到m3消息后,我发现我的时钟小于m消息时钟,过程P2根据消息m3时钟调整时钟为61,过程P也做了同样的时钟值调整。

3.4.3 Lamport复制服务中应用逻辑时钟

复制是提高可靠性和性能的重要手段。复制面临的主要问题是一致性。所有副本应完全相同。一般来说,它们是通过全序多播来实现的。全序多播是将所有信息以相同的顺序传递给每个接收者的多播。全序多播是实现状态机复制的重要工具世界。

3.4.4 Lamport集群复制逻辑时钟

5、参考

  1. 分布式系统原理与范型(第2版)
  2. 时钟同步
  3. 分布式系统:Lamport 逻辑时钟
  4. 时钟同步
  5. 分布式系统(6) - 同步化

标签: utc9012晶体管

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台