本文来自微信公众号:果壳 (ID:Guokr42),作者:莎士比利,编辑:翻翻、Steed,头图来自:unsplash


现行公历中,平年有365天,闰年有366天,这是小朋友们都知道的生活小常识。但在闰年之外,还有偶尔出现的“闰秒”,每当“闰秒”出现时,全球的“协调世界时”都会同时增加一秒


然而不久前,Facebook母公司Meta的工程师们联名发表了一篇博客,呼吁取消闰秒,声称在互联网时代“引入闰秒是一种危险的做法”,这种做法“应该被取代”。


包括微软、谷歌和亚马逊在内的科技巨头纷纷表示赞同,美国和法国的计时机构也认同了这一请愿。


Meta的工程师们发表的博客|Engineering at Meta<br label=图片备注 class=text-img-note>
Meta的工程师们发表的博客|Engineering at Meta


这套已经沿用了五十年、写进了各国中小学课本的闰秒制度,为什么突然就成了各大科技公司的眼中钉呢?


时间加一秒,计算机大崩溃


科学上有两种时间计量系统:基于地球自转的天文测量而得出的“世界时”,和以原子振荡周期确定的“原子时”。由于两种时间尺度对秒的测量方法不同,随着时间推移,两个计时系统的结果会出现差异,因此有了“协调世界时”的概念。


1972年,国际计量大会决定,当“世界时”与“原子时” 之间的时刻相差超过0.9秒时,就在“协调世界时”上加上或减去1秒,以尽量接近“世界时”,这就是闰秒。自1972年至今,闰秒已经增加了27次。


这小小的一秒对于我们的生活来说也许并没有什么影响,很多人甚至察觉不到,但对于计算机来说,这一秒足以令系统大规模崩溃。


说到因为时间计量造成的计算机崩溃,大家更熟悉的可能是“千年虫”。


千年虫(Year 2000 problem)<br label=图片备注 class=text-img-note>
千年虫(Year 2000 problem)


上世纪60年代,当时电脑内存和外部存储介质的成本很高,为了节省硬件成本,最早的女性程序员之——葛丽丝·霍普开发了六位数的日期存储方式,分别用两位数字来表示年、月、日,四位数的年份,只保留最后两位的数字。


这个习惯被COBOL语言继承了下来,进而传播到了整个计算机程序界。但当人们步入二十一世纪时,一些使用六位数日期的电脑很可能无法识别2000年的00究竟指的是1900年还是2000年,从而导致了大规模的程序错乱。


每次闰秒的调整也会给互联网带来类似的麻烦。


和千年虫不同,由于地球的自转受到海洋、大气、地核运动等多种因素影响,所以闰秒的增加时机不确定,无法被提前写进系统,一旦互联网上的时间突然多出1秒,很多程序会认为“时间没有继续向前走,而是退回去了”,这违反了计算机的内在逻辑,错误就会由此而生。


闰秒出现时,时钟在走到一天的尽头时,不会直接变成0点,而是会多出一个“59分60秒”|Qualys
闰秒出现时,时钟在走到一天的尽头时,不会直接变成0点,而是会多出一个“59分60秒”|Qualys


在互联网承载了越来越多功能的今天,这样的事件屡见不鲜。2012年6月30日午夜,当闰秒被添加入世界原子钟时,Reddit服务器无法与之同步,整个论坛宕机了40分钟。Mozilla、Gawker以及使用各种Linux服务器都遭遇了同样的闰秒问题。


2015年1月,两家澳大利亚航空公司的系统因为闰秒瘫痪了48分钟,工作人员只能被迫用纸张办理登记手续。2015年的6月30日,闰秒的增加同样产生了影响,让推特的推文时间显示出现了错误。Instagram、Pinterest、Netflix和亚马逊等网站服务器崩溃,多个网站离线了约40分钟。



还有用户表示,他们的安卓手机和手表在距离7月1日还有几个小时时就把日期设为了7月1日。



哪怕是提前做好准备,也免不了在闰秒来临时遭遇宕机。2015年6月30日,为了避免闰秒带来的更不可控的影响,美国洲际交易所集团在经历闰秒时主动停止运营了61分钟。


为了这一秒钟的修正,可是耽误了无数程序员和用户的时间,更造成了难以计算的经济损失。也难怪各大科技公司都呼吁要取消闰秒。


