分布式系统中不可靠时钟的挑战与应对
1. 时钟类型概述
现代计算机通常具备两种不同类型的时钟:日期时钟(Time-of-day clocks)和单调时钟(Monotonic clocks)。尽管它们都用于测量时间,但用途各异,因此有必要加以区分。
1.1 日期时钟
日期时钟的功能符合我们对时钟的直观预期,它依据某种日历返回当前的日期和时间,也被称作挂钟时间(wall-clock time)。例如,在 Linux 系统中调用 clock_gettime(CLOCK_REALTIME) 以及在 Java 里使用 System.currentTimeMillis() ,都会返回自纪元(Epoch)起的秒数(或毫秒数)。这里的纪元通常指的是 1970 年 1 月 1 日午夜 UTC,且不考虑闰秒。不过,部分系统会采用其他日期作为参考点。
日期时钟一般会通过网络时间协议(NTP)进行同步,这意味着理想情况下,不同机器上的时间戳具有相同的含义。然而,日期时钟也存在一些问题。若本地时钟与 NTP 服务器的时间差距过大,可能会被强制重置,从而出现时间回溯的现象。此外,日期时钟常常忽略闰秒,这使得它不太适合用于测量经过的时间。而且,历史上日期时钟的分辨率较为粗糙,像在较旧的 Windows 系统中,时间可能以 10 毫秒为步长前进,但在近期的系统中,这个问题已有所改善。
1.2 单调时钟
单调时钟适合用于测量持续时间(时间间隔),例如超时时间或服务的响应时间。在 Linux 系统中, clock_gettime(CLOCK_MONOTONIC)
超级会员免费看
订阅专栏 解锁全文
41

被折叠的 条评论
为什么被折叠?



