五個為什麼

2021-10-14 14:39:07 字數 4023 閱讀 7367

2023年1月10日的凌晨3點30分,一陣急促的嘟嘟聲驚醒了我們的系統管理員michael gorsuch,當時他正在位於布魯克林的家中睡覺。那是一條網路管理員nagios發來的短訊息,報告系統不正常。

michael gorsuch從床上爬起來,不小心踩到了正在床邊酣睡的他的狗,把狗也弄醒了。那條狗氣呼呼地竄到客廳裡,在地板上撒了一泡尿,然後又回來繼續睡覺。這個時候,michael gorsuch已經在另一間房間裡開啟了電腦,發現在他負責的三個機房中,有乙個位於曼哈頓鬧市的機房連不上去。

這個特別的機房位於曼哈頓繁華地區一幢很安全的大樓裡,面積很大,由peer 1公司負責管理。它配備了發電機,以及足夠使用好幾天的柴油,還有大量的蓄電池,保證在自備發電機啟動前,能夠提供幾分鐘的電力,防止出現訪問中斷。它還有巨大的空調裝置,多個高速網際網路出口,以及非常務實、負責的工程師,他們總是以一種單調、穩重、井然有序的方式進行工作,而不會用花俏、刺激、時髦的方式做事,所以那是乙個非常可靠的機房。

過了十分鐘,michael gorsuch連上了曼哈頓的機房,一切似乎都恢復正常,他就又回去睡覺了。

大約到了清晨5點,這個問題又出現了。這一次,michael gorsuch打**到peer 1在溫哥華的網路運營中心noc。對方開始調查,做了一些測試,但是沒有發現任何異常。5點30分,一切好像又恢復了正常。但是,michael gorsuch還是不放心,不敢再回去睡覺了。

清晨6點15分,曼哈頓機房徹底無法連通。peer 1在他們那一邊找不到任何異常。michael gorsuch穿好衣服,搭地鐵進入曼哈頓。伺服器本身好像沒有出問題,都在正常執行。peer 1的網路連線也是好的,問題出在交換機。michael gorsuch取下了交換機,將我們的路由器直接連到了peer 1的路由器。真是奇妙,我們的伺服器又可以重新訪問了。

這時,天已經亮了,我們在美國的客戶開始上班了,他們會感到一切正常。但是我們在歐洲的客戶,卻已經發來了電子郵件,抱怨不能連上我們的伺服器。michael gorsuch花了一些時間做事後分析,發現事故原因是交換機上乙個簡單的設定。交換機能夠使用多種網速進行工作(每秒10m位元、100m位元或者1000m位元),你可以手動設定網速,也可以讓交換機自動選擇與所在網路相適應的網速。我們這台交換機就設在了自動選擇檔,問題就出在這裡。通常情況下,交換機的這個設定會正常工作,但不能保證一定不出故障,1月10日的凌晨,它就發生故障了。

michael gorsuch其實早知道這個設定可能會引發故障,但是安裝交換機的時候,他忘了手動設定網速,所以交換機上的設定一直是出廠時的自動檔。這個設定也能正常工作,直到出了問題為止。

michael gorsuch並沒有因為解決了問題而感到高興,他給我寫了一封電子郵件:

好主意!

要想得到真正高的服務穩定性,成本是極其高昂的。俗稱"六個9"的服務穩定性(99.9999%的時間正常執行),意味著每年下線時間不能超過30秒。這真的有點接近荒謬了。即使有人聲稱,他們已經投資了上千萬美元,建立了超一流的大型超冗餘"六個9"系統,即使這樣,也無法排除出現嚴重故障的可能性。某一天當他們醒來的時候,我不知道是哪一天,但是會有這麼一天,他們發現一種異乎尋常的故障以一種異乎尋常的方式發生了,比如三個機房都遭到了電子脈衝emp炸彈的襲擊,他們只能拼命捶自己的腦袋,眼睜睜看著服務中斷14天。

請這樣想,如果你的"六個9"系統由於某種神秘原因,突然下線了,然後你花了乙個小時,找到了原因並將其修復,即使這樣,你也已經把直到下個世紀的服務中斷時間額度都用光了。即使是公認的最可靠系統,比如at&t的長途**服務,也會出現長時間的服務中斷(2023年中斷了6個小時),這意味著它們的服務穩定性只能到達乙個令人羞於啟齒的"三個9"水平(99.9%的時間正常執行)…at&t的長途**服務被認為是"電信級"(carrier grade)的系統,是服務穩定性的**標準,你的系統會比它更穩定嗎?

提高服務穩定性的最大困難,就是"黑天鵝難題"(problem of black swans)。這個名詞是由nassim taleb提出來的(www.edge.org/3rd_culture/taleb04/taleb_indexx.html),他這樣定義:"黑天鵝代表外來因素,是乙個超出正常預料的事件。「幾乎所有的網際網路服務中斷,都來自於意料之外的突發事件,屬於極其小概率的非主流意外。這類事件是如此罕見,以至於常規的統計方法----比如"故障間隔平均時間」----都失效了。「請問紐奧良市發生特大洪水的平均間隔時間是多少?」

測量出每年服務中斷的分鐘數,並無助於**你的**第二年會中斷服務多久。這讓我想到了今天的民用航空業。美國的全國運輸安全委員會ntsb的成就非常卓越,所有常見的飛機墜毀的原因都已經被消除了,結果就導致如今每一次發生飛機墜毀,事故的原因看來似乎都屬於非常令人意外的、獨一無二的"黑天鵝因素"。

