分布式系统学习(二)物理时钟同步

目的:

让一个互联网公司内部遍布世界各地的服务器保持同一个物理时间,时间误差控制在毫秒级别里面是最好的

背景:
时间概念
  1. 世界时:地球自转为基础的时间计量系统,不是一种均匀的时间系统
  2. 原子时:以物质的原子内部发射的电磁振荡频率为基准的时间计量系统。原子时规定1958年1月1日世界时为0时,秒长定义为铯-133原子基态的两个超精细能级间在零磁场下跃迁辐射9192631770周所持续的时间,是一种较恒定的时间系统。
  3. 协调时:以原子时秒长为基础,在时刻上尽可能接近于世界时的时间计量系统。为了保持世界协调时与世界时尽可能接近,当世界时与协调时相差超过±0.9秒时,就把世界协调时拨快或拨慢1秒,这就是闰秒。
    协调时其实就是我们日常使用中的时间,闰秒发生时的那一秒,相当于协调时暂停了一秒(多了个23:59:60)
闰秒问题

一些旧的Linux内核在接受到闰秒通知时导致服务器宕机(ntpdate不接收闰秒通知,ntpd接受闰秒通知)

ntpd 和 ntpdate

ntpd不仅可以作为时间服务器,同时可以保证与上一级时间服务器平滑同步时间,而ntpdate则是立即同步,当时间差小于0.5秒调用系统调用adjtime()调整,当时间差大于0.5秒则调用settimeofday()调整时间,从而可能导致系统时间不平滑的跳变。如果对于时间精度要求极高的话,ntpdate同步时间方式是不可接受的

标准时间的来源(NTP的工作)

NTP使用一种树状的,半分层的时间源系统。每一层叫做 stratum
stratum0一般为原子钟或者导航卫星,再往下又逐渐分层。
我们Linux服务器一般连接的都是微软或者Facebook提供的NTP服务器域名

同步实现

待续…

参考

腾讯网络应对闰秒危机之最佳实践
关于NTP,你需要知道的一切

你可能感兴趣的:(分布式)