2015年6月28日 星期日

全世界工程師都為這「一秒」傷腦筋:閏秒,多出的這一秒哪來的?



經濟部 17 日發布訊息,台灣將配合「國際地球轉動服務組織」發布的世界時間,於 7月 1 日增加 1 秒,也就是「閏秒」。看似短短的 1 秒,一般人覺得可以多睡 1 秒鐘,多偷懶 1 秒鐘,但為了這 1 秒,你知道電腦程式、系統的管理員要花上多少功夫應戰嗎?

閏秒的生成:多出的一秒哪來的?

在探討閏秒對電腦系統帶來的影響之前,先來看看什麼是閏秒。在「時間」的度量衡上,分為以原子鐘為標準計時的「協調世界時」(Coordinated Universal Time, UTC),以及依據地球自轉、公轉運動,再以地球極軸運動修正的「世界時」(Universal Time 1, UT1)。前者就是世界各國依循使用的標準時間,以英國格林威治的時間為基準,台灣時間比英國格林威治快上 8 個小時,即 UTC+8。
至於這兩個時間的度量衡有什麼差別呢?事實上,地球自轉的速度並非規律一致,而會因地質分布或其他星球引力的影響,導致時快時慢,但長遠來講會越來越慢,因此以規律的原子鐘為基準記時的 UTC,會與以天文現象記時的 UT1 不同步。
為了協調兩個時間,不讓太陽上升到正中央、時鐘卻走到了午夜 12 點,這種時刻與自然節律不一致的狀況發生,1972 年,國際計量大會決定在原子時與世界時差距超過 0.9 秒時,就加、減 1 秒,讓 UTC 配合 UT1,而那 1 秒,也就稱做為「閏秒」(Leap Second)。
自 1972 年以來,已經出現過 25 次閏秒,而且都是正閏秒,2015 年 7 月即將增加的這 1 秒,則是第 26 次。
當要增加正閏秒時,會加在第 2 天的 00:00:00 前,也就是把 23:59:59 的下 1 秒記成 23:59:60,然後才是第 2 天的 00:00:00。如果是減去負閏秒時,則將 23:59:58 的下一秒減去,直接進入第 2 天的 00:00:00。
2015 年這一次的增加正閏秒,台灣時間發生在 7 月 1 日 07:59:59 的下一秒,即 07:59:60,再來才是 08:00:00。

AWS 作法:把閏秒分散出去

對於一般人來說,閏秒的出現,就是把時鐘、手錶調快或調慢 1 秒鐘。但對於電腦系統,由其是那些需要精準對時的 GPS、通訊設備、金融系統來說,可就得用心處理,況且閏秒的發生並沒有規律,因此對應閏秒的時間調整,不會一開始就寫在系統裡。上一次的閏秒發生在 2012 年 6 月 30 日跨至 7 月 1 日時,結果造成 Reddit、Mozilla、RedHat、LinkedIn 等數家網站,因為網站底層軟體平台無法應變這多出的 1 秒而當機。
Amazon Web Services 服務是眾多網站經營者選用的雲端伺服器,如何讓系統的時間與 UTC 一致,是 Amazon 必須要應戰的課題,而 AWS 選用的應戰方法是,「不增加閏秒,但仍保持時間與 UTC 一致」。
AWS 並不打算讓系統在 23:59:59 之後,加入 23:59:60 這 1 秒鐘的閏秒;它採用的做法是,將這 1 秒平均攤在閏秒出現前後的 24 個小時,讓每秒的秒數稍微增長一點點,最後補滿 1 秒。
更仔細來說,一天有86400秒,閏秒即是 86400/86400,從 6 月 30 日 12:00:01 PM(中午)開始,AWS 系統的時鐘每秒都會增加 1/86400 秒,每秒長度變成 1+1/86400秒,過了 24 小時至 7 月 1 日 12:00:00 PM 時,就剛好補滿 1 秒。
這樣做的好處是,系統的時鐘不需特別為閏秒設計一個「23:59:60」的記時,仍舊以 60 秒為 1 分鐘的單位,而且除了 23:59:60 這個閏秒記時與 UTC 不同步以外,其他每秒仍與 UTC 同步。雖然在 UTC 加入閏秒之前,AWS 系統的時間會比 UTC 快一些,加入閏秒之後 AWS 系統的時間會比 UTC 慢一些,但總地來說,這些差距最多只差到 0.5 秒,不對系統構成影響。
© 由 T客邦 提供
▲AWS 對應閏秒的調整方式,會使得它比 UTC 快一些或慢一些,但最終會一致。Source : AWS Blog
除了像 AWS 這種「把閏秒分散出去」的作法,其他應戰閏秒的作法還有像 Linux Kernels 一樣把 23:59:59 重複一次,以及像 Windows time servers 忽略閏秒,在閏秒增加之後再讓系統時間與 UTC 同步。當然,若系統沒有與任何時間同步系統連線的話,也就不會因閏秒而產生任何調整,但系統時間就比 UTC 慢了一秒。
雖然有不少應戰閏秒的方式,但攸關金錢進出的股票交易市場仍對閏秒可能帶給系統的影響較為敏感,甚至避開在閏秒增加時交易。台灣增加閏秒的時間股市還未開市,所以較為無感,然而芝加哥商品交易所(CME)和洲際交易所預計將 6 月 30 日夜間電子開盤時間延後,以避開閏秒。

參考資料:
AWS : Look Before You Leap – The Coming Leap Second and AWS (Updated)
聯合新聞網:6月30日閏秒危機 全球交易所警戒


引用網址如下:
http://www.msn.com/zh-tw/news/world/%e5%85%a8%e4%b8%96%e7%95%8c%e5%b7%a5%e7%a8%8b%e5%b8%ab%e9%83%bd%e7%82%ba%e9%80%99%e3%80%8c%e4%b8%80%e7%a7%92%e3%80%8d%e5%82%b7%e8%85%a6%e7%ad%8b%e9%96%8f%e7%a7%92%ef%bc%8c%e5%a4%9a%e5%87%ba%e7%9a%84%e9%80%99%e4%b8%80%e7%a7%92%e5%93%aa%e4%be%86%e7%9a%84%ef%bc%9f/ar-AAceh92?ocid=HPCDHP#page=2

沒有留言: