簡體   English   中英

Erlang主管程序

[英]Erlang supervisor processes

我一直在深入學習Erlang,在完成Joe Armstrong的“ Programming Erlang”后,我又回到了一件事。

在我看來,主管會為每個子處理程序生成一個進程。 因此,每個聲明的gen_server類型處理程序將作為單獨的進程運行。

如果您正在構建一個小型Web服務器,並且希望每個請求成為其自己的進程,將會發生什么。 您是否仍然遵循OTP原則並以某種方式(如何?)使用gen_server,還是創建自己的行為?

牛仔如何處理這個問題。 它仍然使用gen_server嗎?

tl; dr:我發現試圖找出“正確的”監督結構是項目的開始,這是過早優化的一種形式。

設計監督樹的“正確”方法取決於應用程序的工作人員正在做什么。 對於Web服務器,我可能首先會探索以下方面:

  • 最高主管(單身)
    • 數據服務主管(每種服務類型一名)
      • 工人池(服務支持下的所有工人)
    • 客戶端連接主管(一名)
      • 連接工作者池(或每個連接一個,必須使用它來決定)
    • 邏輯主管(視情況而定-這里存在很大差異,具體取決於問題域)
      • 工人或主管(視情況而定-必須探究/了解問題領域以了解如何組織)

因此,每個較低級別的主管類型需要幾個工人。 我沒用過牛仔,所以我不知道它的組織方式。 我要說明的一點是,雖然處理服務於網頁的數據服務的機制比較瑣碎,但實際上不能完成核心問題解決工作的系統部分可能並不重要,這將決定所有有趣的方面。系統。

將解決問題的位與Web顯示或連接處理位混合在同一模塊中是不好的。 理想情況下,您應該能夠在本機應用程序,Web應用程序和網絡服務中使用相同的邏輯單元,而無需進行任何更改。

最終,是否應該讓工作人員擁有1:1的主管或擁有1:n的主管的答案取決於您在做什么,以及哪種重啟策略可以使您在恢復到已知的一致狀態,用戶感覺到的延遲和資源之間達到最佳的平衡。用法。

關於Erlang的我最喜歡的事情之一是,我可以從一個像上面那樣的幼稚的主管結構開始,使用它直到發現不那么好的地方,然后很容易地切換周圍的環境並嘗試替代方案而無需從根本上改變我的系統。 (如果在替代數據表示形式周圍編寫適當的抽象,則使用替代數據表示形式也是如此。)因此,首先,獲得在測試中起作用的內容。 然后加載它,看看是否可以破壞它。 了解問題的實質之后 ,再開始擔心細節。

這是一種常見的模式,即在erlang中為每個客戶端生成一台服務器,然后您將對子級服務器使用使用simple_one_to_one策略的管理程序。 這允許請求服務器on_demand啟動服務器。 通常,當您不知道需要多少個進程,並且這些進程是獨立的(一個進程的崩潰不會影響另一個進程)時,將使用此方法。

網站learningyousomeerlang.com( LYSE主管章節 )中有非常好的信息。 整個網站值得一讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM