闰年闰月大家都知道,可是你听说过闰秒这回事情吗?

闰年是为了弥补是我们的历法365天和地球实际公转365.25天的差距,所以每4年会一年是闰年,多出来的那一天就是2月29日。

闰月则是和阴历有关,不同于阳历的以公转制定的方式,阴历以月亮绕地球的时间来计算,所以会和阳历的365.25天相差10天21小时,于是,多出来的时间累积下来凑成一个月,也就是闰月了。

那么什么是闰秒?闰秒会带来什么影响?怎么解决闰秒带来的问题?

闰秒定义

要了解闰秒,首先需要了解几个基本的概念。

平均太阳日:天空中的太阳连续两次出现最大仰角(90度)所经历的时间就是一个太阳日,而又由于太阳日的长短不同,所以取一年内的太阳日平均值,所以可以大致的认为一个平均太阳日就是一天24小时。

UTC:英文为Coordinated Universal Time,中文叫做协调世界时或者世界标准时间,相信开发的同学都很清楚,他是世界上调节时钟和时间的主要时间标准,也是最接近格林威治标准时间GMT的时间系统之一。

最早的时候,一秒根据平均太阳日的1/86400来定义,这个时间依赖于地球的自转和公转。后来直到1967年,秒被物理学重新定义,以铯133的振荡频率来定义秒,并可以用原子钟来测量。

UTC的时间就是基于此来定义,而且他是一个固定的时间长度。

但是由于地球自转的速度受到潮汐加速等众多因素的影响,平均太阳日的时间并不固定。

为了让UTC贴近平均太阳日的时间,所以就产生了闰秒。

闰秒分为两种形式:

  1. 正闰秒,也就是在23:59:59之后一秒是23:59:60,然后才是00:00:00,很奇葩很诡异是不是。
  2. 负闰秒,23:59:58的下一秒就是00:00:00,但是目前没有出现过负闰秒。

闰秒的时间调整一般是在6月30日或者12月31日,而离我们最近的一次闰秒的调整则是在2016年的12月31日。

从1972年到现在,已经发生了20多次闰秒,对于我们的系统配置来说,通过NTP的服务来进行时间同步,如果服务器收到闰秒的处理通知,则会一级级下发到最边缘的NTP服务器,然后通知到客户端的操作系统,最终由操作系统来处理闰秒。

下面的表格是历年发生闰秒的时间:

带来的影响

虽然闰秒对普通人的日常生活没有任何影响,但是对于开启NTP服务的Linux系统来说有致命的风险,在Linux kernel 2.6.29之前版本存在bug,在进行闰秒调整时可能会引起系统导致ntpd进程死锁,从而导致crash。另外由于应用程序不能处理闰秒的问题导致时间的变化,会导致CPU load激增。

在上一次闰秒产生,国外Reddit、Mozilla、FourSquare、Yelp、LinkedIn和Gawker都产生了一定的问题,其中Reddit宕机时间超过1个半小时。其中,或许你能很明显的看到异常错误信息:kernel[81951.244556] Clock: inserting leap second 23:59:60 UTC

另外,针对数据库方面,23:59:60时间的问题兼容也不尽相同。

PostgreSQL:PostgreSQL可以兼容23:59:60的写法,不会报错。

Mysql:Mysql还不支持60秒写法,闰秒时必须使用unix time来表示时间,否则会报错。

根据目前的信息来看,Linux内核版本高于2.6.29修复了这个问题,NTP版本高于4.2.2p1-9会把这一秒的时间分散到大约2000秒中,低于该版本的话则会直接加一秒或者减一秒。

解决方案

最简单直接的方法就是闰秒发生前停止ntpd服务,闰秒结束后再开启。

但是有一个很明显的问题就是,大公司一个服务上千台机器,操作起来成功太高,而且停止同步是否会带来其他的问题不好评估影响面。

目前像google、阿里、amazon都有一些具体的应对方案,使用云服务的话可能不需要用户关心这方面的问题,如果是自己机房托管的话那么可能需要运维开发人员手动处理了。

以国内阿里云的处理方案举例,amazon同样也是采用该方案

阿里云的ECS云服务器的NTP服务采用忽略闰秒时刻的跳秒,缓慢同步消除闰秒带来的1秒误差的方案来面对闰秒事件,实际上采用的方案是闰秒发生前,每秒比UTC慢1/86400,经过12小时(43200秒)后,会比UTC慢0.5秒,闰秒发生之后,每秒和UTC误差减少1/86400,经过12小时(43200秒)后,-0.5的误差消除。国外Amazon也是这样的解决方案。

具体时间同步方案如下表格所示:

如何预测避免

实际上,由于地球自转的时间无法计算,他有可能变快,也有可能变慢,受到潮汐、天气和熔态金属在地球核心的流动等各方面因素的影响,下一次闰秒的时间无法预估,但是国际地球自转和参考系服务(IERS)会提前6个月公布下一次闰秒的时间。

巨人的肩膀:

https://zh.wikipedia.org/wiki/%E9%97%B0%E7%A7%92

https://developer.aliyun.com/article/68260

https://yq.aliyun.com/articles/80045?spm=5176.10695662.1996646101.searchclickresult.746332ab0yvJRw

https://www.cnblogs.com/luxianghao/p/6339470.html