你说的秒是什么秒


闰秒这么麻烦的东西,到底为什么存在呢?


远古时期,人们就开始用太阳的东升西落来计算时间,古代学者将平均太阳日平分为24小时,再以60进制为基础,创造了分和现代的秒作为时间单位,这种以地球自转对太阳的周期为基准测量得出的时间就是太阳时。


但地球自转的周期并不是恒定的,而是在不断变慢,每天的日子也越变越长。13亿年前,地球每年有500多天,每年有13-14个月。因为太阳和月亮的潮汐力作用引起了摩擦,产生的热量被耗散掉,消耗了地球自转的动能,使得其转动变慢。



随着时代发展,传统的世界时计量法很难再满足人们的需要,特别在太空探测、通信导航、天文观测、工业自动化等对时间精确度要求极高的领域更是如此。所以人们发明了计时更准确的原子钟。原子内部震荡不受外界环境影响,因此非常稳定和精确,以这种固定秒长计量的时间,其精确度每天快慢不超过千万分之一秒。



但随着时间推移,国际原子时和世界时这两个系统会出现差异,时间越长,这种差异就会越大。于是,国际计量大会在1972年决定,当“世界时”与“原子时” 之间时刻相差超过0.9秒时,就在“协调世界时”上加上或减去1秒,以尽量接近“世界时”,这就是闰秒。


由于地球自转周期难以预测,所以国际地球自转服务只能每半年宣布一次是否会在未来六个月后插入闰秒。


从1972年到今天,闰秒已经增加了27次。


不要闰秒,我们怎么办?


哪怕运行140亿年,原子钟的时间精度差也能保持在十分之一秒之内,为了让原子钟和世界时尽量保持一致,人们只能不断地插入闰秒,让程序员们们加班加点地处理bug。


但除了现行的方法,也不是没有其他处理闰秒问题。


最简单粗暴的方法就是在插入闰秒前停止NTP时钟同步服务,待闰秒结束后再开启,断同步保平安。但这个方法成本太高,并且可能会带来其他影响。


目前,国际大公司通用的解决方案就是“闰抹”,提前将一闰秒分成许多份,再平均分配到一大段时间中慢慢增加。谷歌和亚马逊会将一闰秒平均插入到24小时中,届时刚好和“协调世界时”同步。2015年,日本股票交易所提前将这一秒平均分成7200份,分摊到两个小时里,在分摊结束时间恢复同步时,刚好赶上开市。


“闰抹”示意图 | 彭博社<br label=图片备注 class=text-img-note>
“闰抹”示意图 | 彭博社


时间是文明的坐标,是跨文化地区合作的基准,因为有了时间的概念,我们才能够穿越空间相约在一起。时间不完全准确就没有意义,可以说计时能力是文明发展程度的度量衡之一。


如今,我们的文明已经走到了能用原子钟来计时这一步,如果继续向下深入,说不定还会有更准确的方法来掌控时间。但目前看来,我们还是只能通过人工干预的“笨办法”让原子时和世界时的差距保持在合理范围内,也许在未来,会出现比闰秒和闰抹更好的解决方案。


参考文献

[1]"Leap Second - Wikipedia". 2022. En.Wikipedia.Org. https://en.wikipedia.org/wiki/Leap_second.

[2]Phillips, By Alexa, By Hannah Furness, By Chanel Zagon, By Gareth Davies, By Raven Saunt, and By Gary Buchanan. 2015. 

[3]"Leap Second Confuses Twitter And Android ". The Telegraph. https://www.telegraph.co.uk/news/science/science-news/11710148/Leap-Second-confuses-Twitter-and-Android.html.

[4]"Bloomberg - Are You A Robot?". 2022. Bloomberg.Com. https://www.bloomberg.com/news/articles/2015-06-28/with-61-seconds-in-a-minute-markets-brace-for-trouble.

[5]Nast, Condé. 2012. "'Leap Second' Bug Wreaks Havoc Across Web". WIRED. https://www.wired.com/2012/07/leap-second-bug-wreaks-havoc-with-java-linux/.


本文来自微信公众号:果壳 (ID:Guokr42),作者:莎士比利,编辑:翻翻、Steed