開發與維運

計算機時間問題漫談

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),格林尼治平均時間。

image.png

3.產品設計建議

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

Leave a Reply

Your email address will not be published. Required fields are marked *