神不知鬼不觉,阿里程序员把地球多出的1秒“变没”了

在谈到“闰秒”的时候,大部分人可能会有点陌生,也许大家都知道有“闰年”,“闰月”一说,但是可能还真没有想到还有“闰秒”这一说。事实上,这几年,随着科技的发展,尤其IT和金融业的突起,在计算精细的领域,对一秒也不容忽视,所以“闰秒”这个概念也被越来越多的人知道。对于阿里巴巴这么一个大体量的互联网公司,面对的挑战总是巨大的。下面我们来讲讲阿里巴巴是如何应对闰秒的。

秒的定义

为了让大家对“秒”有更深的理解,我们来回顾一下“秒”的历史,究竟是怎么过来的?“秒”究竟是如何定义的?

  • 1956年,秒定义为平均太阳日的1/86400
  • 1960至1967年之间,定义为1960 年地球自转一周时间的1/86400
  • 1967年,国际计量大会决定,以铯原子基态的两个超精细能级间在零磁场下跃迁辐射 9,192,631,770 周期所持续的时间。
  • 1977年,人类认识到了引力时间膨胀会导致在不同高度的原子钟时间不同,重新定义为”水平面的铯 原子”基态的两个超精细能级间在零磁场下跃迁辐射 9,192,631,770 周期所持续的时间。
  • 2019年,国际时间频率咨询委员会将讨论“秒”的重新定义问题。 随着人类认知的进步,对秒的定义逐渐发生了变化,从1967年开始,时间的计量标准便正式由天文学的宏观领域过渡到了物理学的微观领域。

随着科技的发展,科学家对“秒”的定义其实也在发生变化。

时间的定义

在这个地球上,每个地区,国家的人都有自己本地的时间。由于历史的原因,和近代国际组织对时间的统一,使得现在有多种对时间的定义方法。

UT(世界时)

UT(Universal Time,世界时)是一种以格林尼治子夜起算的平太阳时,由于以地球自转为基准,观测精度受限于地球的自转速度的稳定,地球体积不均匀、潮汐引力以及其他星球的扰动的原因,导致地球转速不稳定,每日误差达数毫秒。

TAI(国际原子时)

TAI(international atomic time)为国际原子时,1971年建立,利用某些元素(如铯、氢、铷)的原子能级跃迁频率有极高稳定性的特性定义时间标准,现为国际计量局(BIPM)的时间部门维持,综合全球约60个实验室中的大约240台各种自由运转的原子钟提供的数据进行处理,得出“国际时间标准”称为国际原子时 (TAI),每日误差为数纳秒。

TAI时间原点为UT 1958 年1月1日 00:00:00 ,在此之后TAI就沿着原子秒的节拍一直走下去,和UT误差也越来越大。

UTC(协调世界时)

上面已经说过,科学上有两种时间计量系统:基于天文测量而得出的“世界时”和以物理学发展发现的原子振荡周期固定这一特性而来的“原子时”,UTC就是用于将世界时(UT,天文时间)和国际原子时(TAI,原子时间)协调起来的另外一套计量系统, 1971年国际计量大会通过决议,使用UTC(协调世界时)来计量时间, 协调的原则就是UTC以原子秒长节拍,在时刻上尽量接近于世界时(UT)。

目前UTC是事实上的时间标准,比如所有计算机中的时间就是UTC时间(通过时区换算为本地时间), 而闰秒,实际上就是UTC特有的。

闰秒产生的原因是什么?

地球自转被称为“世界时间”。不过,由于潮汐、地壳运动、冰川融化、地震等自然现象,地球的自转速度并非恒定,而是有时快,有时慢。

1967 年原子钟的出现意味着人类计时不用再依赖于地球的自转,时间的计量标准正式由天文学的宏观领域过渡到物理学的微观领域,也就是所谓的“原子时间”。

细心的科学家发现,两者之间存在微妙差异。于是,国际地球自转和参考系服务会(IERS)在差异超过 0.9秒时,会协调“世界时间”加上或减去 1 秒,消除这个误差。

这多出来的1秒,就是闰秒。

第27次闰秒

闰秒究竟是多一秒,还是少一秒,也是有依据的,国际地球自转和参考系服务会(IERS)基于实际观测,地球自转和参考系服务会提前六个月公布下一次闰秒的时间。

通常在该年度的 6 月 30 日或 12 月 31 日午夜进行。

由于北京时间与格林尼治时间相差8小时,中国是在2017年1月1日迎来7时59分60秒的特殊现象。

最近四次闰秒分别发生在 2005 年 12 月 31 日、2008 年 12 月 31 日和 2012 年 6 月 30 日,2015年7月1日。

