天天看點

計算機時間問題漫談1.引言2.問題分析3.産品設計建議

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),格林尼治平均時間。
計算機時間問題漫談1.引言2.問題分析3.産品設計建議

3.産品設計建議

  • 時間不一緻是常态,要基于這個前提來設計
  • 可以以抽象的時間代替具體時間,如業務流水号
  • 以相對時間代替絕對時間
  • 日志要有基于自身時鐘的時間戳,建立自己的時間體系,以便于自身問題的排查和定位

繼續閱讀