程序員的必修課:為什么Hacker News昨晚一夜宕機
這是Hacker News官方網(wǎng)站上的一篇聲明,解釋為什么Hacker News昨晚上宕機一夜。
昨天Hacker News宕機了一晚上。問題不是由于我們新上的服務(wù)器。事實上,其中的原因愚蠢的讓人不好意思說。
有一個評論貼,一個新用戶想在里面發(fā)表回復,但發(fā)布出去的內(nèi)容沒有成為目標評論的子評論,反而成為與它平級的評論。我回復了一個評論來解釋 Hacker News是如何工作的。但我覺得該幫這個人修復一下,在他的回復上做個小手術(shù)。不幸的是,我用錯了評論的ID,使評論的樹結(jié)構(gòu)里出現(xiàn)了一個循環(huán);我使一條評論成為了它自己的下級評論。這樣一來,任何一個人試圖瀏覽這個帖子時,服務(wù)器都會生成一個無限長的長頁面。因為這個評論所屬的文章正處在首頁,所以這個動作被大量的執(zhí)行。
不知什么原因,我在修改這個評論后并沒有去查看這個評論是否留在了它正確的位置。一定是有什么事情讓我分心了。所以我沒有發(fā)現(xiàn)任何異常,直到不久之后服務(wù)器看起來開始有些喘。
我截取了服務(wù)器日志看發(fā)生了什么,里面的信息看起來是Hacker News缺少足夠的內(nèi)存,在頻繁的回收內(nèi)存。不管是不是這個原因,或出現(xiàn)了其它事故,這種問題一般是通過重啟服務(wù)器都能解決。于是我這樣做了。因為當天我開發(fā)了一些代碼,所以當我重啟服務(wù)器時,上面運行的是新版程序。
重啟了服務(wù)后,問題依舊存在。我懷疑是我那天寫的程序里有什么問題,我嘗試將版本恢復到上一版,然后重啟服務(wù)。但問題依舊存在。我們又試著把這以前老服務(wù)器上的程序拿過來換上,也不好用。我們認識到程序應該是沒問題的,我們認為問題應該出在了這個新服務(wù)器上。于是我們試圖切換到老的服務(wù)器上。我不知道我的同事Nick是否成功的切換,因為中途我放棄了,睡覺去了。
當我今早醒來,監(jiān)控顯示Hacker News仍然在新服務(wù)器上跑。出問題的那條評論仍在那,但那篇文章已經(jīng)被新上來的文章頂出首頁。所以整體上Hacker News并沒有宕機,但跡象仍顯示什么地方出了問題。例如,/threads?id=pg 無法訪問,因為我使這個帖子里出現(xiàn)了死循環(huán)。
終于,數(shù)據(jù)顯示,問題似乎跟某個特定的ID相關(guān)。當我到服務(wù)器上查看這條數(shù)據(jù)時,終于意識到了一定是我做錯了事。
于是我又給那個回復動了一次手術(shù),這次很小心,一切又恢復正常了。
我感到很抱歉。
英文原文:Why HN was down
譯文鏈接:http://www.aqee.net/hacker-news-was-down-all-last-night/