OTP 平台的容錯性高,是因為它提供了機制來監控所有 processes 的狀态,如果有程序出現異常, 不僅可以及時檢測到錯誤,還可以對 processes 進行重新開機等操作。
有了 supervisor,可以有效的提高系統的可用性,一個 supervior 監督一個或多個應用, 同時, supervior 也可以監督 supervior,進而形成一個監督樹,提高整個系統的可用性。
注意 ,supervior 最好隻用于監督,不要有其他的業務邏輯處理,越是接近監督樹根部的 supervior 就要越簡單, 因為 supervior 簡單就不容易出錯,它是保證系統高可用的關鍵。
下面,使用 elixir 中提供的 Supervisor 子產品,構造簡單的監督示例來示範如何提高系統的可用性。
監督政策有4種:
:one_for_one 隻重新開機出錯的 process
:one_for_all 當有 process 出錯時,重新開機所有的 process
:rest_for_one 重新開機出錯的 process ,以及所有在它之後啟動的 process(也就是重新開機對出錯 process 有依賴的 所有 process)
:simple_one_for_one 類似 :one_for_one ,但是 supervior 隻能包含一個 process
監督政策的轉換非常簡單,下面示範2種監督政策的示例:
測試方式:
我們換一種監督政策試試看,隻需要将上面的代碼
改成
測試步驟 和 one_for_one 一樣:
監督者并不是一維的,監督者也可以監督其它監督者,進而形成樹狀的監督關系。
修改上面的測試代碼如下:(隻修改了 Supervisor 的部分)
測試流程如下:
通過監督樹,我們可以給不同的 process 分組,然後讓每個組有不同的監督政策。
有了監督機制,可以及時的把握所有 process 的狀态,通過監督樹,還可以加入不同恢複機制。 是以,用好 Supervisor 子產品,可以極大提高系統的可用性。
本文轉自wang_yb部落格園部落格,原文連結:http://www.cnblogs.com/wang_yb/p/5564459.html,如需轉載請自行聯系原作者