1. 程式人生 > >工程事故與現實世界(續)

工程事故與現實世界(續)

接上一篇《工程事故與現實世界》,繼續分享一些現實中的工程事故,以及其中帶來的啟示。

關鍵報警

1979 年 3 月,美國賓夕法尼亞州三裡島核電站發生洩漏,20 英里範圍內的居民全部撤離,從此以後美國放棄了核電站建設。

事故發生時,反應堆容器發生壓力積聚,在這種情況下,正常的應對方案是開啟一個安全閥門,降低壓力到安全水平。這個安全閥門的設計是通過加電壓到電磁製動器上使其開啟,開啟後會有一個監控指示燈亮起,降壓後重新關上閥門,指示燈就會熄滅。

操作人員在壓力聚集後按正常處理流程進行了閥門開啟降壓操作,壓力下來後,操作人員移除電壓,閥門應該關閉,但實際上閥門被卡在了開啟位置,而此時的監控指示燈卻熄滅了,操作人員誤以為閥門已正常關閉,實際卻並沒有關上。

之後,反應堆容器中的冷卻劑一直洩漏了近 2 小時,直到反應堆頂部從冷卻液中暴露出來,燃料棒和芯塊開始融毀,在隨後的倉皇失措中,輪班人員一直相信控制面板上的指示燈,認為人工減壓閥處於正常的關閉狀態。

就是這樣一個小小的報警指示燈故障,導致了這次核事故。對於像核反應堆閥門這樣的關鍵系統部件,其工作狀態需要更準確的監控報警,甚至多重監控報警進行交叉驗證。比如:除了電路感測的指示燈報警,還應該有更直接的開閉位置感測報警。

三裡島核事故帶來的啟示是:對於系統中的核心關鍵節點,需要絕對直接而且準確的監控報警,報警本身就需要高可用,而且還能多重交叉驗證。

忽略變化

20 世紀 50 年代,英國哈維蘭公司開發出了第一個商用噴氣式飛機,但後來該機型在同一年連續兩次出現墜毀。

後經事故調查研究找到了原因:噴氣式飛機因為比其他機型飛行高度更高,在飛機起飛和著陸時為使乘客不至於感到不適,不可避免要進行機內空氣加壓和減壓迴圈;而在噴氣式飛機出現之前的機型因為飛行高度低,不需要做加壓和減壓迴圈處理;當時的飛機設計人員沒人想到這會有什麼影響。

但反覆的空氣加壓和減壓迴圈,導致飛機頂部天窗用以發射無線電的鉚釘處金屬疲勞,產生應力老化裂紋,多次加減壓迴圈後,裂紋擴大變成了裂縫,最終在某次飛行過程中導致了空中解體。在飛機實驗室的壓力測試環境下並沒有真實的模仿實際的加壓和減壓週期,工程師對自己設計的可靠性陷入了一種錯誤的認識之中。

更可怕的是,在第一次墜機事故後,並沒有找到這個真正的原因,以為是一次意外偶然事件。在該機型停飛了兩個月後,由英國首相丘吉爾和該公司總裁聯合做出保證不會再出事,數週後該公司的另一架由羅馬飛往開羅的班機又墜毀於地中海後,工程師們才找到真正的原因。

在我們做系統時,有一些變化發生了,可能只是我們沒有注意到;還有一些變化可能並不常發生,它只在特定的異常下發生。網際網路應用的很多線上系統,大部分時候流量壓力是逐步積累的,但在特定的情形下也可能會發生劇烈的變化。同樣一個量級的流量,是逐步達到的,還是突然劇烈產生的,對系統帶來的壓力並不一樣。

比如,在做 IM 系統時,有一種場景是如果出現集中網路閃斷,那麼所有 IM 客戶端的長連線都會一起斷開,並集中重連。這時負載均衡極有可能會讓突發的集中重連流量全部打到後端第一個被輪詢到的機器上,單機就會被突發的集中流量擊垮。而如果是逐步提升的流量,則會均勻的被均衡到後端所有的分散式伺服器上。

設計時,盡力考慮所有可能的使用場景變化,而哈維蘭的教訓實在太深刻與悲痛了。

蠕變效應

2006 年,波士頓的一個隧道內,有 4 塊天花板,每塊重 3 噸,突然脫落掉了下來,砸中了行駛中的小車。

那麼問題來了,天花板為什麼會突然坍塌,而之前卻毫無徵兆?它們是如何固定的?天花板是由金屬支架支撐,支架使用螺栓插入鑽孔固定在隧道頂部,而螺栓則使用環氧樹脂膠填充螺栓和孔腔之間的間隙。

環氧樹脂是一種聚合物,其硬度會隨時間和溫度的變化而變化,如果突然施加一個負載,環氧樹脂能在短時間內很好的保持原來的形狀。但如果其持續承受負載(靜態負載),聚合物的分子可能會慢慢移動,造成環氧樹脂逐漸變形,這個過程就是 “蠕變”。

而隧道中使用的環氧樹脂具有很差的抗蠕變性,負責安裝的工程師忽略了這個事實,也可能是對此缺乏瞭解,因此造成了這次事故。

而程式系統中類似 “蠕變效應” 的問題有很多,比如:磁碟日誌,快取空間,記憶體回收,資料儲存,索引週期。所有這些都可能因為足夠長時間的系統執行,造成 “蠕變” 積聚,直到撐不住引發事故。

系統中沒有所謂的抗 “蠕變” 元件,因此我們需要對這些可能發生 “蠕變” 的地方進行週期性的檢查,並及時處理。

...

以上就是我這次雙十一前讀到的一些關於現實世界更傳統的工程事故,以及帶給我的啟示。泰坦尼克號號稱當時世界上最安全的船,在撞上冰山之後,回過頭來一看到處都是顯而易見的問題。俄國作家費奧多·陀思妥耶夫斯基曾說過一句名言:

當失敗時,似乎一切都顯得愚蠢。

現實世界的工程事故會顯得更殘酷,不免感慨工程師真要有敬畏之心,能修復缺陷,解決問題固然不錯,但能提前去規避和發現會更好。


寫點文字,畫點畫兒,記錄成長瞬間。
微信公眾號「瞬息之間」,既然遇見,不如同行。