2013-06-19 98 views
0

Erlang在內部使用什麼算法或設計模式來保證跨多個節點的唯一pid? Erlang還使用什麼算法或設計模式來保持全局節點名稱映射在所有節點之間同步?erlang獨特的pid和全局同步(對於c#.Net)

此問題的目的是在分佈式C#.Net應用程序中創建類似的行爲。 C#.Net系統已經具有高性能,並行消息傳遞和任務調度算法,與Erlang非常類似,可以在多個內核上進行並行處理。

現在的目標是擴展它以發送和接收來自和來自不同機器上多個節點的消息。

一個簡單的解決方案是將其設置爲「客戶端&服務器」,以便只有其中一個節點是用於保留唯一PID節點和全局名稱的「主」節點。

但是,在所有節點之間複製數據是一個誘人的設計,因此每次都可以避免網絡查找,以檢查命名節點的實際位置,因爲它可能故障切換到另一臺計算機。

如果對節點名稱表的任何更改都複製到像Erlang這樣的所有節點上,那麼對於每個傳遞的消息來說,它的效率會更高。

另外,如果「主」節點失敗怎麼辦?所以分佈式,複製和同步解決方案是一個更好的設計。

任何人都可以直接瞭解Erlang如何在封面下執行此操作嗎?

+0

[This answer](http://stackoverflow.com/a/262179/113848)可能會有所幫助。 – legoscia

+0

是的。這個答案解決了關於PID的問題。但是全球名稱表呢? – Wayne

回答

0

正如在評論中回答的那樣,PID如何保持唯一性在這裏解釋:Can someone explain the structure of a Pid in Erlang?(擾流板:它實際上不是一個'全局'唯一的ID)。

關於命名進程的全局表:在分佈式Erlang中,這由the global module進行管理,它提供了一個全局名稱註冊工具。註冊表數據在節點之間複製,並且註冊是原子的。

分佈式Erlang中的節點爲loosely connected。意思是沒有需要同步的集羣的全局視圖。

此外,Erlang更多的是關於併發性和並行性。 Erlang併發模型的一個很好的解釋(以及與並行的區別)can be found here