就因為這一秒鐘,科技巨頭吵了快十年


2017 年 1 月 1 日這一天,全人類都被強續了 1 秒,因為這天有 24 小時 01 秒。


多出這一秒被塞到了北京時間 07:59:60 的位置。


這一秒也叫閏秒


然而就在前段時間,亞馬遜微軟、 Meta 、谷歌等國外科技巨頭聯合發起了一項活動,說要取消閏秒。


倒不是說他們不讓人多活一秒,而是因為“ 閏秒帶來的副作用,早超過它本身的價值 ”。


雖說這提議已經得到美國相關機構的支持,但取消閏秒這麼大的事,可不是一個國家說的算。


今天咱們簡單盤盤,閏秒能幹啥,為啥現在又要取消。


>/ 為什麼會有閏秒?


我們之前有 2 種主流時間標準,一種是民用的世界時,一種是高精尖領域用的國際原子時。


世界時也可以說是格林尼治時間,它的一天時長是按地球平均自轉周期算的,時間點和太陽位置保持同步。


比如太陽在正頭頂,那就是中午 12 點。


但世界時有個問題,地球受到氣候、地殼運動各種因素影響,自轉一周時間不一樣。


換句話說,世界時的一天並不是永恆的 24 小時,會有幾毫秒誤差。


這幾毫秒對世超沒啥影響,平時幾秒結束還是幾秒。


但對航空航天、衛星導航等領域來說就不行了。


衛星定位,每一顆衛星都在不斷發射包含位置和時間的無線電信號,精確度高達一米以內和十億分之一秒。


即使誤差只有 0.1 秒,再乘以光速,衛星定位就會差之千里。


所以高精尖領域用國際原子時計時。


國際原子時是通過原子震蕩頻率來計算時間的,可以精確到納秒


這啥概念呢?我國最新的銫原子鐘(NIM 6),5400 萬年誤差不超 1 秒。


可能有人要問了,既然有原子時,咱老百姓幹啥不用原子時?


因為地球自轉一圈的時間變來變去,時間一久,太陽的位置和原子時差距就越來越大。


一萬年後就可能出現,晚上 11 點頭上頂個大太陽的情況。


然而,世界時也有問題,它每一天,每一秒長度都不一樣。


所以 1972 年,我們老百姓用了一個新標準,叫協調世界時( Coordinated Universal Time 簡稱 UTC )。


你也可以叫它縫合怪。


它用原子時的計時速度,在和世界時誤差達到 0.9秒,就會加減個 1 秒。


這樣一來,平時時間是精準的,日子久了也不會和太陽位置不匹配。


這個為了保持同步,多出或摳掉的這一秒就是閏秒,目前全世界已經加了 27 次閏秒。


>/閏秒帶來的問題


雖說閏秒解決了時間和地球自轉不匹配的問題,但也帶來了新麻煩。


比如我們要加一秒,那時間就會成為 23:59:59、23:59:60、00:00:00。


中間多了奇怪的 1 秒,人么無所謂,也就是多發一秒呆的事。


但很多服務器就頂不住了。


因為閏秒和閏年不一樣,沒有規律可循,無法提前寫進系統。


如果突然多出 1 秒,很多老程序不知道如何面對它,就會各種報錯。


比如 2012 年,閏秒導致了 Reddit、Mozilla、 LinkedInYelp 的服務器大規模宕機。


同年澳大利亞航空公司的一個辦理系統也死機了幾小時,被迫人工檢查乘客登機。


2017年,閏秒還導致 Cloudflare 一部分客戶服務器離線。


這當中原因有很多,我們簡單說一種。


因為加了一秒鐘,很多任務會因為條件不匹配而啟動失敗,這時它們就會不停嘗試,一直循環,直到把系統塞爆。


打個比方。


一棟樓的每層樓之間有 60 級台階,送貨機器人每爬一層樓就會放一桶水,並收到一個回執單,表示任務完成。


但這時某層有 61 級台階,機器人還是上了 60 級就直接給水放下來,結果沒收到回執單,然後它就一直放一直放,問題不就出現了么。


此外,還有一些更複雜的情況我們就不討論了。


雖說現在系統會為閏秒做一定適配,但誰保證一定不會出錯呢。


更關鍵的是下次不一定是加 1 秒,是減 1 秒。這情況目前還沒遇到過,誰敢保證不會有新問題呢。


>/該不該取消閏秒?


看到這裡,大家也能理解這些科技巨頭為啥要取消閏秒了。


他們認為取消閏秒,其實過個 1000 年都沒啥大問題,差不太多。


嗯,話這麼說也沒錯,但後代可能要罵你了,問題丟給他們是吧?


其實早在十幾年前,就一直有人說要取消閏秒,但也有不少人反對。


“ 系統崩潰明顯是自己沒處理好,其他人怎麼就沒問題? ”


“ 閏秒讓大家維持了精確的時間,也讓大家沒脫離世界時,依然可以和地球自轉,和太陽同步。”


還有更騷的反對原因,比如英國是因為閏秒可以讓時間和世界時一致。


世界時也就是格林尼治時間,取消了閏秒,那引以為豪的格林尼治時間相當於被拋棄了。


英國格林尼治皇家天文台

大門外的24小時制電子大鐘 ▼


>/有沒有更好的方法?


當然,這些科技巨頭也並不是想單純幹掉閏秒,而是想要一種更好的方案。


比如 Meta 提出一個叫 Smearing 的方案,就是把 1 閏秒分散到 17 個小時里慢慢閏。


此前,谷歌搞的是一種“ 提前閏 ”的方案。


它在服務器時鐘里每天加個幾毫秒,這樣要加閏秒時,調整幅度就不至於觸發大問題。


還有人提出把閏秒換成閏分,閏時。意思就是每相差 59 秒再加一個閏分,降低一下調整頻率。


但不管怎麼說,我認為不管是閏秒,還是提前閏,“ 閏 ”這種機制一定要存在。


因為人類對於時間的概念,根本上還是來自太陽。


自古以來,咱們抬起頭看到太陽東邊升起就是上午,西邊落下就是晚上。


日出而作,日落而息。人類生活只要是和太陽綁定的,自然就離不開世界時。


只是這種和太陽保持聯繫的方式,這種“ 閏 ”的機制,或許還需要一個更好的方案。