服務穩定性有兩個極端,乙個是"極端不可靠",服務一次又一次地中斷,簡直愚蠢至極;另乙個是服務穩定性"極端可靠",你花了幾百萬美元,終於將每年的"正常執行時間"增加了一分鐘。在這兩個極端之間,存在乙個服務穩定性的最佳位置,即所有被預計到的突發情況都已經事先做好了準備。你預計到硬碟可能會發生故障,就事先做好了準備,所以當硬碟真的發生故障的時候,你的服務就不會中斷。你預計到dns伺服器可能會發生故障,就事先做好了準備,所以當dns伺服器真的發生故障的時候,你的服務就不會中斷。但是,意料之外的突發情況,也許就會讓你的服務出現中斷。這種局面就是我們能夠期望的在兩個極端之間達到的最佳位置了。

為了達到這個最佳位置,我們借鑑了日本豐田公司創始人豐田佐吉(sakichi toyoda)的思想,他提出了五個為什麼。當某個地方出錯的時候,你就問為什麼,一遍遍地追問,直到你找到根本性的原因為止。然後,你就針對根本性的原因,開始著手解決問題,你要從根本上解決這個問題,而不是只解決一些表面的症狀。

我們早就提出過"解決問題有兩種方法" ,"五個為什麼"同我們的提法很接近,所以我們就決定開始採用這種方法。下面就是michael gorsuch列出的思考過程:

我們與peer 1紐約機房的連線中斷了。

為什麼?----我們交換機裡的網線介面好像不工作了。

為什麼?----與peer 1的網路運營中心交換意見後,我們判斷這個問題很可能是由於網速/雙工模式不匹配(speed/duplex mismatch)造成的。

為什麼?----交換機的網速開關設在了自動調節檔,而沒有被手動設定在乙個固定檔。

為什麼?----許多年前,我們就清楚地知道有可能發生此類故障。但是,我們始終沒有寫出乙份書面的技術說明文件,用於指導和檢查交換機在生產環境中的設定。

為什麼?----我們總是很狹隘地看待技術說明文件,覺得只有在找不到系統管理員的情況下,才需要去看它,或者覺得只有運營團隊中那些不負責系統管理的成員,才需要看它。我們沒有認識到,應該把它作為技術操作的標準和確認清單。

「如果我們事先就寫好乙份書面的標準操作流程,安裝完交換機後,再根據書面流程一一核對安裝步驟,這次的服務中斷事故就不會發生,」 michael gorsuch寫道。「或者假定我們已經有了乙份書面的操作流程,但是寫得不夠完整,那麼等到事故發生以後,我們就需要對這份文件進行相應的補充公升級,確保類似的事故以後不再發生。」

經過幾次內部討論以後,我們所有人都同意,不為服務穩定性設定乙個靜態值作為目標,那是毫無意義的。我們覺得,如果有人希望通過測量某些無意義的指標來改進工作,那肯定是沒用的。我們真正需要的是乙個能夠不斷改進工作質量的流程。所以,我們決定不向我們的顧客提出乙個sla條款,而是搭建乙個網誌。在這個網誌上面,我們將實時記錄每一次的服務中斷,提供完整的事後分析,詢問五個為什麼,找到根本性的原因,告訴我們的顧客為了防止類似故障再次發生,我們所採取的舉措。就拿這一次的交換機事故來說,我們採取的變化就是,在內部文件中寫入詳細的操作步驟和檢查清單。以後再在生產環境中安裝交換機的時候,所有操作步驟都必須嚴格按照檔案中寫好的步驟完成。

我們的顧客可以訪問這個網誌,看看故障的原因到底是什麼,以及我們正在怎樣改進我們的服務。我們希望,我們的顧客能夠因此增強信心,相信我們的服務品質正在穩步提高。

與此同時,如果我們的顧客感到我們的故障對他造成了影響,他就可以向我們要求補償,客服人員會給他的賬戶延長使用期限或者退款。我們讓顧客自己決定到底該補償多少,最多可以延長使用期限乙個月,因為不是每個顧客都會注意到發生了服務中斷,更不要說遭受損失了。我希望我們的這些做法,能夠提高我們的服務穩定性,到達一種我們可以接受的程度,即我們的目標就是,我們遇到的所有引起服務中斷的故障,都是真正由於極其罕見的、無法預料的"黑天鵝因素"而引起的。

附言。對,我們需要再招聘一名系統管理員,以免深更半夜再發生故障的時候,只有michael gorsuch乙個人能被叫醒。

快取(五) 為什麼選擇redis

redis是乙個開源的使用ansi c語言編寫 支援網路 可基於記憶體亦可持久化的日誌型 key value資料庫,並提供多種語言的api redis 是tcp socket 網路環境,client 發包到 redis,報文格式是resp,非常短小精悍的乙個報文體系,而在服務端redis 是單執行緒...

十萬個為什麼

目錄 import sys import some module noqa答案 將 noqa新增到一行表示linter 乙個自動檢查 質量的程式 不應該檢查此行.可能生成的任何警告都將被忽略。那條線可能有一些 看起來很糟糕 的東西,但開發商理解並打算出於某種原因它在那裡 有關更多資訊,請參閱flak...

5個為什麼(five whys)

文章非常好,我認為我們必須實施這一思想。原文 翻譯 正文 概要 無論何時當發現問題時,應連續追問五個為什麼尋找到問題的根源。然後在分析的各個層面進行修正。發現問題時應用五個為什麼,你將 1 發現技術問題下的人員問題,2 為你的創業公司建立一套免疫系統。大野耐一是豐田生產方式的發明人之一。他的書 豐田...