一句话定义
时钟漂移(clock drift)是每台机器的本地时钟都会自己慢慢走偏;NTP(Network Time Protocol,网络时间协议)则是让这些机器不断把时间拉回同一个基准的协议。
为什么“现在几点”很难统一
机器靠石英晶振计数来计时。晶振不理想:温度、电压、老化都会让振动频率产生微小偏差。偏差单看很小,却会持续累积——今天差几毫秒,过几天可能就差几百毫秒。重启、虚拟机挂起、容器迁移还会让情况更糟。
打个比方:一屋人各戴一只便宜手表,刚对完表时都一致,一周后有人快三秒、有人慢两秒。不比对时都没事;一旦要一起决定“谁先开口”,就吵起来了。
NTP 怎么修
NTP 找几个“报时台”(时间服务器,源头是原子钟或卫星授时),交换带时间戳的数据包,估算两件事:网络往返花了多久,本地时钟偏了多少。再据此调整本地时间。调整有两种风格:直接跳过去(step),或者把速度临时调快调慢一点点,慢慢追上(slew)。后者更温和,因为时间不会突然倒流。
NTP 的精度受网络抖动影响,通常在毫秒到几十毫秒量级;更高的精度要靠专用硬件授时。具体选型与配置以相关项目官方页面为准。
和相邻概念的区别
- 时区 vs 漂移:时区只是“怎么显示时间”,漂移是“计时本身不准”。
- 墙钟 vs 单调时钟:墙钟时间(wall clock)回答“现在几点”,会被校时改动、可能倒退;单调时钟(monotonic clock)回答“过了多久”,只前进,适合测耗时,但不能跨机器比先后。
- 物理时钟 vs 逻辑时钟:逻辑时钟(如 Lamport 时钟、向量时钟)不关心真实时间,只保证因果关系,能告诉你“这条消息发生在另一条之前”。
| 墙钟时间 | 单调时钟 | 逻辑时钟 | |
|---|---|---|---|
| 回答什么 | 现在几点 | 过了多久 | 谁先谁后 |
| 会倒退吗 | 会 | 不会 | 不适用 |
| 跨机器可比吗 | 需先同步 | 不能 | 可比因果 |
对从业者的意义
多机多副本时,时间戳很容易骗人:用最后写入者胜(LWW)做冲突解决时,时钟偏了的机器可能拿旧数据盖掉新数据;TTL、租约(lease)、缓存过期、令牌有效期一乱,就可能提前失效或永不失效;跨机器日志排序会冒出“先回了你消息,才收到你消息”这种怪事。
常见做法是:测时长用单调时钟,跨机器排序别只信墙钟,把时间同步当成系统的一个依赖项来对待,冲突解决尽量交给版本号或逻辑时钟兜底。
对普通人的意义
手机、电脑能自动对时,靠的就是这类协议。也就能理解两件小事:设备断电久放后时间会不准;同一批文件在另一台设备上看,时间顺序有时会错位——它们本来就不是一块表。