从 1988 年这一做法被确立至今,一共发生过 26 次闰秒。2017 年 1 月 1 日这次是第 27 次闰秒。

本次闰秒公告在 国家授时中心闰秒公告和IERS关于闰秒公告中有权威的发布。

由于我们在正八区,所以,闰秒时刻我们是在早上八点,所以这次闰秒实际是这样子的:


没错,我们的生活多了整整1秒哦~

闰秒的影响

北京时间2017年1月1日7时59分59秒后,全球同步多出1秒这事儿,对日常生活影响不大。但是对于IT,金融,航天行业,若处理不当,也可能引发危机。比如说,2012年闰秒发生时,包括LinkedIn在内不少国外知名网站都曾遇到故障。

因为“闰秒”不是一个规律的东西,而是那些科学家发现,“哎呀,今年地球转的有点快,我们年底要加个闰秒吧”,于是,“闰秒”就产生了。但是,程序员在写代码的时候,却没有考虑到会有闰秒,除了程序员写的代码,其实还有大量的操作系统处理不了闰秒也会有影响,会导致各种异常。

最常见的情况是,如果服务器操作系统是Linux,在一些老的内核版本中存在BUG无法处理闰秒,导致收到闰秒通告消息可能会宕机、插入闰秒可能会宕机、打印闰秒日志也能引发宕机。就说说红帽的老发行版,出现的“Systems hang due to leap-second livelock.,High CPU usage after inserting leap second”。
链接:https://access.redhat.com/solutions/154793

即便不宕机,在应用层,应用程序也可能无法处理这多出来的1s导致应用core掉。甚至可能影响到那些对时间敏感、事务性较强的应用,比如DB。

目前,国际大公司通用的解决方案是将这一秒分成许多份,再平均分配到一整天中。

日本有一家股票交易所将这一秒平均分成 7200 份,分摊到两个小时里,在分摊结束时间恢复同步时,刚好赶上开市。

Google则是在闰秒时刻前的24小时开始逐步调慢时间,理论上在闰秒时刻前,和标准UTC时间最大误差趋近于1秒。

阿里如何应对?

这次我们依然采用的方案是“将1秒拆分成86400份”应对本次闰秒,缓慢同步消除闰秒带来的 1 秒误差这一基本方案。

在NTP中存在两种时间同步机制:一种是“slew”,一种是“step”,虽然“slew”的方式也是缓慢的调整,但是面对阿里巴巴复杂的业务,这种方式并不能满足和解决这个问题,我们在5k集群下测试和验证,探索出一个更佳优秀的方案,就是将1s拆分成86400份。这个方案相比之间的“slew”的方案有如下改进:

  • 同步速率由 0.5ms/s 调整为 0.011574ms/s
  • 同步窗口由之前的 2000 秒调整为 86400 秒(24 小时)
  • 同步起止时刻由之前的闰秒时刻后,调整为闰秒时刻前 12 小时开始,闰秒时刻后 12 小时终止
  • 整个同步窗口和标准 UTC 时间的最大误差由之前的 1 秒减小到 0.5 秒(500 毫秒)

方案测试

在闰秒发生前2个月,我们对闰秒过度方案进行了多次测试,并且在超大规模的集群中测试,结合过去经验,根据我们的方案如果把在client的每分钟采集的时间和标准时间产生的offset数据汇总成图,可以看到时间的变化是极其缓慢和微小的。

横坐标: 时间,单位:分钟,24小时一共有1440分钟
纵坐标: offset, 单位:ms

对于阿里巴巴如此大体量的互联网公司,遇到的挑战总是更大的,在方案实施过程中我们也有发现了若干问题,在内部时间源时间聚合期间,个体时间服务器的时间变化收到本身硬件,以及网络,温度等,各种外部因素的影响。这些因素产生的影响也是要引起注意的。

原文链接

时间: 2024-10-03 01:59:14

神不知鬼不觉,阿里程序员把地球多出的1秒“变没”了的相关文章

程序员必读书单(转)

  原文链接:http://lucida.me/blog/developer-reading-list/ 关于 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及延伸阅读.旨在成为最好最全面的程序员必读书单. 前言 Reading makes a full man; conference a ready man; and writing an exact man. Francis Bacon 优秀的程序员应该具备两方面能力: 良好的

程序员必读书单

关于 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及延伸阅读.旨在成为最好最全面的程序员必读书单. 前言 Reading makes a full man; conference a ready man; and writing an exact man. Francis Bacon 优秀的程序员应该具备两方面能力: 良好的程序设计能力: 掌握常用的数据结构和算法(例如链表,栈,堆,队列,排序和散列): 理解计算机科学的核心概念

技术变化那么快,程序员如何做到不被淘汰?

