找回密码
 骑士注册

QQ登录

微博登录

搜索
❏ 站外平台:

Linux中国开源社区 技术 查看内容

复盘京东金融 2017 年元旦闰秒处置方案

2017-01-20 08:49    评论: 4    

丙申年,庚子月,戊子日。

西元二〇一七年元日,帝都霾,不禁杀。

从立秋到冬至,乃决大辟罪之季。

柴市牌楼前,人头涌动,听说今日要处决一重犯,大家都拿着瓜子端着茶壶出来看热闹。

十字路口上,面向南方跪着一位蓬头垢面的犯人,身披三械,背后斜插着一支亡命牌。身边一名刽子手,袒胸露乳,一身腱子肉闪着黝黑的光亮,双手端着一把鬼头刀,寒光凌厉。在重犯身后五丈远的地方,放置着一具长案,案上台布一片腥红,桌上还放着一筒火签,旁边有一个香炉,里头插着一根三寸长的檀香。桌后四仰八叉慵懒闲散躺着一位监斩官,不停用嘴吹着檀香,好快点燃完。

太阳像一张没有烙熟的鸡蛋煎饼,无力地透过厚厚的雾层,耷拉在圭表上。石柱的影子虚弱地投在坑坑洼洼的石板上,实在难以辨认现在是几时几刻。

檀香还剩一寸的时候,监斩官已经失去耐心,猛地翻起身来,从签筒里胡乱抽出一支火签令,扔到桌前面的地上:『吉时已到,行刑』。

刽子手双手举刀过头,口中碎碎念叨,全身肌肉绷得紧紧地,拧腰沉肘,一道青霜。

突然犯人仰头长笑几声:『哈哈哈哈』,惊得牌楼上循着血腥味来觅食的几只乌鸦扑棱棱飞起。刽子手也愣了一下,没料到他会在这生死关头突然发笑,手中的刀自然也就没有再落下来。

监斩官眯着眼睛道:『你不知死到临头,为甚做这鬼叫声!』

犯人若有所思道:『看来专家说得没错,每天笑一笑,可以延长寿命五秒钟。』

监斩官道:『弱爆了,专家的话你也信!你难道不知,你今日已经多活了一秒!』

犯人蒙逼道:『此话怎讲?』

监斩官鄙夷道:『闰秒!』

历史和闰秒问题的提出

最初,秒是依据地球绕着轴自转和绕太阳的公转,以平均太阳日的 1/86400 来定义(太阳时)。到了 20 世纪中叶,很明显的,地球自转没有提供足够一致的标准,于是在 1956 年改以绕太阳轨道公转一年的时间重新定义秒。在 1967 年,秒又被以物理学的属性再一次重新定义:以铯 133 的振荡频率来定义秒,并可以用原子钟来测量。地球自转变慢的主要因素由于潮汐加速,其他因素主要是地球质量的分布不均匀变化,包括冰河反弹,2004 年的印度洋地震使其缩短 2.68 毫秒等。

图 1 展示了国际地球自转和参考系服务(IERS)观测到的地球自转数据。

图 1A 地球自转数据(3D)

图 1B 地球自转数据(2D)

闰秒Leap Second是在协调世界时(UTC)中增加或减少一秒,从而使之与平太阳时贴近所做的调整。

闰秒由国际地球自转和参考系服务发布,图 2 是本次闰秒的公告:

图 2 本次闰秒的公告

在 2016 年 12 月 31 日,http://www.time.gov 展现了这次闰秒(图 3):

图 3 http://www.time.gov 展现了这次闰秒

而 2015 年 6 月 30 日的闰秒事件,影响了纽约股票交易所、多种互联网路由器、Twitter、Instagram、Netflix、Amazon、Altea 航空订票系统等。

闰秒事件的同步实现方式和限制

闰秒在 Linux 系统上的实现方式

目前在 Linux 上多使用 NTP 协议同步时间,在 NTP 的数据包中包含闰秒标志位。在 NTP 时间同步部署正确的情况下,闰秒标志位被传递至最终的客户端,并设置在内核中,闰秒发生时,在系统中将出现 23:59:60 这样的时间,并且由内核控制时间将进行跳跃 1 秒,此时时间将不连续(图 4)。在 CentOS 中由于历史原因和系统的复杂性,闰秒问题变得更为复杂,并且在特定的系统版本中会引起系统挂起高系统负载等内核 BUG 等现象。

图 4 内核控制时间跳跃 1 秒,此时时间将不连续

ntpd 提供了 Slew 模式(-x 参数),但是在存在闰秒标志位的情况下,仅对足够新的 ntpd 版本才有效果。在 Slew 模式正常工作的情况下,系统时间的变化仍然不均匀,并可能引起多节点的不一致(图 5)。

图 5 系统时间的变化仍然不均匀,并可能引起多节点的不一致

业界公司对闰秒的处理

为了使这 1 秒的同步连续且均匀,GoogleAmazon 对闰秒问题提供了不同的解决方案。

Google 的解决方法是修改内部的 Stratum 2 时间服务器软件以进行“闰秒融合”,在闰秒事件发生后均匀的增加(或减少)时间:

其中 ω 为这次融合需要经历的时间。

Amazon 的解决方法是均匀的时间调整。在闰秒事件发生前 12 小时,以每秒 1/86400 秒的步调,最终比 UTC 时间快 0.5 秒;闰秒后比 UTC 时间慢 0.5 秒,在闰秒后 12 个小时再以每秒 1/86400 秒的步调追赶 UTC 时间。 这两种方法都可以使时间连续变化,并且使客户端不会因时间同步服务的突然变化而丢失同步,或者选择其他的时间源,而使集群时间不一致。

我们的问题

在 2015 年的闰秒事件中,我们经历了由闰秒带来的各种系统和软件问题。 在我们的生产环境中,管理着超过 30K 个节点,位于不同地理位置的 IDC,它们使用内部的 Stratum 2 时间源同步。这些节点配置有 ntpd 作为时间同步客户端。使用的操纵系统版本包括 CentOS 6.2 - 6.5 版本。大部分 ntpd 客户端版本为 ntp-4.2.6p5-1.el6, minpoll 和 maxpoll 参数使用默认的配置,即时间稳定后 1024 秒同步一次,时间变化频率不超过 500PPM。 由于操作系统环境的多样性,闰秒标志位若下发则不可避免的触发操作系统和软件的 BUG;节点数量巨大,因此对大批量节点的操作会有不可测的风险;同时考虑到运行服务的性质,因为是在跨年时间调整,提前调整时间可能会对业务逻辑产生影响。我们决定不下发闰秒标志位,在闰秒事件发生后,采用事件发生后缓慢调整的方式进行。

12下一页
查看其它分页:

最新评论

我也要发表评论

[1]
next_ [Chrome 55.0|Windows 7] 发表于 2017-01-21 18:24 的评论:
一个超级准的钟,如何证明自己很准呢,和什么参照
来自美国的 Chrome 55.0|GNU/Linux 用户 2017-01-23 03:11 回复
光速。是一个唯一不受参考系影响的物理量。所以校正过程应该会用到光速不变原理。
测试 [Firefox 53.0|Windows 10] 2017-01-20 22:30 回复
前面那段武侠风可以,我很喜欢。
来自河南郑州的 Firefox 49.0|Ubuntu 用户 2017-01-20 09:44 回复
来看看

收藏

返回顶部

分享到微信

打开微信,点击顶部的“╋”,
使用“扫一扫”将网页分享至微信。