30、分布式系统中不可靠时钟的挑战与应对

分布式系统中不可靠时钟的挑战与应对

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值