论文部分内容阅读
由于地球自转速度变慢,导致世界时(民用时)每年比原子时(世界的科学计时器)慢大约半秒钟。为保持与地球自转时间一致,1972年英国格林尼治天文台引入闰秒概念,即在世界时与原子时差异累积至一秒时,加上或减去一秒。在今年1月国际地球自转服务组织和国际地球时间局宣布,全世界在英国格林尼治时间6月30日23:59:59将增加一秒,记为23:59:60,也就是北京时间7月1日的7:59:60。就这一秒,弄得整个世界很沸腾。
早在2009年新年前夜,全球有数千部微软Zune播放器因为闰秒问题出现时间显示混乱,情况与2000年“千年虫”问题类似。一秒钟在普通生活中几乎影响不到什么,然而在程序机械的IT领域,闰秒就可以实现“秒杀”。
一秒钟的影响
博客媒体Gawker证实,该公司遭遇了与闰秒有关的故障。Gawker首席技术官汤姆?普朗科特说,“我们的网站并未完全下线,但在大约30分钟的时间里,服务变得非常不稳定。”
社交新闻网站Reddit通过Twitter也发表声明称,“闰秒造成利用Java开发的开放源代码数据库Apache Cassandra出现故障,我们在尽力解决与此相关的故障。”
据新闻聚合网站BuzzFeed报道,StumbleUpon、Yelp、FourSquare和LinkedIn也在闰秒发生时遭遇到故障。Mozilla基金会表示,闰秒是导致Hadoop遭遇故障的罪魁祸首。
此外,闰秒还导致部分Linux服务器产生高CPU使用率。因为Java和MySQL试图通过CPU硬件晶振的数据获得当前精确的时间,由于闰秒的关系导致较高的CPU占用。同时,Linux kernel 2.6.29之前版本存在bug,在进行闰秒调整时很可能会引起系统时钟服务ntpd进程死锁。据Opera Software系统管理员Marco Marongiu称,在今年闰秒即将来临之前,至少有一部分Opera服务器在收到时钟服务时就已经开始被锁定。
这么麻烦的话,为什么不取消闰秒呢?今年一月在日内瓦召开的国际电信联盟会议上,是否取消闰秒这一议题引发了全球科学家的大讨论。美国认为应该取消闰秒,原因是不定时的调整时间,会导致一些对时间精度依赖较高的电子系统产生混乱。美国海军天文台的主要计时员杰夫?切斯特说:“取消闰秒可以消除计算机网络灾难性故障的一个潜在来源。”
如果闰秒被取消,天文学的时间定义将由原子时决定,对我们现在是没什么影响,但每天相差千分之几秒,数千年后,我们日常所熟悉的计时将被打乱,原本中午的情景却展现在早晨,所以以英国为代表的国家反对取消闰秒。英国国家物理实验室表示,取消闰秒意味着失去与太阳的关联,但技术的问题是可以解决的。
我国也是反对者之一,中国科学院国家授时中心时频基准实验室主任董绍武表示,“中国的相关机构已经适应了闰秒的存在,即便是北斗导航系统,都已经做了调整。如果取消闰秒,对于中国来说成本损失估计达到几百亿元。”
闰秒的解决之策
在今年3月份,黑客约翰?斯图尔茨为Linux核心中的高精度定时器故障提供了一个补丁。据了解,高精度定时器是在一个应用“睡眠”时被使用的子系统,它会等待操作系统完成某些其他的任务。例如,当闰秒发生时,这些高精度定时器的提前操作会同时唤醒无数睡眠中的应用,导致服务器的CPU超载。这一补丁就是想缓解这个问题。此外,Linux等系统可使用网络时间协议来与全球原子钟进行对接,从而对时间做出调整。
对于闰秒引发的动荡,国内的IT领域似乎并未产生太多的波澜。腾讯网产品专家郑坚在接受本报记者采访时表示,“目前没有听说国内哪家网站有受到影响,腾讯没有发生任何故障,因为腾讯早在两周前就集合技术人员对闰秒的问题展开应对措施,虽然在技术层面上能解决,但却增加了企业运营的成本。”
谷歌也在博客中称:“我们采取“leap smear”解决方案,通过调整内部的网络时间协议(NTP)服务器,达到闰秒发生时增加 1 秒钟,所以我们没有受到影响。”
因此,如何优化数据设计,是解决闰秒问题的关键所在。
综合业内人士的观点来看,首先,时间数据的等价类划分应该更加细致,除了一个有效时间和一个无效时间,还应该有闰年、闰月、闰秒数据。因为时间是广泛相关数据,纵使被测软件可以正确处理,但与其相关的其他软件(操作系统、数据库、Java虚拟机等)也有可能会出问题(例如Linux内核的那个Bug)。
其次,时间的广义边界值测试应该扩大。大部分测试者都知道测试输入框的显性边界值,但是很少有人去测试时间这个隐形边界值。所以,测试不单单是常规的时间数据,更要挖掘潜在知识,从设计和分析等方面全面深入。
虽然我们不知道下一次闰秒将在何时发生,也不知国际组织对闰秒的存在会有怎样的取舍,但一定要吸取Reddit的教训,必须提前做好防御应对措施。可能当下一次闰秒发生时还是会带来更多的问题,正如托瓦尔德斯所说,“无论什么时候,如果时间被弄混,情况就很有可能变得糟糕。”
背景知识
什么是“千年虫”?
“千年虫”包括两方面的问题:一个是在一 些计算机系统中,对于闰年的计算和识别出现问题,不能把2000年识别为闰年,即在该计算机系统的日历中没有2000年2月29日这一天,而是直接由2000年2月28日过渡到了2000年3月1 日;另一个是在一些比较老的计算机系统中,在程序中使用了数字串99(或99/99等)来表示文件结束、永久性过期、删除等一些特殊意义的自动操作,这样当1999年9月9日(或1999年4 月9日即1999年的第99天)来临时,计算机系统在处理到内容中有日期的文件时,就会遇到99或99/99等数字串,从而将文件误认为已经过期或者将文件删除等错误操作,引发系统混乱甚至崩溃等故障。
早在2009年新年前夜,全球有数千部微软Zune播放器因为闰秒问题出现时间显示混乱,情况与2000年“千年虫”问题类似。一秒钟在普通生活中几乎影响不到什么,然而在程序机械的IT领域,闰秒就可以实现“秒杀”。
一秒钟的影响
博客媒体Gawker证实,该公司遭遇了与闰秒有关的故障。Gawker首席技术官汤姆?普朗科特说,“我们的网站并未完全下线,但在大约30分钟的时间里,服务变得非常不稳定。”
社交新闻网站Reddit通过Twitter也发表声明称,“闰秒造成利用Java开发的开放源代码数据库Apache Cassandra出现故障,我们在尽力解决与此相关的故障。”
据新闻聚合网站BuzzFeed报道,StumbleUpon、Yelp、FourSquare和LinkedIn也在闰秒发生时遭遇到故障。Mozilla基金会表示,闰秒是导致Hadoop遭遇故障的罪魁祸首。
此外,闰秒还导致部分Linux服务器产生高CPU使用率。因为Java和MySQL试图通过CPU硬件晶振的数据获得当前精确的时间,由于闰秒的关系导致较高的CPU占用。同时,Linux kernel 2.6.29之前版本存在bug,在进行闰秒调整时很可能会引起系统时钟服务ntpd进程死锁。据Opera Software系统管理员Marco Marongiu称,在今年闰秒即将来临之前,至少有一部分Opera服务器在收到时钟服务时就已经开始被锁定。
这么麻烦的话,为什么不取消闰秒呢?今年一月在日内瓦召开的国际电信联盟会议上,是否取消闰秒这一议题引发了全球科学家的大讨论。美国认为应该取消闰秒,原因是不定时的调整时间,会导致一些对时间精度依赖较高的电子系统产生混乱。美国海军天文台的主要计时员杰夫?切斯特说:“取消闰秒可以消除计算机网络灾难性故障的一个潜在来源。”
如果闰秒被取消,天文学的时间定义将由原子时决定,对我们现在是没什么影响,但每天相差千分之几秒,数千年后,我们日常所熟悉的计时将被打乱,原本中午的情景却展现在早晨,所以以英国为代表的国家反对取消闰秒。英国国家物理实验室表示,取消闰秒意味着失去与太阳的关联,但技术的问题是可以解决的。
我国也是反对者之一,中国科学院国家授时中心时频基准实验室主任董绍武表示,“中国的相关机构已经适应了闰秒的存在,即便是北斗导航系统,都已经做了调整。如果取消闰秒,对于中国来说成本损失估计达到几百亿元。”
闰秒的解决之策
在今年3月份,黑客约翰?斯图尔茨为Linux核心中的高精度定时器故障提供了一个补丁。据了解,高精度定时器是在一个应用“睡眠”时被使用的子系统,它会等待操作系统完成某些其他的任务。例如,当闰秒发生时,这些高精度定时器的提前操作会同时唤醒无数睡眠中的应用,导致服务器的CPU超载。这一补丁就是想缓解这个问题。此外,Linux等系统可使用网络时间协议来与全球原子钟进行对接,从而对时间做出调整。
对于闰秒引发的动荡,国内的IT领域似乎并未产生太多的波澜。腾讯网产品专家郑坚在接受本报记者采访时表示,“目前没有听说国内哪家网站有受到影响,腾讯没有发生任何故障,因为腾讯早在两周前就集合技术人员对闰秒的问题展开应对措施,虽然在技术层面上能解决,但却增加了企业运营的成本。”
谷歌也在博客中称:“我们采取“leap smear”解决方案,通过调整内部的网络时间协议(NTP)服务器,达到闰秒发生时增加 1 秒钟,所以我们没有受到影响。”
因此,如何优化数据设计,是解决闰秒问题的关键所在。
综合业内人士的观点来看,首先,时间数据的等价类划分应该更加细致,除了一个有效时间和一个无效时间,还应该有闰年、闰月、闰秒数据。因为时间是广泛相关数据,纵使被测软件可以正确处理,但与其相关的其他软件(操作系统、数据库、Java虚拟机等)也有可能会出问题(例如Linux内核的那个Bug)。
其次,时间的广义边界值测试应该扩大。大部分测试者都知道测试输入框的显性边界值,但是很少有人去测试时间这个隐形边界值。所以,测试不单单是常规的时间数据,更要挖掘潜在知识,从设计和分析等方面全面深入。
虽然我们不知道下一次闰秒将在何时发生,也不知国际组织对闰秒的存在会有怎样的取舍,但一定要吸取Reddit的教训,必须提前做好防御应对措施。可能当下一次闰秒发生时还是会带来更多的问题,正如托瓦尔德斯所说,“无论什么时候,如果时间被弄混,情况就很有可能变得糟糕。”
背景知识
什么是“千年虫”?
“千年虫”包括两方面的问题:一个是在一 些计算机系统中,对于闰年的计算和识别出现问题,不能把2000年识别为闰年,即在该计算机系统的日历中没有2000年2月29日这一天,而是直接由2000年2月28日过渡到了2000年3月1 日;另一个是在一些比较老的计算机系统中,在程序中使用了数字串99(或99/99等)来表示文件结束、永久性过期、删除等一些特殊意义的自动操作,这样当1999年9月9日(或1999年4 月9日即1999年的第99天)来临时,计算机系统在处理到内容中有日期的文件时,就会遇到99或99/99等数字串,从而将文件误认为已经过期或者将文件删除等错误操作,引发系统混乱甚至崩溃等故障。