故障是不可避免的,衡量運維同學(xué)的關(guān)鍵指標是系統(tǒng)可用性,這個指標就是通過故障時間來計算出來的,也就是每一年沒有故障的時間除以總時間得出的比例就是系統(tǒng)可用性,我們常說的系統(tǒng)高可用達到4個9,就是指系統(tǒng)可用時間99.99%,這里代表的就是一年里有52分鐘是故障時間。
當(dāng)然,故障也有不同的等級,我在阿里巴巴的時候,我們規(guī)定有事故級、A級、B級、C級等,事故級就是整個系統(tǒng)不可用,類似系統(tǒng)宕機等等,A級是主要業(yè)務(wù)邏輯影響大部分用戶使用,B級是主要業(yè)務(wù)邏輯影響小部分用戶使用或者非主要業(yè)務(wù)邏輯影響大部分用戶使用,C級是非主要業(yè)務(wù)影響小部分用戶使用。根據(jù)不同級別的故障及時間會算出最終一個可用性指標,作為運維同學(xué)的KPI關(guān)鍵指標。
每年阿里巴巴都會有很多的故障發(fā)生,讓我印象最深刻的一次故障,從級別上來說是C級,但這個故障對我影響非常大,我來好好回憶下這次故障的發(fā)現(xiàn)及處理全過程。
故障現(xiàn)象
國際站的業(yè)務(wù)指標是新增注冊用戶數(shù),這個關(guān)鍵指標在一貫的數(shù)據(jù)表現(xiàn)都是緩慢增長的。當(dāng)時我們的應(yīng)用監(jiān)控系統(tǒng)已經(jīng)上線了,也就是通過我們的系統(tǒng)可以隨時查看各種業(yè)務(wù)指標,相比業(yè)務(wù)部門的統(tǒng)計數(shù)據(jù)還要快,因為我們是直接從應(yīng)用內(nèi)部抓取數(shù)據(jù)進行統(tǒng)計分析的。在對這個關(guān)鍵業(yè)務(wù)指標的監(jiān)控圖上發(fā)現(xiàn),最近兩周的整體趨勢跟之前不太一樣,之前一直是緩慢上升的趨勢,而最近兩周有緩慢下降的趨勢,這是個細微的差別,但畢竟還是有差別,然后系統(tǒng)就報警了,認為這是一個故障。
焦慮的查找過程
我們收到這個故障后開始著手調(diào)查,常規(guī)的方法檢查系統(tǒng)的各個接口訪問是否正常、查詢?nèi)罩臼欠裾5鹊龋榱撕瞄L時間都沒有發(fā)現(xiàn)任何問題。基本上是把能查的都查過了,那就只能是某些第三方系統(tǒng)出問題的,我們把所有用戶注冊相關(guān)的第三方系統(tǒng)列出來,涉及到有十幾個獨立應(yīng)用,分別找到對應(yīng)的應(yīng)用負責(zé)人要求幫忙核查,經(jīng)過一段時間統(tǒng)計和監(jiān)控數(shù)據(jù)的探查,也沒發(fā)現(xiàn)問題。
那段時間很是焦慮啊,我們就又把最近那些系統(tǒng)做過發(fā)布也列出來,發(fā)現(xiàn)兩周之內(nèi)有6個系統(tǒng)有過發(fā)布記錄,然后跟著這些系統(tǒng)一個一個排查過去,在我們就要絕望的時候,終于找到了問題的真正原因——驗證碼系統(tǒng)在發(fā)布的時候漏掉了一臺服務(wù)器。
故障原因詳述
我來詳細解釋一下這個問題,該驗證碼系統(tǒng)是一個獨立的系統(tǒng),而且有高P同學(xué)寫的,代碼質(zhì)量有點高,而且在高壓力的情況下會自動拒絕客戶請求,等待下一次請求再響應(yīng),這樣做的好處是系統(tǒng)穩(wěn)定性高。在兩周前因為日志收集的相關(guān)功能做了一次線上發(fā)布。該系統(tǒng)是由兩臺服務(wù)器來提供服務(wù)的,可以承受住日常訪問量2-3倍的流量,常規(guī)發(fā)布過程是先將一臺服務(wù)器從線上拿下來(一般做法是從負載均衡中取消即可),將應(yīng)用程序更新為最新的版本,然后加入到線上提供服務(wù),而這次發(fā)布過程由于負責(zé)發(fā)布的運維同學(xué)在最后一個步驟的時候敲錯了一個指令,導(dǎo)致該服務(wù)器在更新完程序后并沒有加到負載均衡后面,也就是說日常由兩臺服務(wù)器提供服務(wù)的變成了由一臺服務(wù)器來提供服務(wù),相應(yīng)的服務(wù)能力就減半了,在常規(guī)情況下驗證碼響應(yīng)也是沒問題的,只有在高峰期會導(dǎo)致部分用戶獲取不到驗證碼,而由于系統(tǒng)程序?qū)崿F(xiàn)得很好,系統(tǒng)并不會崩潰,從而隱藏了問題的暴露。那么在新用戶注冊的時候,由于有部分請求拿不到驗證碼,有些用戶就在注冊過程中就卡住了、放棄了,因此導(dǎo)致了前面的那個故障,新增注冊用戶數(shù)呈緩慢下降的趨勢。
通過這個故障,讓我深刻意識到幾點:
1、人是最不可靠的,雖然每天都在做的事情,但還是會出現(xiàn)遺漏、出錯等;
2、核查清單是必要的(查理芒格的普世智慧之一),靠人腦記憶是靠不住的,只有通過嚴格的核查清單,才可以減少出錯的可能性;
3、任何一個可能出問題的地方,最終總是會出問題。