虎嗅

为什么 Google 要重新定义一秒钟?

该文章尚未提供 Español 解读,以下为中文版内容。

核心内容总结

这篇文章讲的是:因为地球自转不稳定,天文学家和计算机专家对“一秒钟”的定义产生矛盾,导致用来协调两者的“闰秒”给计算机系统带来巨大灾难。Google为解决这个问题,发明了“时间抹平”(Time Smear)技术,把闰秒拆成微小部分分散到24小时里,让系统感受不到时间跳变。后来各大科技公司跟进,甚至倒逼国际计量界决定2035年前取消闰秒,但跨云平台的时间偏差问题仍未完全解决。

一、为什么会有闰秒?天文学家和计算机专家的“时间战争”

天文学家和计算机专家对“一秒”的理解完全不一样:

  • 天文学家的时间(UT1):看地球自转,转一圈是一天,分成86400秒。但地球是个“不老实”的大石头——内部岩浆动、海水摩擦、地震都能让它转得忽快忽慢,所以“一天”实际不是精准的86400秒。
  • 计算机专家的时间(TAI):用原子钟,靠铯原子振荡计数,一秒就是固定的振荡次数,绝对均匀,不管地球转不转。

两者矛盾越来越大:天文学家要保证“太阳到头顶是中午12点”,计算机要保证时间一直往前跳(单调递增)。1972年妥协出UTC(协调世界时):以原子钟为准,但如果和地球自转差了快0.9秒,就加1秒(闰秒),出现23:59:60这个“奇怪时间”。

二、闰秒对计算机来说是“噩梦”:那些崩溃的真实案例

计算机系统的底层逻辑全靠“时间单调递增”:比如日志要按时间排序、数据库事务要靠时间戳判断先后、分布式锁要靠时间防死锁。闰秒的出现直接打破这个假设:

  • 出现23:59:60:多数编程语言没定义这个时间,解析代码直接崩溃。
  • 时间停顿一秒:同一秒产生的日志或请求会有相同时间戳,死锁检测失效。
  • 时间回拨一秒:最惨!分布式系统的锁和事务直接混乱。

2012年的“闰秒惨案”就是例子:Linux内核处理闰秒时触发死锁Bug,Reddit、Mozilla、澳洲航空的系统成片崩溃,服务器CPU瞬间飙到100%。这给工程师留下巨大阴影——天文学家的“浪漫对齐”,对数字世界来说就是“炸弹”。

三、Google的“时间抹平”:用“自欺欺人”解决大问题

Google不想陪天文学家玩了,发明了Time Smear:

  • 做法:闰秒来临时,Google内部的时间服务器从闰秒前12小时开始,故意把时钟调慢一点点(每一秒比正常秒长一丢丢),把要加的1秒拆成几十万份,均匀“抹”进24小时里。
  • 效果:系统全程感觉不到时间跳变,没有23:59:60,也没有回拨,所有业务、数据库、锁都正常运行。

虽然这是“伪时间”(既不符合UTC也不符合TAI),但对工程师来说,“系统不崩”比“符合标准”重要一万倍。

四、工业界跟进+计量界妥协:闰秒要被取消了

Google的方法太好用,AWS、Meta、微软都跟着学(但各自的抹平策略不同)。最终,国际计量大会(CGPM)在2022年决定:2035年前正式取消UTC里的闰秒。天文学家向计算机专家妥协了——在数字时代,文明选择让时间“机械均匀”,而不是强行贴合地球的“不规律律动”。

五、遗留问题:跨云平台的“时间缝隙”

虽然大家都用抹平技术,但各大云厂商的策略不一样:

  • Google:以闰秒时刻为中心,24小时线性抹平;
  • AWS:从前一天中午开始,24小时余弦/线性抹平;
  • Meta:曾经用17.5小时抹平。

如果你的系统跨云(比如部分在AWS,部分在GCP),抹平期间时间戳可能差几百毫秒,对敏感的跨云分布式事务来说,还是可能引发数据不一致。这说明物理世界和数字世界的时间缝隙,至今还没完全消除。

一句话总结:为了让计算机系统不崩,Google重新定义了“一秒”,最终改变了全球时间标准——这是工程实用主义战胜学术标准的典型案例。但数字世界和物理世界的时间矛盾,还在以更隐蔽的方式存在着。