2011-04-18 123 views
10

在我看到的所有Erlang主管例子中,通常都有一個監督整棵樹(或者至少是主管樹中的根節點)的「主」監督者。如果「主人」 - 監督人休息怎麼辦?應該如何監督「主」監督?任何典型的模式?Erlang:誰來監督監督員?

回答

10

使用start_link在頂層管理器啓動您的應用程序啓動/ 2回調,這意味着它與應用程序進程鏈接。

  1. 如果應用程序開始作爲一個永久的應用程序,我終止了整個節點(使用HEART可能重新啓動):如果應用程序從頂部的主管死於它的兩兩件事之一接收的退出信號。

  2. 如果應用程序作爲臨時應用程序啓動,應用程序停止運行,則不會進行重新啓動嘗試。

3

通常,主管設置爲「僅」監督其他進程。哪些男士沒有用戶編寫的由主管執行的代碼 - 因此它不太可能崩潰。

當然,這是不能強制執行的......所以典型模式是不是在Supervisor中有任何特定的應用邏輯......它只應該監督 - 而且別無其他。

+1

但Erlang通常用於雲計算。例如,如果包含「主」監督者的服務器崩潰(某人意外拔出插頭?),則監督器可能會崩潰。而且,通常不僅僅是在OS上運行應用程序線程。這並不意味着在這種情況下整個雲應該會崩潰。 – Daniel 2011-04-18 11:38:07

+4

@dkk Erlang通常不用於雲計算。雲計算是過去幾年出現的一個加載術語,而Erlang已經存在了20多年。 Erlang通常寧願運行在小型到中型服務器集羣上 – 2011-04-18 19:54:35

+2

@dkk:你不看管理員的其他節點,每個節點上的每個應用程序都有一個主管理員。 – 2011-04-19 14:33:17

3

好問題。我必須同意,所有的示例和教程大多都忽略了這個問題 - 即使偶爾有人提到這個問題(沒有提供示例解決方案):

如果您想要可靠性,請至少使用兩臺計算機,然後使它們互相監督。但是,如何通過OTP真正實現這個目標(具有目前的文檔和教程狀態),然而,似乎處於隱藏和祕密之間的某個地方。