查看原文
其他

让大厂抓狂的“额外一秒”:谷歌、微软、Meta 和亚马逊纷纷提议放弃

脚本之家 2022-09-23
 关注脚本之家”,与百万开发者在一起

编译 | 核子可乐、Tina
来源:InfoQ(ID:infoqchina)
已获得原公众号的授权转载

简单粗暴的“加一秒”已成为“服务器不能承受之重”。

谷歌、微软、Meta 和亚马逊一众大厂近期共同发起了一项废除闰秒的倡议:用“额外加一秒”的方式同步地球自转时钟,明显是桩得不偿失的买卖!

官方机构如美国国家标准与技术研究院(NIST)以及负责维护米制公约的国际计量局(BIPM)也表达了支持态度,取消闰秒的呼声正越来越强。

闰秒:人类引入的不规则操作

所谓闰秒,就是在正常计时之外再增加一秒,借此保证时钟能与地球的实际自转时长保持同步。

科学上有两种时间计量系统,一种是基于地球自转为基础的世界时(简称 UT),另一种是以原子振荡周期确定的原子时(简称 TAI)。原子时的时间尺度更为均匀,而世界时由于地球自转速度不均匀,两者之间会存在差异。当两者之间的差异超过 0.9 秒时,国际地球自转服务组织(IERS)就会负责将世界标准时间调快或拨慢一秒,这就是闰秒。

自 1972 年以来,全球各计时机构已经在国际原子时(TAI)标准时钟上添加过 27 次闰秒。而具体方法并不是直接把午夜 23:59:59 直接计作 0:0:0,而是额外增加一个 23:59:60。

因为地球的自转速度不规则地变化,所以闰秒的间隔也是不规则的。而从长远来看,地球的自转是相当不可预测的,这解释了为什么闰秒只提前六个月宣布。

世界最高山脉上的冰盖不断融化和重新冻结,以及潮汐摩擦都是导致地球自转不规则的众多因素之一。用一个旋转的花样滑冰运动员来打个比方,她通过控制手臂来控制角速度。当张开双臂时,角速度会降低,从而保持滑冰者的动量,当手臂收回,角速度就会增加。

目前,我们只添加了正闰秒。在早期,就是通过简单粗暴地增加一秒来完成的,从而产生一个不寻常的时间戳:23:59:59 -> 23:59:60 -> 00:00:00

但随着地球自转模式的变化,我们很可能在未来的某个时刻出现负闰秒。时间戳将如下所示:23:59:58 -> 00:00:00

正闰秒的跳跃会让程序崩溃或导致数据损坏;而更重要的是我们还从未大规模测试过负闰秒的破坏性影响。无论如何,对于管理硬件基础设施的人来说,每一个闰秒都是痛苦的来源。

互联网不能承受的“一秒钟”

我们人类自身对于闰秒调整几乎是感觉不到的,但对于需要精准计时的计算机系统和互联网来说,这种简单粗暴的“加一秒”方法好处不多,但危害可不小。

假设我们有这样的代码:

start := time.Now()

// do something

spent := time.Now().Sub(start)

那么最后可能会在闰秒事件期间,“spent”值会出现依赖负数的情况,从而导致了程序崩溃。

闰秒于 1972 年被引入,迄今为止已经增加了 27 个正闰秒。每一次增加闰秒,都会在整个软件行业中引发问题。毕竟无数计算设备需要依靠精确的计算服务器网络,才能有序安排事件、记录活动先后,比如向数据库内添加数据条目,如果处理不好就会出现脑裂或其他问题。

闰秒的变化曾在 2012 年引发 Reddit 论坛的大规模中断,同时给 Mozilla、LinkedIn、Yelp 以及船家预订服务商 Amadeus 造成了不小的麻烦。

虽然了解了闰秒的影响,但 bug 并没有因此而消失。最近一次闰秒是在 2017 年,网络基础设施服务商 Cloudflare 还是因闰秒导致一部分客户服务器宕机。当时 Cloudflare 软件比较了两种时间,并发现时间似乎在“倒退”,于是因无法处理这自相矛盾的结果而陷入崩溃。

计算机在处理数字方面绝对是一把好手,但人类引入的闰秒这类不规则操作,则会打破计算机那完美无瑕的内部逻辑。影响力最大、知名度最高的此类问题当数“千年虫”,当初人类在编写数据库时只记录下年份的最后两位数字。于是当 1999 年过去、2000 年来临时,混乱也随之出现。另外还有个相关问题,一部分计算机系统是以 1970 年 1 月 1 日为起点,使用 32 位数字按秒计算日期的。而 32 位数字对应的秒最多只能表达到 2038 年,再往后数位就不够用了。

为了解决计算机时钟处理不了一分钟 61 秒的难题,谷歌率先提出了“闰秒涂片”的办法,通过调整内部的网络时间协议 (NTP) 服务器,把闰秒拆分成许多微小的步长变化、分摊到一整天当中。Meta 也采用了类似方法,一个闰秒要花 17 个小时来“抹平”。

不同系统的调整方法没有一个统一标准,小网站则更多依赖公共时间服务器,直接停 1 秒或者跳 1 秒,不会把时间切分成时间片;谷歌大厂的这些方法,在调整过程中如果有突发事件,比如某些服务器宕掉了,还是会存在问题。

只要下一个闰秒还会出现,互联网企业们就还得继续面临闰秒带来的影响,花费额外精力去消除它,闰秒的那一秒也就成了“服务器不能承受之重”。

能不能废除,大厂说了不算

添加闰秒可能引发计算机故障,互联网大厂不堪其扰,因此最近 Meta 的工程博客发布了一篇语气相当强硬的文章,表达了对闰秒调整的不满,认为这是需要被废弃的概念。

他们认为闰秒机制本身也没怎么起到预期作用,因为从历史角度来看,地球的自转速度基本没什么变化。Facebook 母公司 Meta 的研究科学家 Ahmad Byagowi 表示,“我们预计,如果只使用国际原子时而不计闰秒,整个精确周期也至少可以保持 2000 年。也许到那时候,我们才需要考虑怎么做修正。”

另外,有时候还得减去一秒(负闰秒),尽管这类状况之前还没出现过,但一旦出现,就很可能引发新的问题。Meta 工程师在博客中表示,“这种负闰秒更恐怖,甚至可能对依赖计时器或调度程序的软件造成毁灭性影响。”

而据 ZDNet、CNet 媒体报道,谷歌、微软和亚马逊各家科技巨头也赞成 Meta 的提议,纷纷表示是时候跟闰秒讲拜拜了。

Meta 公司的呼吁行动不是第一次,但目前全球还没有一个可以解决闰秒问题的统一方案。2015 年,在日内瓦召开的世界无线电通信大会上,国际电信联盟 (ITU) 将反闰秒的决定推迟到了 2023 年,所以关于“这一秒”的问题可能需要等到明年才能见分晓。

但是,闰秒是目前唯一把世界时、原子时联系起来的有效手段,在不同的领域有不同的意义,时间不仅有技术属性,它还社会和文化属性。而且全球时钟系统的管理权掌握在政府和科学家手中,取消闰秒需要经过科学论证,不可能由科技企业单方面说了算。

<END>

程序员专属T恤

商品直购链接 👇

  推荐阅读:

这是一件程序员才懂的T恤

赶紧更新!苹果曝出安全漏洞
Win11系统禁用了IE浏览器,可一直有人试图唤醒它

一个软件打磨了24年,被安装超过100亿次,居然赚不到钱?

35年前的老古董,如今在微信上又焕发了青春

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存