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