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

TL;DR · AI 摘要
分布式系统中事件排序依赖时钟同步,但硬件时钟存在偏差,需使用逻辑时钟、向量时钟等机制确保因果关系。
核心要点
- 硬件时钟偏差可能导致更新被错误丢弃,需采用逻辑时钟保证顺序。
- Google Spanner通过全局时钟和Paxos共识算法实现强一致性。
- 混合逻辑时钟结合物理时间与逻辑计数器,解决时钟漂移问题。
结构提纲
按章节快速跳转。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- 分布式系统事件排序
- 时钟同步问题
- 硬件时钟偏差
- NTP局限性
- 时钟机制
- 逻辑时钟
- 向量时钟
- 混合逻辑时钟
- 解决方案
- Spanner全局时钟
- Paxos共识
金句 / Highlights
值得收藏与分享的关键句。
硬件时钟偏差可能导致更新被错误丢弃,因为较早的物理时间戳可能对应较新的事件。
向量时钟能捕捉因果关系,但无法确定所有事件的全序关系。
Spanner使用全局时钟和Paxos共识算法,在跨数据中心场景实现强一致性。
#分布式系统#时钟同步#逻辑时钟#因果关系
打开原文分布式系统中时钟、因果关系和排序的入门指南
2026年7月23日
为什么像读取时间这样简单的事情会成为分布式系统的难题?
在单台计算机上,每个事件都可以参照同一个时钟进行测量,因此事件的顺序从不会产生疑问。然而,在分布式系统中,工作分散在许多独立的机器上,缺乏共享的参考基准。每台机器都可以从自己的硬件时钟读取时间,但这些时钟无法保持同步。网络时间协议(NTP)试图将时钟统一,但无法消除这个问题。
当正确性依赖于事件发生的顺序时,这就会成为一个真正的难题。如果通过比较时间戳来对不同机器上的事件进行排序,方向错误的微小差异可能会改变结果。例如:
- 稍后发生的更新可能会被丢弃,因为时钟差异使较早的写入获得了更大的时间戳,而较新的数据在没有任何错误提示的情况下消失。
- 从多台机器收集的日志可能会将结果放在原因之前,这使得问题追踪变得困难得多。
- 依赖正确顺序的操作(例如在授权更改之后才授予访问权限)可能会基于过时的信息执行。
在本文中,我们将详细探讨这些概念:
- 为什么机器自身的时钟不适合作为事件排序的基础,以及实际可行的同步精度能达到什么程度
- 一个事件为何发生在另一个事件之前,以及为什么某些事件对之间没有定义的顺序
- 逻辑时钟和向量时钟,以及各自能确定和不能确定的内容
- 在复制、审计和调试等实际场景中,事件顺序为何重要
- 混合逻辑时钟及其设计解决的问题
- 如Google Spanner这样的全球分布式数据库如何在大规模场景下处理排序