ntp导致的时钟回拨
ntp导致的时钟回拨
时钟回拨
我们的服务器时间校准一般是通过ntp进程去校准的。但由于校准这个动作,会导致时钟跳跃变化的现象。
而这种情况里面,往往回拨最能引起我们的困扰,回拨如下所示:
会引起什么问题
准点调度任务的误判
假设有一个任务每天0点时候获取昨天所有的数据进行对账,正常情况和时钟回拨的情况如下图所示:
针对这种情况,笔者让业务调整了调度触发时间,不要精确在准点,以避免此问题。
唯一序列号(雪花算法)
时钟回拨的情况也会影响到采用雪花算法这种对时间戳要求单调的算法。很明显的,时间戳回调后,极易形成重复的序列号。
对于这种情况我们采用预留序列号段,在检测到这种情况后,将预留序列号分配出去,进而解决这一问题。
ntpd的时钟回拨(跳变)条件
事实上,ntpd本身还有另一种方案,即通过调整滴答频率来让我们的本地时钟慢慢的和精确时间match。
但是,如果本机时间和精确时间(从ntpd服务器获取的时间)相差过大(> stepout threshold 128ms),则ntpd会直接采用跳跃变化的方式修正时间。代码如下所示:
ntp_loopfilter.c
double clock_max = CLOCK_MAX; // .128也就是128ms
int local_lock(...) {
// 差距>128ms之后,选择跳变
if (fabs(fp_offset) > clock_max && clock_max > 0) {
......
// 修正simclock.local_time
step_systime(fp_offset);
......
}
}
而在我们的线上,在/var/log/message中经常能见到时钟跳变的输出。
-x选项
我们采用-x选项,可以将stepout threshold(128ms)提升到600s。这样,不是太极端的情况,应该都不会触发到时钟回拨。但这会导致长时间时间戳不准确的问题(毕竟,调整滴答频率来慢慢match比较慢)。
stepback stepback
在高版本的ntpd中,还可以有stepback选项,如果设置为0的话,则不会回拨。
ntp导致的时钟回拨的更多相关文章
- 【Debug】串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!
串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!
- 百度开源的分布式唯一ID生成器UidGenerator,解决了时钟回拨问题
UidGenerator是百度开源的Java语言实现,基于Snowflake算法的唯一ID生成器.而且,它非常适合虚拟环境,比如:Docker.另外,它通过消费未来时间克服了雪花算法的并发限制.Uid ...
- 分布式ID增强篇--优化时钟回拨问题
原生实现 本文承接sharding-jdbc源码之分布式ID,在这篇文章中详细介绍了sharding-jdbc的分布式ID是如何实现的:很遗憾的是sharding-jdbc只是基于snowflake算 ...
- 使用雪花算法为分布式下全局ID、订单号等简单解决方案考虑到时钟回拨
1.snowflake简介 互联网快速发展的今天,分布式应用系统已经见怪不怪,在分布式系统中,我们需要各种各样的ID,既然是ID那么必然是要保证全局唯一,除此之外,不同当业务还需要不同 ...
- 关于分布式唯一ID,snowflake的一些思考及改进(完美解决时钟回拨问题)
1.写唯一ID生成器的原由 在阅读工程源码的时候,发现有一个工具职责生成一个消息ID,方便进行全链路的查询,实现方式特别简单,核心源码不过两行,根据时间戳以及随机数生成一个ID,这种算法ID在分布式系 ...
- NTP时钟同步学习记录
--1 要点回顾 . 1. NTP唯一配置文件:/etc/ntp.conf . 2. NTP系统日志记录:/var/log/ntp . 3. ntp.conf简要介绍 - 利用 restrict 来管 ...
- linux NTP配置
时间是由计算机内的石英晶体振荡电路以:NetworkTimeProtocol(NTP):通常情况下,时间同步是按以下步骤进行的::(1):NTP客 户端向NTP服务器发出一个时间请:(2):当服务器接 ...
- NTP服务解析
······[NTP服务概述] NTP(Network Time Protocol)服务主要用于同步服务器时间. nptd 可以运行在多种模式下,包括对称的 主动.被动(active/passive) ...
- NTP时间同步
1.设置NTP相关服务开机自启: # chkconfig ntpd on # chkconfig ntpdate on # chkconfig |grep ntp 2.启动NTP服务: # servi ...
随机推荐
- Compound Words UVA - 10391
You are to find all the two-word compound words in a dictionary. A two-word compound word is a wor ...
- 微信小程序底部实现自定义动态Tabbar
多图警告!!! 最近在工作中遇到这样一个需求:微信小程序底部的Tab需要通过判断登录人的角色动态进行改变,想要实现这个功能依靠小程序原生的Tabbar是不可能实现的了,所以研究了一下自定义Tab,这里 ...
- B/S与C/S架构的区别
C/S架构优点:1)界面比较丰富2)安全性高3)实现的功能更多,可以实现更复杂的业务4)客户端可以处理部分业务,分担服务器端压力缺点:1)需要开发独立的客户端软件,开发成本高2)需要安装独立的客户端软 ...
- ESXI的使用
一台物理裸机服务器装上了ESXI就有了灵魂 vmware esxi的安装 多网段站群服务器 参考教程 安装ESXi VMware ESXI 6.5安装教程 物理机下安装 VMware ESXi 6.7 ...
- adbi学习:so hook实现机制
本篇我们来看看adbi的实现原理,其实里面的知识点前面差不多都有涉及了,没多少新知识.adbi利用hijack程序将libexample.so注入到指定的进程中,并且在进程中加载libexample. ...
- OpenSSL相关漏洞
目录 心脏出血漏洞(CVE-2014-0160) OpenSSL CCS注入漏洞(CVE-2014-0224) OpenSSL FREAK Attack漏洞(CVE-2015-0204) TLS/SS ...
- 哈希爆破神器Hashcat的用法
目录 HashCat HshCat的使用 使用Hashcat生成字典 使用Hashcat破解NTLMv2 HashCat HashCat系列软件在硬件上支持使用CPU.NVIDIA GPU.ATI G ...
- Linux中的.bash_ 文件详解
目录 .bash_history .bash_logout .bash_profile .bashrc 每个用户的根目录下都有四个这样的 bash文件,他们是隐藏文件,需要使用-a参数才会显示出来 . ...
- 通过 Netty、ZooKeeper 手撸一个 RPC 服务
说明 项目链接 微服务框架都包括什么? 如何实现 RPC 远程调用? 开源 RPC 框架 限定语言 跨语言 RPC 框架 本地 Docker 搭建 ZooKeeper 下载镜像 启动容器 查看容器日志 ...
- NumPy中文文档搬砖(划掉)学习笔记(1)
原文地址 前言 况下加速Python中的操作运行时.适用于快速数值运算的一个选项是NumPy,它当之无愧地将自己称为使用Python进行科学计算的基本软件包. 当然,很少有人将50微秒(百万分之五十秒 ...