听过闰年闰月,可你听过闰秒吗?相关推荐

  1. 听过闰年闰月,听过闰秒吗?

    闰年闰月大家都知道,可是你听说过闰秒这回事情吗? 闰年是为了弥补是我们的历法365天和地球实际公转365.25天的差距,所以每4年会一年是闰年,多出来的那一天就是2月29日. 闰月则是和阴历有关,不同 ...

  2. 【科普】听过闰年闰月,可你听过闰秒吗?

    闰年闰月大家都知道,可是你听说过闰秒这回事情吗? 闰年是为了弥补是我们的历法365天和地球实际公转365.25天的差距,所以每4年会一年是闰年,多出来的那一天就是2月29日. 闰月则是和阴历有关,不同 ...

  3. html中下拉列表监听事件,ExtJS 下拉框监听事件、日期选择器监听事件、实现动态给items添加删除数据...

    本文将为您描述ExtJS 下拉框监听事件.日期选择器监听事件.实现动态给items添加删除数据,具体实现方法: 1.下拉框 下拉框选择时,触发事件的方法: 在 Ext.form.ComboBox 组件 ...

  4. watch深度监听数组_vue watch普通监听和深度监听实例详解(数组和对象)

    vue watch普通监听和深度监听实例详解(数组和对象) 下面通过一段代码给大家介绍vue watch的普通监听和深度监听,具体代码如下所示: var vm=new Vue({ data:{ num ...

  5. 监听 html dom 变化,如何监听页面 DOM 变动并高效响应

    比来在做 chrome 插件开辟,既然是插件那就不免纰谬现有页面做一些控制,比如事宜监听.调剂构造.对 DOM 元素的增删改查等等.个中有一个需求比较有意思,便整顿一基层便把涉及到的常识点复习一遍. ...

  6. Oracle监听注册和sqlnet,Oracle监听的动态注册与静态注册

    Oracle监听 介于Oracle的数据库和客户端之间的通道.因为数据库本身不对外提供服务,所以需要通过监听器来实现. 几个相关的参数: local_listener db_domain remote ...

  7. 【英语:基础进阶_听口实战运用】D1.听口实战运用

    1.听口实战运用 常见听力障碍和训练方法 听力短句子关键词训练 听力数字与时间问题 听力的题目类别和应对方法 听力对话训练 听力短篇文章训练 2.听力障碍的四个层次 听不清 听不懂 听不快 记不住 2 ...

  8. 周星驰:初听不知曲中意,再听已是曲中人

    01 知乎中曾有这么一个回答吸引到我:很多人说年少时看<大话西游>,看着看着就笑了:长大之后再看,看着看着就哭了:但不管是笑了还是哭了,心中总有很多疑惑无法解开. 一谈起大话西游,大家都是 ...

  9. java判断麻将听牌_和牌看听:麻将听牌种类大全

    所谓听牌是指什么而言,大家想必已大致明白了吧. 麻将是四个人进行的比赛.A.B.C三位好友在茶馆里饮茶,有人说了: "好不容易咱们三个才凑在一起,打打麻将多好,可惜还差一个人,没法打呀!&q ...

  10. Type c手机怎么实现一边充电一边听歌(边充边听放方案)

    自2013年USB-IF机构发布USB Type-C规范,2014年乐视发布第一款USB Type-C接口的手机,USB Tpye-C接口的普及化变为一种不可逆转的发展趋势.可是,手机沒有耳机接口了, ...

最新文章

  1. 你必须尝试的20个 Python 库
  2. Stackoverflow 高赞答案,为什么牛逼的程序员都不用 “ ! = null ' 做判空?
  3. [Dynamic Language] Python File Operator
  4. JS高级——内存管理和闭包
  5. SpringCloud学习笔记026---SpringBoot中使用不同类型的数据库_MySql_PostGreSql_使用template
  6. laravel5集成支付宝alipay扫码支付流程(Laravel 支付解决方案)
  7. Python 源码剖析(二)—— 第一次修改 Python 源代码
  8. Spark机器学习解析
  9. 工作说明书(SOW)
  10. 25日—你看蓝蓝的天
  11. UVA 10098 Generating Fast
  12. java 箭头符号_箭头符号大全
  13. 大数据下的数据分析平台架构
  14. java duration 时间差_Java Duration toDays()用法及代码示例
  15. 黑马培训---分享点干货二 IOS面试非技术性问题
  16. c语言降序字母,怎么实现对数组的降序排序
  17. 坤宝德万达打造命运共同体万达茂天樾之夜.时光发声全国巡回演唱会南宁站圆满结束
  18. pythonocc view coordinate_pythonOCC例子搬运:4.经典瓶子造型
  19. Eclipse中XML文件以表格形式显示
  20. 360欺骗4亿网民 胡乱解读“超级工厂”病毒(转载卡巴斯基网站)

热门文章

  1. 新手入门吉他买什么好?十年吉他老司机教你如何远离烧火棍,附上靠谱吉他品牌推荐!
  2. JUnit5中@ParameterizedTest 处理 @CvsSource中的空值
  3. IT从业者创业公司生存指南:创业中期 ---- 先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。
  4. macOS 上编译 Dynamips
  5. 多个元素过渡---过渡模式
  6. 风口的猪-中国牛市(动态规划)----百度2016研发工程师在线编程题
  7. PADS输出BOM表和位号图(装配图)
  8. JavaWeb学习笔记(上)
  9. 压降不同的二极管并联
  10. Mac 终端连接和操作服务器常用命令