2014-01-30 148 views
6

我剛剛完成了Erlang in Practice screencasts(代碼here),並對分發有一些疑問。分發Erlang聊天系統

這裏的是總體架構:

architecture

這裏是如何監督樹的樣子:

supervisortree

閱讀Distributed Applications使我相信,主要動機之一用於故障轉移/接管。

但是,是否有可能使消息路由器監督員及其工作人員在一個節點上,而系統的其餘部分在另一個節點上,而對代碼沒有太多改變?

或者應該有3個不同的OTP應用程序?

此外,該系統如何水平擴展?例如,如果我現在意識到我的系統可以處理100個用戶,並且我已經將消息路由器確定爲主要瓶頸,那麼如何才能'添加另一個節點',現在它可以處理200個用戶?

+0

你用什麼工具繪製頂部圖表? –

+0

我沒有畫出它,它是截屏的截圖。但它來自OmniGaffle。 –

+0

好的,謝謝。 –

回答

3

我只在學習期間開發了Erlang應用程序,但通常我們有許多小進程只做一件事,並將消息發送到其他進程。 Erlang的優點在於,如果您在同一臺Erlang虛擬機或者同一臺計算機,同一個局域網或互聯網上發送消息,則無關緊要,調用和指向其他進程的指針總是相同開發商。

所以你真的想爲系統的每個小部分都有一個應用程序。

這就是說,它並沒有使構建可擴展的應用程序變得更簡單。根據經驗法則,如果您希望應用程序工作的節點數量是10倍以上,則需要重寫,否則消息傳遞開銷將會過大。顯然,當你從1開始到2時,你也需要考慮它。

所以如果你發現了一個瓶頸,當處理太多的客戶端時,這個應用程序特別慢,你希望第二次運行它,而且你需要實現一些額外的負載平衡,在你開始第二個應用。

讓我們假設主管檢查消息內容是否有不適當的內容,因此速度很慢。在這種情況下,每個人都在談論的節點將是簡單的路由器應用程序,它將以循環方式將消息轉發到管理程序應用程序的不同實例。如果這些1或2個實例不夠用,可以用某種方式寫路由器,以便通過發送控制消息來操縱實例的數量。

但是,爲了自動工作,您需要有另一個進程監視服務器,並發現它們過載或未充分利用。

我知道,動態添加和始終刪除資源,當你聽到它的聲音很大,但你可以看到它是一個大量的工作,你需要有建立了一些消息系統,該系統允許的話,還有一個監控系統可以監控需求。

希望這會給你一些關於如何完成的想法,不幸的是,自從我寫了我最後的Erlang應用程序已經過了一年多了,我不想提供可能會出錯的代碼。

+1

謝謝你的回答!我特別喜歡最後第二段。至少我不會錯過某些明顯的東西。 –

+0

你如何處理網絡故障或延遲? – CMCDragonkai

+0

我沒有 - 我有erlang做這一切,因爲它只是小小的任務。通常,Erlang和TCP可以做很多事情,如果它不夠用,你必須在應用程序之上實現一個額外的系統來檢測網絡和節點故障。 – peter