问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

分布式系统中的时间同步问题及解决方案

创作时间:
作者:
@小白创作中心

分布式系统中的时间同步问题及解决方案

引用
CSDN
1.
https://blog.csdn.net/dq__HE/article/details/136582549

在分布式系统中,时间同步是一个核心问题。每台计算机都有自己的内部时钟,但由于时钟漂移,不同计算机的时间可能会出现差异。本文将探讨时间在分布式系统中的重要性、时钟漂移问题以及几种常见的时钟同步方法。

介绍

每台计算机都有自己的内部时钟,这个时钟被本地进程用来获取当前时间的值。例如,当一个进程需要记录事件发生的时间或者安排在将来某一时刻执行任务时,它就会使用这个时钟。不同计算机上的进程可以为它们的事件打上时间戳。这样,事件就可以有一个明确的时间记录,说明何时发生。时间在分布式系统中起着重要的作用,例如审计服务,认证服务或者是系统的一致性。

让我们通过几个例子来说明时间的重要性:

  • 审计服务:时间是审计过程中不可或缺的元素,因为它们帮助追踪事件发生的顺序。例如每当系统中发生了一个动作,如文件访问、修改或任何形式的数据交换,都会记录一个当前的时间。审计服务的准确性非常依赖于精准的时间。审计人员也需要基于时间来判断事件发生的先后顺序。

  • 认证服务:时间也发挥着重要的作用,特别是在涉及时间敏感的认证协议中。例如,在某些形式的认证中,如Kerberos协议,票据会有一个时间限制,用来确保它们在特定时间段内有效。时间同步确保了分布式系统中的每个计件都有一个一致的时间视图,这对于维护票据的有效性和预防重放攻击至关重要。

  • 分布式系统的一致性:如数据库的事务处理、分布式锁、或者最终一致性模型,都依赖于精确的时间管理来保持数据的一致状态。一致性协议,如两阶段提交(2PC)需要利用到时间戳来判断超时状态。此外,时间戳可以帮助系统确定数据副本在多个节点间的同步情况,确保所有用户看到的是最新且一致的信息。

认识到时间在分布式系统中的重要作用,那么为什么还会有关于时间的问题呢?这是因为不同计算机的时钟可能显示不同的时间。这是因为每台计算机的时钟都可能会有不同程度的漂移。所谓时钟漂移,是指时钟与某个标准时间(如UTC)的偏离。计算机时钟从完美时间漂移,它们的漂移速率可能互不相同。即使是最先进的时钟设备,也不能保持完美的时间,它们都会以某种速率慢慢地偏离所设定的标准时间。即便所有计算机上的时钟都设置为相同的时间,如果不进行校正,它们的时间最终会有显著的差异。这是因为各自的漂移会导致时间的累积差异,最终在没有校正的情况下,这些差异会变得相当大。

我们先来认识一下时间的错误行为,及“不符合单调性条件或漂移界限”。单调性条件是指一个时间总是向前移动的,某个时刻不移动就是发生了错误。

两种同步的模式

外部同步

  • 使用外部时间服务器来校准过程时间。
  • 存在一个同步界限D,意味着所有的系统时钟读数和UTC时间的差距必须在这个界限之内,以确保一定程度的准确性。

内部同步

  • 内部同步强调的是系统内各计算机时钟之间的一致性。
  • 它也有一个同步界限D,要求所有计算机的时钟读数在任何时候都应该在这个界限之内相互一致。
  • 一旦时钟同步,进程可以通信。如果所有时钟都发生了漂移,它们可能与最初的外部时间服务不同,因此需要定期调整以维持同步。

三种同步的方法

Cristian算法

利用一个时间服务器提供时间给其他所有节点。

  1. 一个进程(例如进程p)向时间服务器S发送一个请求消息mr,请求当前时间。
  2. 服务器S接收到请求后,读取其时钟并将当前时间 t 作为响应消息mt 的一部分发回给进程p。
  3. 当进程p接收到带有时间 t 的响应时,它会记录接收时间并计算往返延迟(round-trip delay)Tround 。这个延迟包括了请求消息到服务器的传输时间,服务器处理请求的时间,以及响应消息返回到进程p的时间。
  4. 为了补偿消息传输中的延迟,进程p将其时钟设置为t+Tround/2。这里假设请求和响应消息的延迟大致相等,因此使用往返延迟的一半来近似计算消息传输时间。
  5. 该方法的准确性大约在±(Tround/2-min),其中min 代表往返时间的最小可能值,它考虑了在理想情况下(没有网络延迟)服务器处理请求的时间。

问题:Cristian需要一个这就像咱们的单体架构,存在单点故障问题。它依赖于单个时间服务器,但如果这个服务器失败了,整个系统的时钟同步就会受到影响。

Berkeley算法

伯克利算法通过使用多个服务器来避免这个问题。在这种方法中,一个主节点负责收集所有从节点的时间,计算平均时间,并将调整后的时间发送回从节点。

具体流程:

  1. 主节点轮询从节点以收集它们的时钟值。
  2. 主节点使用往返时间来估计从节点的时钟值。往返时间是指从主节点发送请求到从节点,并且回到主节点所需的时间。
  3. 主节点计算所有从节点时钟值的平均数,并基于这个平均值确定每个从节点需要调整的时间量。这通常涉及到排除异常高的往返时间或故障时钟,以避免由此产生的不准确平均值。
  4. 伯克利算法的最后一步是,主节点向每个从节点发送必要的时间调整量。

NTP(网络时间)协议

这个协议解决了Cristian算法中时间服务器单点故障的问题,排除了时间服务器上的时间误差,并且提供了重新配置的可能。我们先看下它是如何实现同步的:

而且同步网络可在故障后重新配置:

  • 如果主时钟失去了它的UTC(协调世界时)来源,它可以成为一个次级时钟。
  • 如果次级时钟失去了它的主时钟,它可以转而使用另一个主时钟。

这保证了NTP网络的弹性和冗余,即便某些部分发生故障,整个系统也能调整自身来维持同步。

它的特点:

  • 多播(Multicast):在一个高速局域网(LAN)内,服务器通过多播将时间发送给其他节点,这些节点则根据接收的时间设置自己的时钟,假定存在一些延迟(不是非常精准)。
  • 过程调用(Procedure call):类似于Cristian的方法,服务器接受来自其他计算机的请求(UDP),并发送当前时间。这种方法可以提供更高的精度,特别是在没有硬件多播能力的环境中。
  • 对称(Symmetric):服务器成对交换包含时间信息的消息。这用于需要非常高准确性的场景,例如在上层(更接近stratum 0)的同步中。

在对称模式中,消息之间可能存在不可忽视的延迟。

这个图展示了NTP中两个服务器A和B之间的消息交换过程。服务器A向服务器B发送消息m,在时间Ti−2 处记录发送时间。服务器B接收这个消息并回复消息m',服务器A在时间Ti 处记录接收时间。这两个时间戳帮助计算往返时间延迟和时钟偏移。

通过计算消息往返所需的总时间和分析这段时间内的延迟变化,NTP能够估计并校正时钟偏差,从而提高精准度。它通过假设消息传输时间是对称的,使用来回消息的时间戳来计算一个平均往返延迟,然后根据这个平均值调整本地时钟。这个过程减少了网络变异性对时间同步的影响,从而保证了高精度的时间同步。

本文原文来自CSDN博客

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号