ByteByteGo Newsletter

A Beginner’s Guide to Clocks, Causality, and Ordering in Distributed Systems

8.5内容质量
A Beginner’s Guide to Clocks, Causality, and Ordering in Distributed Systems

TL;DR · AI 摘要

分布式系统中事件排序依赖时钟同步,但硬件时钟存在偏差,需使用逻辑时钟、向量时钟等机制确保因果关系。

核心要点

  • 硬件时钟偏差可能导致更新被错误丢弃,需采用逻辑时钟保证顺序。
  • Google Spanner通过全局时钟和Paxos共识算法实现强一致性。
  • 混合逻辑时钟结合物理时间与逻辑计数器,解决时钟漂移问题。

结构提纲

按章节快速跳转。

  1. 解释分布式系统中时间同步的挑战及核心问题。

  2. NTP无法消除时钟偏差,导致事件顺序错误。

  3. 逻辑时钟捕捉因果关系,向量时钟记录部分顺序。

  4. 结合物理时间与逻辑计数器解决时钟漂移问题。

  5. 通过全局时钟和Paxos共识实现强一致性。

  6. 错误排序会导致数据丢失、日志混乱和授权失效。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • 分布式系统事件排序
    • 时钟同步问题
      • 硬件时钟偏差
      • NTP局限性
    • 时钟机制
      • 逻辑时钟
      • 向量时钟
      • 混合逻辑时钟
    • 解决方案
      • Spanner全局时钟
      • Paxos共识

金句 / Highlights

值得收藏与分享的关键句。

#分布式系统#时钟同步#逻辑时钟#因果关系
打开原文

分布式系统中时钟、因果关系和排序的入门指南

ByteByteGo

2026年7月23日

为什么像读取时间这样简单的事情会成为分布式系统的难题?

在单台计算机上,每个事件都可以参照同一个时钟进行测量,因此事件的顺序从不会产生疑问。然而,在分布式系统中,工作分散在许多独立的机器上,缺乏共享的参考基准。每台机器都可以从自己的硬件时钟读取时间,但这些时钟无法保持同步。网络时间协议(NTP)试图将时钟统一,但无法消除这个问题。

当正确性依赖于事件发生的顺序时,这就会成为一个真正的难题。如果通过比较时间戳来对不同机器上的事件进行排序,方向错误的微小差异可能会改变结果。例如:

  • 稍后发生的更新可能会被丢弃,因为时钟差异使较早的写入获得了更大的时间戳,而较新的数据在没有任何错误提示的情况下消失。
  • 从多台机器收集的日志可能会将结果放在原因之前,这使得问题追踪变得困难得多。
  • 依赖正确顺序的操作(例如在授权更改之后才授予访问权限)可能会基于过时的信息执行。

在本文中,我们将详细探讨这些概念:

  • 为什么机器自身的时钟不适合作为事件排序的基础,以及实际可行的同步精度能达到什么程度
  • 一个事件为何发生在另一个事件之前,以及为什么某些事件对之间没有定义的顺序
  • 逻辑时钟和向量时钟,以及各自能确定和不能确定的内容
  • 在复制、审计和调试等实际场景中,事件顺序为何重要
  • 混合逻辑时钟及其设计解决的问题
  • Google Spanner这样的全球分布式数据库如何在大规模场景下处理排序

时钟漂移