2014-01-24 58 views

回答

2

解釋Akka集羣如何工作將會很長,但我可以嘗試給出一個概述。

在Akka設置的會員資格本質上是一個高度專業化的CRDT。由於談論矢量時鐘本身將是一個漫長的討論,我將使用類似git的存儲庫。

您可以想象每個Akka節點都維護自己的存儲庫,其中HEAD指向羣集的當前狀態(該節點已知)。當一個節點引入一個變化時,它會分支出去,並開始將變化傳播到其他節點(這部分或多或少是隨機的)。

有一些變化,我們稱之爲單調這在git比喻中意味着分支可以平分合並。這些更改只是在接收到其他節點時纔會合併,然後他們會將合併提交傳播給其他人,最終所有內容都會穩定下來(HEAD指向相同的內容)。 (非單調)。這個過程就是節點首先發送一個建議:「我想做這個不重要的變化C」。這是必要的,因爲其他節點需要知道這個未決的「複雜」變化並準備好自己。這是在節點之間傳播,直到每個人都收到它。現在我們處於「每個人都知道有人提出做出改變C」的狀態,但這還不夠,因爲沒有人真正意識到還有協議。

因此存在另一個「輪」,其中節點開始傳播信息「I,節點Y,意識到已經提出改變C的事實」。最終,一個或多個節點意識到存在協議(這或多或少是分佈式確認協議)。所以現在的狀態是「至少有一個節點知道每個節點都知道改變C已經被提出」。這是(部分)我們稱之爲匯合。此時,知道該協議的節點(或多個節點)將進行合併並將其傳播。

請注意,我高度簡化的解釋在這裏,顯然是魔鬼(和縮放)在細節:)

+0

如何將節點分散的環境意識到其他節點?我認爲他們必須意識到他們正在與之通信的節點。在一個集中的環境中,我會想象節點向「中心」查詢隨機節點「地址」,然後用它來發送消息。這是如何在分散的集羣中發生的? –

+0

種子節點+八卦。請閱讀http://doc.akka.io/docs/akka/snapshot/common/cluster.html。 – sourcedelica