原創文章,轉載請註明
“let it crash”思想源於Erlang。Erlang的穩定性是衆所周知的。
而Erlang的穩定,深層原因就在於“let it crash”思想。在講什麼是“let it crash”思想之前,我們先來看看其所解決的問題或背景。
編寫大型的分佈式程序,代碼中往往會遇到這樣或那樣的異常,這些許許多多的異常很多甚至是糾纏不清的。如果嘗試去根據預想的不同異常來編寫代碼處理,是非常困難,有時候甚至是不現實的,因爲有時候你數不清有多少異常情況,在哪裏會出現,並且編寫防禦異常的代碼有可能產生新的異常。
於是有人提出了“let it crash”思想,it一般指的是獨立的進程。其主要思想就是分佈式系統中的進程有異常,不進行防禦代碼的編寫,而是由它奔潰。然後有此進程的監督進程進行重啓,當然,奔潰前的正常狀態要做到可以恢復,也就是要做到進程狀態持久化,這個技術現在先不展開。
核心的關鍵就是進程奔潰,監督者重啓,狀態恢復,繼續處理。在外面看來,數據處理的流程沒有中斷過。看如下示例圖:
此圖很好地詮釋了監督者與普通進程之間的關係。當然,不是說進程中的所有異常都不處理,有些異常也是需要在進程內部處理的。具體哪些異常處理,哪些異常不處理,這個視具體情況斟酌。