復雜系統(tǒng)故障處理“潛規(guī)則”
6月29日,Amazon EC2美國東部1號區(qū)域的一個availability zone遭大規(guī)模雷暴襲擊而斷電,該事故殃及了包括Netflix、Instagram、Pinterest在內的一大批服務。Amazon針對此次事故做出了官方報告。
本文以下內容盤點了十八條關于復雜系統(tǒng)故障的經驗,從系統(tǒng)、從業(yè)人員、事故評估等一系列角度全方位地探討了復雜系統(tǒng)故障的性質,點破了復雜系統(tǒng)中的一系列“潛規(guī)則”。
1. 復雜系統(tǒng)本質上都是高風險系統(tǒng)
各種備受矚目的復雜系統(tǒng)(如交通系統(tǒng)、醫(yī)療系統(tǒng)、電力系統(tǒng)等)都是高風險系統(tǒng),這是它們固有的內在屬性。盡管風險事故的爆發(fā)頻度時有高低,導致系統(tǒng)固有高風險性的內因卻無從化解。這些風險又催生了各式各樣的風險防范措施,進而塑造了形形色色的復雜系統(tǒng)。
2. 復雜系統(tǒng)都對故障嚴加防范并且行之有效
故障造成的高昂代價促使人們逐漸構筑起重重防范措施來抵御故障。其中既包括必要的技術措施(如后備系統(tǒng)、設備的各種“安全”功能等)和人力措施(如培訓、經驗傳承等),也包括多種機構性措施、制度性措施和監(jiān)管性措施(如政策流程、資格認證、工作守則、團隊培訓等)。這些手段構成了一系列防護,令日常運維得以遠離意外事故。
3. 災難性事故是由多起故障共同造成的——單點故障不足以興風作浪
多重防范的確行之有效,一般情況下足以保障系統(tǒng)正常運轉。重大災難性事故往往是由多起無足輕重的輕微故障共同導致的系統(tǒng)性的意外事故。這些輕微故障中的每一起都是事故的誘因,但只有當它們疊加在一起時,才會釀成事故。換言之,故障的發(fā)生概率比重大系統(tǒng)事故的發(fā)生概率要高得多。系統(tǒng)內預設的安全組件可以排除大部分故障。滲入到業(yè)務層面的故障絕大部分也會被排除,這一層面的故障通常需要從業(yè)人員人工處理。
4. 復雜系統(tǒng)中潛伏著變化多端的故障組合
由于復雜性過高,這些系統(tǒng)在運轉時總是伴隨著多種缺陷。然而這些缺陷在系統(tǒng)運轉過程中顯得無足輕重,因為其中的任何一種缺陷都不足以單方面導致故障。要徹底清除潛在故障,經濟成本往往太過高昂。此外,除非真的發(fā)生事故,否則我們也很難看出這些故障如何會誘發(fā)事故。不斷演變的技術和工作機構,再加上人們?yōu)榱伺懦收隙冻龅姆N種努力,使得故障也不斷地發(fā)生變化。
5. 復雜系統(tǒng)運轉時總是處于降級模式
由上一條可知,運轉中的復雜系統(tǒng)總是殘缺不全。之所以還能運轉,是因為系統(tǒng)內備有充足的冗余部件,即便存在諸多缺陷,人們仍然有辦法讓它工作。從以往的事故評估結果來看,事發(fā)之前系統(tǒng)幾乎都出現(xiàn)過險些釀成災難的“準事故(proto-accident)”。有觀點認為,通常情況下,簡單的系統(tǒng)性能監(jiān)控手段便足以發(fā)現(xiàn)這些系統(tǒng)降級情況,它們本該在重大事故發(fā)生之前就得到應有的重視。系統(tǒng)的運作過程是動態(tài)的,各種(機構、人員、技術)部件會不斷發(fā)生故障進而被更替。
6. 災難總是近在咫尺
復雜系統(tǒng)都有可能引發(fā)災難性故障。在從業(yè)人員的身邊,各種潛在故障每時每刻如影隨行——災難隨時隨地都有可能發(fā)生。所有復雜系統(tǒng)都有可能導致災難性的后果,這是它們的標志性特征之一。人們不可能完全杜絕這類災難性故障;這是由系統(tǒng)自身的性質決定的。
7. 在事發(fā)之后將事故歸咎于某一“罪魁禍首”的做法是完全不可取的
重大故障都是由多重失誤共同造成的,因此事故背后的“肇因”不可能是孤立的。導致事故的因素多種多樣,但其中任何一種都不足以單方面造成事故。只有當這些因素疊加在一起時事故才會發(fā)生。實際上,滋生事故的溫床正是由這些因素環(huán)環(huán)相扣共同形成的。因此,事故背后根本就不存在孤立的“罪魁禍首”。這種將事故歸咎于某一“罪魁禍首”的做法無法反映故障的技術本質;之所以抓住某一局部力量或事件不放并加以責難,無非為了迎合社會和文化訴求罷了。
8. 事后成見會扭曲事故評定人員的認知
在已知事故后果的情況下,人們會產生一種錯覺,傾向于認為當事人理應更早注意到釀成事故的種種事件。這意味著人們無法客觀地分析事故經過。已然了解事故后果的事故分析人員往往會先入為主,難以站在當事人的角度忠實地還原事故經過。當事人似乎“理應注意到”這些因素“必將”導致事故。[2] 事后成見一直是事故調查中的主要障礙,在有專家參與時尤甚。
9. 操作人員分飾二角:他們既是故障的始作俑者,也是故障的防范者
系統(tǒng)內的從業(yè)人員一邊操縱系統(tǒng)從事生產,一邊防范事故的發(fā)生。系統(tǒng)運轉過程中的這一動態(tài)特質,以及業(yè)務需求與故障滋生風險之間的矛盾是不可避免的。外界很少有人能夠認識到這一角色的二重性。系統(tǒng)正常運轉時,唱主角的是生產角色;事故發(fā)生后,主角則換成了故障防范角色。實際上,系統(tǒng)操作人員一直長期且持續(xù)地分飾二角,這一點往往為外界所誤解。
10. 當事人的舉動完全是在冒險
事故發(fā)生之后,人們往往會認為早在事發(fā)之前導致事故的重大故障就已經在所難免,之所以最終會釀成事故,是因為當事人在故障迫近時處理失當或玩忽職守。但實際上,當事人在采取行動時完全是在冒險,他們無法預知自己的行動會導致什么后果。其中的不確定性在程度上時有不同。當事人的冒險行為在事故之后體現(xiàn)得尤為明顯;災后分析通常都不會將這些行為判作明智之舉。反過來看:即便處理得當,也不過是瞎貓碰上死老鼠,無法得到廣泛認同。
11. 風口浪尖上的行為令一切模糊性消失殆盡
各種組織機構都存在一定的模糊性,而且這種模糊性往往是蓄意造成的,它體現(xiàn)在生產目標、資源使用效率、運作成本,以及對不同程度的潛在事故的容忍度等多個方面。然而在評判那些被拋至風口浪尖的從業(yè)人員的行為時,這些模糊性卻消失殆盡。發(fā)生事故之后,當事人的行為往往會被視為“失誤”或“違規(guī)”,但這類評判帶有嚴重的事后成見,往往無視業(yè)績壓力等其他誘因。
12. 從業(yè)人員會對復雜系統(tǒng)進行調整
從業(yè)人員及一線管理者會積極調整系統(tǒng),一邊擴大產值一邊減少事故。這種調整每時每刻都在進行,包括:
(1)系統(tǒng)重組,避免脆弱部件遭遇故障。
(2)集中稀缺資源,應對關鍵需求。
(3)留出后路,用以規(guī)避或修復各種可預期及不可預期的故障。
(4)針對系統(tǒng)性能的變化建立各種早期檢測手段以妥善緊縮生產規(guī)模,或通過其他手段提高系統(tǒng)的恢復能力。
13. 復雜系統(tǒng)中的專業(yè)人才不斷更替
運作和管理復雜系統(tǒng)需要大量專業(yè)人才。迫于技術革新的壓力,同時也為了填補人才流動所致的空缺,從業(yè)人員的專業(yè)知識必須不斷更新。無論出于什么目的,技能和專業(yè)知識的培訓和鍛煉都應該成為系統(tǒng)自身的職能之一。由此可見,復雜系統(tǒng)中時刻存在著身懷不同程度的專業(yè)知識的從業(yè)人員和受訓人員。有關專業(yè)知識的關鍵問題主要表現(xiàn)在:
(1)對能夠勝任最困難、最艱巨的生產任務的稀缺專業(yè)人才資源的需求;
(2)為了應對未來需求而進行的技術儲備。
14. 變化會引入新的故障
在可靠性較高的系統(tǒng)中,重大事故的發(fā)生頻率較低,這使得人們更樂于接受變化,尤其是以減少影響較小的頻發(fā)性故障為目的引入新技術。然而這些變化有可能會引入新的、后果嚴重的偶發(fā)性故障。在應用新技術清除已知的系統(tǒng)故障或追求更高的性能的同時,往往會埋下可能引發(fā)新的大規(guī)模災難性故障的隱患。不少情況下,比起采用新技術清除掉的那些故障,這些新的、罕見的災難性事故所造成的影響甚至更加惡劣。事發(fā)之前很難發(fā)現(xiàn)這些新型故障;人們的注意力大都集中到設想中的借由變化帶來的收益上去了。由于這類新的惡性事故發(fā)生的頻率很低,事發(fā)之前系統(tǒng)可能已經經歷過多次變更,加大了識別事故的技術原因的難度。
15. 抵御未來事件的效果受限于人們看待“肇因”的方式
發(fā)生事故之后,為了防范事故中的“人為失誤”,人們通常會想方設法阻斷各種可能“導致”事故的事件。這種做法治標不治本,在事故防范方面起到的作用十分有限。實際上,由于潛在故障的模式不斷地發(fā)生變化,相同事故重復發(fā)生的概率非常低。這類事后防范措施往往難以起到增強安全性的作用,反而還會加重系統(tǒng)的耦合性和復雜性。這么做不僅會催生更多潛在故障,而且還會加劇事故的排查難度。
16. 安全性是系統(tǒng)整體的特性,而不是系統(tǒng)中各部件的特性
安全性是系統(tǒng)的自發(fā)屬性;它不是獨立的個人、設備、組織中的某個部門或系統(tǒng)所能決定的。安全性無法通過購買或生產途徑獲?。凰鼰o法脫離系統(tǒng)中的其他組件而獨立存在。因此人們無法像加工原材料那樣加工安全性。無論何時,安全性在任何系統(tǒng)中都是動態(tài)的;系統(tǒng)自身持續(xù)不斷的變化必然導致災難性故障及其應對方式發(fā)生相應的變化。
17. 人們持續(xù)不斷地營造安全的環(huán)境
無故障運營的背后凝結著人們付出的種種努力,他們想方設法將系統(tǒng)的性能波動控制在可承受范圍內。這些努力中的一大部分原本就是日常運維工作的一部分,相當直截了當。然而系統(tǒng)的運轉過程從來都不是一帆風順的,迫于周遭條件的變化,從業(yè)人員必須及時采取措施,不斷營造安全的環(huán)境。這些措施通常都出自一組經過充分演練的對策集;但有時也會出現(xiàn)新穎的策略組合或完全創(chuàng)新的解決方案。
18. 無故障運營需要故障處理相關的經驗
只有真刀真槍地處理過故障的人才能識別出災難性故障,并成功地將系統(tǒng)的性能波動維系在可承受范圍之內。如果運維人員充分重視系統(tǒng)的極限情況,系統(tǒng)的表現(xiàn)往往就會更加穩(wěn)定。一旦被逼入極限情況,系統(tǒng)的表現(xiàn)便開始惡化,變得捉摸不定,或是難以恢復穩(wěn)定。對于具有內在高風險性的系統(tǒng),運維人員應當以把控系統(tǒng)整體運作情況為主,正確認識到事故的必然性并予以重視。安全性的提升離不開對意外事故有正確認識的運維人員;同時,運維人員也必須清楚地認識到自己采取的措施會如何影響系統(tǒng),如何令系統(tǒng)逼近或遠離極限情況。
原文出處:http://blog.liancheng.info/how-complex-systems-fail-zh/#.UhbJhrLkxmg