计算机时间问题漫谈

1.引言

  • 当没有手表的时候,你不清楚现在是几点。
  • 当有了1块手表时,你知道现在是几点。
  • 当有了2 块手表时,它们的时间显示不一致时,你又不知道现在是几点。
  • 当你碰到有个人和你一样都有手表,但时间不一致时,你还是不知道现在是几点。
  • 当你对着电视对标,看了眼电视显示是 6 点整,当低头调完表时,再看表这时电视又比手表快了几秒,于是又继续调表,经过几轮后,好像偏差不大了。
  • 过了几个月,你发现手表又和电视上的不一致了……
  • 当学了高中物理后,知道了电视信号传播是需要时间了,知道了电视上的时间只是导播随电视画面一起传给你播放的画面,于是全国各地看到的 6 点的画面其实是有先后的。
  • 当你出国后,发现国外有人有他们心中的“CCTV”,你又开始思考不同国家的人的时间差。
  • ……

2.问题分析

我们在日常生活中面临的问题,计算机系统也面临同样的问题,站在计算机系统角度面临 4 种时间。

  • 自己的系统时间

    • 硬件时钟:计算机硬件有个使用电池的实时时钟(Real-time Clock, RTC)也叫(CMOS时钟,BIOS时间)。这个于电池质量和使用时长等有关。
    • 系统时钟:又名软件时钟,由Linux内核计算为自1970年1月1日午夜UTC以来的秒数。系统时钟的初始值由硬件时钟计算。系统正常运行后,由系统内核独自运行系统时钟。
  • 自己选择对标的基准时间:可选择自建自己的时间服务器,也可选择对标公共时间服务器
  • 协作模块的时间:由于每个系统选取的时间坐标不同,则大家在协作时时间不一致是常态,如果凑巧一致且长期一致,真是罕见的幸事。
  • 世界公认的标准时间:一般认为UTC和GMT是相等的,但是会存在0.9秒以内的误差,这是由于地球不规则自转引起的。

    • UTC(Universal Time Coordinated),即协调世界时。全世界统一的世界标准时间。需要不规则地加入闰秒。
    • GMT(Greenwich Mean Tim),格林尼治平均时间。

计算机时间问题漫谈

3.产品设计建议

  • 时间不一致是常态,要基于这个前提来设计
  • 可以以抽象的时间代替具体时间,如业务流水号
  • 以相对时间代替绝对时间
  • 日志要有基于自身时钟的时间戳,建立自己的时间体系,以便于自身问题的排查和定位
上一篇:Java入门 - 语言基础 - 02.开发环境配置


下一篇:html_列表_图片