阿里妹导读:写了这么多年的代码,你是否曾经有过这样的迷茫和困惑--技术发展日新月异,奋力追赶的我们,究竟是技术的主人还是技术的奴隶?今天,我们邀请到了蚂蚁金服的技术专家空融,一起来聊聊技术人的软件世界观. 在浩大的软件世界里,作为一名普通程序员,显得十分渺小,甚至会感到迷茫.我们内心崇拜技术,却也对日新月异的技术抱有深深的恐惧.有时候我会思考难道在技术领域内不断紧跟新潮,不断提升技能就是我的价值所在?那么我是技术的主人还是技术的奴隶? 人之所以迷茫往往是找不到工作生活的重心,感受不到工作或生活的

【更新“副本”入口】酷毙了,全国首个程序员主题咖啡店居然长这样!

提到主题咖啡厅,相信很多人总会想到那些高颜值.高品质的文艺咖啡厅,比如说巴洛克文艺主题.日系复古主题.法式主题.猫奴主题等.当然,有些人也会"贱贱"地想到一些Cosplay咖啡厅,比如女仆类型的-- 甭管多么主题,在大多数程序员眼中,这些主题咖啡,好像都和他们的生活沾不上什么边,因为这与他们的工作和生活交集太少. 近日,工程师文化氛围浓厚的阿里云联合Costa,在杭州推出全国首个工程师主题咖啡店.目前首家店已在杭州云栖小镇阿里云办公区开张,而阿里巴巴西溪园区店也紧接着开放.据笔者观察,

知乎网友神回复:哪怕是平时聊天吹牛的也没见程序员晒,这是为什么呢?

最近有调查显示,金融业和软件.信息技术服务业是两大薪酬最高的行业,但作为软件行业的排头兵,程序员却很低调.有网友提出了疑问:反观网上炫富的没有一个是程序员,哪怕是平时聊天吹牛的也没见程序员晒,这是为什么呢--这篇文章就为大家摘抄了知乎上众多网友的神回复,看看他们眼里的自己活着程序员朋友究竟为啥子不炫富? 知乎网友:mu peng: 比如说,你买了个名表,在程序员团队里炫了个把月,没人有反应,只好拉着一个程序员说, "你看看这个表,江诗丹顿-" 程序员哥们没听明白什么丹顿,但也不愿怂了,

Code Review 程序员的寄望与哀伤

一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产环境上出了问题,有潜在的 bug. 事后分析,是生产环境的一些微妙差异,使得这种 bug 场景在线下测试中很难被发现.毕竟想要在测试环境完美的复制生产环境的所有情况也是不太可能的,导致出现了疏漏.对于这类情况,我们在想是否可以通过在线下做一些 Code Review(代码审查)假想线上的环境差异,通过在头脑中的假想上线运行来获得一些概念验证,这样是否能够减少上线后出现 bug 的概率呢? 感性 Co

为什么很少见工资高的程序员炫富?

本文综合整理自 知乎 同名讨论帖.题主的补充: 反观网上炫富的没有一个是程序员,哪怕是平时聊天吹牛的也没见程序员晒. (网络图) 鼹鼠的土豆 的回答, 我不是程序员,我嫁给了程序员,我从一个程序员的老婆的角度回答这个问题啊!或者说从一个IT男老婆的角度回答这个问题. 首先是太宅,没什么花销,或者说没机会炫富,或者说他们的消费项也达不到炫富的程度,拿我爱人来说啊!不抽烟,出去应酬才喝酒,每天早上在家吃完早 饭才去上班,车停单位免费停车场,午饭在公司食堂吃,基本上每月饭补发饭卡里都会花不完,请人吃饭

网站程序员如何应对web标准

web|web标准|程序|程序员 本文讨论的是在web标准普及的形势下,网站程序员的定位以及如何与设计师配合开发符合web标准的网站项目.本文适合的读者是传统TABLE布局下分工不是非常明晰的程序员. 1:学习web标准,让你的工作变得更加简单. web标准是大势所趋,所以作为网站程序员.你必须洗脑,必须去学习web标准.去重新认识html标签,去了解如何让程序输出页面需要的代码. 比如: 上边是美工出来的效果图,下边是符合标准的程序代码:     Dim oHtml    set rs=ser

Matt DeBoard:我是如何成为程序员的

Matt DeBoard本是一名退伍军人.他在12周的时间内,由一名非程序员成长为一名专业开发者.对于如何成为一名程序员?他有着自己独到的心得与学习经验.他在博文<How I Became a Programmer>中介绍了自己成为一名程序员的学习经历,并通过问答形式,分享了很多学习经验和心得.CSDN对该文进行了编译,译文如下: 我昨天在"HackerNews"上发表了一个简短的回应--有关于反对"Ruby on Rails"的八星期指导课能够令你成为