听过闰年闰月,可你听过闰秒吗?

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

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

闰年是为了弥补是我们的历法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服务器,然后通知到客户端的操作系统,最终由操作系统来处理闰秒。

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

image.png

带来的影响

虽然闰秒对普通人的日常生活没有任何影响,但是对于开启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服务,闰秒结束后再开启。

提前一天停止ntp /etc/init.d/ntpd stop
重置系统时间 date -s "`date`"
重新开启ntp ntp/etc/init.d/ntpd start

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

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

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

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

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

image.png

如何预测避免

实际上,由于地球自转的时间无法计算,他有可能变快,也有可能变慢,受到潮汐、天气和熔态金属在地球核心的流动等各方面因素的影响,下一次闰秒的时间无法预估,但是国际地球自转和参考系服务(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

相关文章
|
安全
SCP文件上传中断的问题
SCP文件上传中断的问题
2134 1
|
Linux Shell Python
-bash: pip: command not found pip命令报错 解决方法(Centos版)
-bash: pip: command not found pip命令报错 解决方法(Centos版)
4420 0
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
Fin-R1:上海财大开源金融推理大模型!7B参数竟懂华尔街潜规则,评测仅差满血版DeepSeek3分
Fin-R1是上海财经大学联合财跃星辰推出的金融领域推理大模型,基于7B参数的Qwen2.5架构,在金融推理任务中表现出色,支持中英双语,可应用于风控、投资、量化交易等多个金融场景。
562 5
Fin-R1:上海财大开源金融推理大模型!7B参数竟懂华尔街潜规则,评测仅差满血版DeepSeek3分
|
9月前
|
机器学习/深度学习 人工智能 Java
谈谈AI时代到来以及35岁危机双重压力下,作为一个普通开发者的想法
在AI快速发展的背景下,Java后端开发人员可通过系统学习转型至AI领域。建议步骤包括:1. 学习Python编程;2. 掌握数据处理与分析工具;3. 学习机器学习基础及框架;4. 深入研究深度学习;5. 结合Java与AI技术;6. 参与开源项目和社区;7. 持续更新知识并实践;8. 寻找转型机会。尽管转型需要时间和努力,但前景广阔。
365 4
|
7月前
|
文字识别 网络协议 开发工具
GitHub封锁?推荐5个国产的Git仓库替代平台
近日,GitHub对中国区IP的部分限制引发了广泛关注。未登录用户被拒,已登录用户功能受限,南北网络环境差异更显“内卷”。为应对这一挑战,本文推荐了多个国产Git平台:Gitee(码云)、GitCode(CSDN旗下)、CODING(腾讯系)、CodeUP(阿里云支持)及微信代码管理工具。这些平台功能全面、稳定性强,是开发者迁移项目的理想选择。通过同步代码、配置CI/CD流水线等简单步骤,可确保项目平稳过渡。此次事件提醒我们,掌握核心技能与支持国产平台同样重要!
5146 11
|
5G 调度 芯片
5G 帧结构 |带你读《5G空口特性与关键技术》之七
虽然在较高的载波频率下通常不使用较小的子载波间隔,但是参数集可以独立于频段进行选择。不同子载波间隔可用于不同的场景下。如对于室外宏覆盖和微小区,可以采用 30kHz 子载波间隔;而室内站则可以采用 60kHz 子载波间隔;对于毫米波,则可以采用更大的子载波间隔,如 120kHz。
12883 2
5G 帧结构 |带你读《5G空口特性与关键技术》之七
|
SQL 缓存 安全
深入解析MyBatis-Plus LambdaQueryWrapper与QueryWrapper:高效数据查询的秘密
深入解析MyBatis-Plus LambdaQueryWrapper与QueryWrapper:高效数据查询的秘密
13888 2
|
定位技术 芯片
闰秒(leapsecond)和原子钟(Atomic Clock)究竟是什么
文章解释了闰秒的概念和必要性,它是为保持世界标准时间(UTC)与原子时的一致而增加的一秒,以及原子钟的工作原理和最新发展,包括新型小型化原子钟的应用前景。
647 0
|
存储 人工智能 JSON
【AI大模型应用开发】【LangChain系列】3. 一文了解LangChain的记忆模块(理论实战+细节)
本文介绍了LangChain库中用于处理对话会话记忆的组件。Memory功能用于存储和检索先前的交互信息,以便在对话中提供上下文。目前,LangChain的Memory大多处于测试阶段,其中较为成熟的是`ChatMessageHistory`。Memory类型包括:`ConversationBufferMemory`(保存对话历史数组)、`ConversationBufferWindowMemory`(限制为最近的K条对话)和`ConversationTokenBufferMemory`(根据Token数限制上下文长度)。
687 0
|
存储 数据挖掘 数据处理
使用pandas高效读取筛选csv数据
本文介绍了使用Python的Pandas库读取和处理CSV文件。首先,确保安装了Pandas,然后通过`pd.read_csv()`函数读取CSV,可自定义分隔符、列名、索引等。使用`head()`查看数据前几行,`info()`获取基本信息。Pandas为数据分析提供强大支持,是数据科学家的常用工具。