北京時間7月3日消息,《連線》雜志近日刊載文章稱,當上周六出現“閏秒”時,包括社交新聞聚合網站Reddit在內的多家網站都遭遇了故障。文章對這種所謂的“閏秒故障”進行了剖析,并列出了一些解決方案,其中包括將計算機系統的網絡時間協議暫停一秒鐘,以及谷歌所采取的“leap smear”(閏秒彌補)的方法等。
以下是這篇文章的全文:
上周六晚上,當“閏秒故障”(leap second glitch)導致社交新聞聚合網站Reddit受創時,詹森·哈維(Jason Harvey)并未認識到這是“閏秒故障”。他原本以為那是與亞馬遜云服務大規模中斷相關的某種類型的互聯網減速,從而導致網絡上一些最流行的服務在不到24個小時以前均遭遇了技術故障。
“那看起來就像是網絡運行表現很差的樣子。”哈維說道,他是管理Reddit運作的系統管理員之一。“在亞馬遜宕機的情況下,出現一個網絡問題是說得通的。”
但在大約半個小時以后,哈維和他的團隊在對故障進行追蹤以后發現,Reddit自身運行開源Linux操作系統的機器出現了問題。由于未能進行正確調試以適應“閏秒”變動的緣故,這些服務器幾乎陷入了停止狀態。閏秒是對“協調世界時”(UTC)所做出的基本調整,目的是使其與太陽時間保持同步,但這多出來的一秒鐘給網絡服務器帶來了很大的問題。
根據地球的自轉速度,國際計量局會定期在年底或年中(也可能在季末)對協調世界時增加一秒鐘,使其能與地球自轉同步。這不會讓我們漸漸走向日落在早晨時發生,但可能會在計算機系統中帶來問題,原因是計算機系統需要在時鐘里多加一秒,但系統本身不夠靈活,因此無法處理這多出來的一秒鐘。
在Reddit的例子中,這個問題可被追蹤至Linux內核中的一個故障,這是開源Linux操作系統的核心。一個被稱為“hrtimer”——即高精度定時器的縮寫——的Linux子系統由于這種時間上的變動而變得混亂,因此突然引發了服務器上的過度活動,最終導致服務器中央處理器被鎖定。
Reddit只是在上周六受到“閏秒故障”影響的多家網站之一,美國博客媒體Gawker Media和Mozill等網站也都遭遇了同樣的故障;而且,這種問題傾向于在每次出現“閏秒”調整時都會發生。舉例來說,在2009年1月份,有報道稱閏秒導致Sun Microsystems的Solaris操作系統和甲骨文的軟件包都出現了問題。
“幾乎每一次出現閏秒時,我們都會發現點什么。”有“Linux之父”之稱的利納斯·托瓦爾德斯(Linus Torvalds)向《連線》雜志表示。“這真的是很煩人,因為這是代碼基本上無法運行的一個經典例子,因而在正常情況下用戶無法對其進行測試。”
在今年3月份,黑客約翰·斯圖爾茨(John Stultz)為Linux核心中的高精度定時器故障提供了一個補丁,但某些版本的Linux尚未進行更新來加入這個補丁。斯圖爾茨周一并未對此置評,但據他在一個在線郵件列表中發布的內容顯示,他曾討論過導致Reddit出現服務故障的問題。
故障剖析
那么,這些服務器到底發生了什么事情呢?這是一件很復雜的事情。甚至就連利納斯·托瓦爾德斯也表示,如果想要真正理解到底發生了些什么,那么我們應該與斯圖爾茨談談。但在對多名熟知這個問題的人進行訪談以后,我們對到底發生了什么有了一種很好的認知。
高精度定時器是在一個應用“睡眠”時被使用的子系統,它會等待操作系統完成某些其他的任務。在某些情況下,高精度定時器會為這些睡眠中的應用設定一種鬧鐘,會在操作系統花費太多時間來處理其他工作時敲響。從斯圖爾茨在郵件列表中發布的內容來判斷,當閏秒發生時,這些高精度定時器會突然變得比核心操作系統提前一秒,因此就會開始敲響那些鬧鐘,從而同時喚醒無數睡眠中的應用,導致服務器的中央處理器超載。
不過,Reddit的情況則略有不同,這個網站的服務器運行著一個名為Cassandra的開源數據庫,該數據庫是由Java編程語言構建而成的,在Linux上運行。就詹森·哈維所說,在閏秒發生時,Cassandra無法暫停Java進程,導致這些進程陷入不斷旋轉的循環中,從而耗盡Reddit服務器的中央處理器功率。
到最后,Reddit通過重啟服務器的方式解決了這個問題。這個網站在大約30到49分鐘的時間里幾乎完全不能使用,在大約一個半小時里處于完全脫機的狀態。
在Reddit竭盡全力試圖解決Cassandra服務器問題的同時,美國八卦網站Gawker的Tomcat服務器也遭遇了故障,Mozilla則面臨著與Hadoop服務器有關的問題。Hadoop和Tomcat也都依賴于Linux平臺和Java技術,看起來這些服務器也都遭遇了同一個故障的侵襲。
與此同時,其他系統則在閏秒來臨的前一天遭遇了問題。Linux等系統使用網絡時間協議(Network Time Protocol)來與全球原子鐘進行對接,從而對時間作出調整。在上周五,網絡時間協議開始向服務器發起警報稱,今年的閏秒即將來臨。據Opera Software系統管理員Marco Marongiu稱,至少有一部分Opera服務器在收到這一通知時就已經開始被鎖定。這個問題在一個Linux郵件列表中被討論過,目前還不清楚這個問題與Reddit經歷的高精度定時器問題有多么密切的聯系。
下一次閏秒
我們不知道下一次閏秒將在何時發生,這要視地球的自轉速度有多快而定——這一速度既有可能減慢也有可能加快,具體要視潮汐、天氣和熔態金屬在地球核心的流動而定。但是,當下一次閏秒發生時,可能會帶來更多的問題。
托瓦爾德斯指出,無論是在什么時候,如果時間被弄混,那么情況就很有可能會變得糟糕。開發者可能會提前進行測試,但很難預計現實世界中將會發生怎樣的事情。“閏秒和夏令時間都是特別令人痛苦的事情,原因是它們會帶來更多的復雜性,在沒有嚴格規則約束的情況下變得隨機化。而在這兩種時間變動中,閏秒更令人感到痛苦。”
正如托瓦爾德斯所指出的那樣,將地球的實際自轉時間與原子鐘所衡量的時間同步起來是一件棘手的事情。但從整體上來說,過去15年時間里科技行業并未很多次地經歷過閏秒。事實上,加利福尼亞州圣何塞的利克天文臺(Lick Observatory)的程序員史蒂夫·艾倫(Steve Allen)指出,這可能也是導致“閏秒故障”問題的原因之一。“在1999年到2005年之間并未出現過閏秒,因此所有的云服務和多處理器等產品和服務都是在閏秒并未發生過的階段中形成的。”他說道。
推薦閱讀
北京時間7月4日消息,據國外媒體報道,英特爾周二向歐盟常設法庭提出上訴,聲稱歐盟反壟斷監管部門在起訴英特爾案件中依賴的證據是非常不充分的。英特爾希望能夠撤銷或減少歐盟對其作出的10.6億歐元(約合13.3億美元)>>>詳細閱讀
本文標題:《連線》雜志:走近閏秒故障及其解決方案
地址:http://www.xglongwei.com/a/22/20120704/73028.html