前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >腾讯网络应对闰秒危机之最佳实践

腾讯网络应对闰秒危机之最佳实践

作者头像
鹅厂网事
发布2018-02-05 16:16:49
1.6K0
发布2018-02-05 16:16:49
举报
文章被收录于专栏:鹅厂网事鹅厂网事

"鹅厂网事"由深圳市腾讯计算机系统有限公司技术工程事业群网络平台部运营,我们希望与业界各位志同道合的伙伴交流切磋最新的网络、服务器行业动态信息,同时分享腾讯在网络与服务器领域,规划、运营、研发、服务等层面的实战干货,期待与您的共同成长。

网络平台部以构建敏捷、弹性、低成本的业界领先海量互联网云计算服务平台,为支撑腾讯公司业务持续发展,为业务建立竞争优势、构建行业健康生态而持续贡献价值!

2015年7月1日07:59:60是一个奇妙的时刻…

这一刻,迎来了全球第26次闰秒。何为闰秒?

先介绍几个概念

世界时(Universal Time)

即格林尼治时间,以地球自转为基础的时间计量系统,通过恒星观测计算。1960年之前,世界时曾作为基本时间计量系统广泛使用。由于地球自传速度变化的影响,世界时不是一种均匀的时间系统

原子时(International Atomic Time)

以物质的原子内部发射的电磁振荡频率为基准的时间计量系统。原子时规定1958年1月1日世界时为0时,秒长定义为铯-133原子基态的两个超精细能级间在零磁场下跃迁辐射9192631770周所持续的时间,是一种较恒定的时间系统。

协调时(Universal Time Coordinated)

以原子时秒长为基础,在时刻上尽可能接近于世界时的时间计量系统。为了保持世界协调时与世界时尽可能接近,当世界时与协调时相差超过±0.9秒时,就把世界协调时拨快或拨慢1秒,这就是闰秒。2015年6月30日23:59:60迎来了全球第26次闰秒,因为北京时间为UTC+8,所以北京时间闰秒发生于2015-07-01 07:59:60。闰秒对互联网用户的日常生活不会产生影响,但是为互联网用户提供服务的服务商则需要严阵以待。因为处理不当会导致服务器宕机,进而导致服务中断,比如发生于2012年6月30日23:59:60的第25次闰秒导致Reddit、Mozilla、FourSquare、Yelp、LinkedIn和Gawker等互联网企业服务中断。

“那闰秒为什么会导致服务器宕机呢?”

互联网企业广泛使用Linux、Windows操作系统,不同操作系统对于闰秒的处理方式不一样的,具体如下:

Linux操作系统

采用倒回1秒机制Linux系统接收到闰秒通知后于7月1日00:00更新时间时插入1秒,即重复1次23:59,系统出现2次23:59。正常情况下,系统时间会跳变(慢)了1秒,但是部分版本的Linux内核存在bug,比如linux-2.6.22以前、linux-2.6.25到2.6.27内核版本会闰秒死锁,linux-2.6.32内核插入闰秒可能出现高CPU消耗,从而导致服务器宕机,服务中断。较新的linux-3.4内核版本系统活锁不受影响。因此如果采用了Linux系统的互联网企业没有恰当处理可能导致服务器宕机,服务中断。

Windows操作系统

忽略闰秒通知,会在下一次时间同步时更新至正确时间此点来看,闰秒对Windows操作系统的影响相对较小,但是如果对时间准确性有较高要求的话,也存在风险,因为下一次时间同步的时间可能比较久,依赖于系统管理员的设置,同时存在系统时间跳变1秒可能导致的风险。

此外,还有其他机制,比如时间分散机制即将多出来的1秒分散在闰秒时刻附近24小内,每1秒调整1/86400秒,最终于7月1日12:00与世界协调时时间一致。这是一个聪明的办法,但是存在较高实现成本。

“那当前腾讯网络面对闰秒又有什么特殊之处呢?”

当前腾讯网络内部使用了众多厂家的网络设备,同一厂家也会多款型号并存,同时网络设备操作系统既有基于Linux内核的也有厂家封闭研发的,网络设备上线年份跨度度大,并且已经有厂商反馈闰秒会导致部分网络设备直接崩溃。为此,团队共同讨论如下几个方案:

方案一:停止网络设备时间同步具体地,闰秒事件之前删除网络设备上时间同步配置,闰秒事件过后配置网络设备时间同步。此方案可以完全避免闰秒可能导致网络设备时间异常,进而造成网络故障,但是操作成本非常高,事前事后需要操作以万计的网络设备,即便通过自动化工具操作,也可能出现遗漏。此外,网络设备时间同步配置被删除期间,网络设备时间可能异常(比如网络设备自身计时晶振异常),同样可能导致网络故障。

方案二:停止网络设备专用时间服务器具体地,受益于当前网络设备会向集中的时间服务器同步时间,闰秒事件之前停止时间同步服务器,避免网络设备接收到闰秒通知,这样可以极大的减少工作量,但是同样存在时间服务器停止期间网络设备时间异常的风险。

那么有没有一个工作量小,同时又能保证网络设备时间同步的办法呢?

方案三:时间同步服务器使用本地时间,时间服务器自身通过ntpdate向上级时间服务器同步时间具体地,时间服务器使用本地时间,如此可以保证网络设备与时间服务器一致。但是,如果时间服务器本地时间不准,或者发生了跳变,则同样可能导致网络设备时间异常。为此引入ntpdate工具矫正更新时间服务器本地时间,因为ntpdate工具不接收闰秒通知,所以上一级时间服务器的闰秒通知不会扩散至时间服务器,更不会扩散至网络设备,从而避免闰秒对腾讯网络的影响。

实施细节之事前

时间服务器使用本地时间

变更务必于6月29日00:00之前实施,因为闰秒通知会提前1天开始广播,即从6月29日00:00开始广播。如果晚于此时间点,则时间同步服务器可能已经接收到闰秒通知并开始广播。变更前可以通过ntptime命令确认时间服务器的状态必须为PLL,如果状态为INS的话,说明已经接收到闰秒通知。

ntpd设置为本地时间,注释之前server配置,添加如下配置并重启ntpd进程即可

server 127.127.1.0

可以通过ntpq –q命令确认时间服务器是否使用本地时间,示例如下:

设置定时任务通过ntpdate更新时间服务器本地时间

注意:ntpdate需要配合-u参数使用,同时因为作为时间源使用,建议同步频率不低于10分钟/次。实施细节之事后(与事前操作相反即可)

时间服务器恢复与上级时间服务器同步时间

取消通过ntpdate更新时间服务器本地时间的定时任务

那么方案三是否可以作为常态运行呢?这里需要了解ntpd、ntpdate的时间同步机制。其实方案三得以实施存在一个前提条件:网络设备可以接受1秒钟时间跳变。如果不能接受此前提条件(比如对时间精度要求极高的金融机构、航空航天行业),则不能通过这个方案规避。ntpd不仅可以作为时间服务器,同时可以保证与上一级时间服务器平滑同步时间,而ntpdate则是立即同步,当时间差小于0.5秒调用系统调用adjtime()调整,当时间差大于0.5秒则调用settimeofday()调整时间,从而可能导致系统时间不平滑的跳变。如果对于时间精度要求极高的话,ntpdate同步时间方式是不可接受的,所以方案三并不能作为常态运行。

综上所述便是腾讯网络应对第26次闰秒危机的最佳实践,不仅巧妙规避了闰秒影响,而且只需极少的工作量,同时为再次应对闰秒积累了行之有效的可持续方案。该方案适用于腾讯网络,相信在其他场景下也有借鉴意义,欢迎同行拍砖。后记:

关于闰秒,业界存在争议,对于是否保持闰秒的提案将于2015年下半年举行的世界无线电通信全会进行表决,团队将会密切跟进进展,欢迎交流。

注1:凡注明来自“鹅厂网事”的文字和图片等作品,版权均属于“深圳市腾讯计算机系统有限公司”所有,未经官方授权,不得使用,如有违反,一经查实,将保留追究权利;

注2:本文图片部分来至互联网,如涉及相关版权问题,请联系judithliu@tencent.com。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鹅厂网事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 先介绍几个概念
  • “那闰秒为什么会导致服务器宕机呢?”
  • “那当前腾讯网络面对闰秒又有什么特殊之处呢?”
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档