2015-03-25 32 views
4

我正在構建具有非結構化對等覆蓋的分佈式系統。該系統中可能有數千個節點。節點可以動態加入系統(如洪流客戶端)。在系統中,每個節點都想要估計系統中節點的數量(猜測近似值)。獲取分佈式系統中的節點數量

我目前使用中央服務器來計算節點數量。每個節點都與此服務器通信。這是非常低效的並且違反了分佈式行爲。

有沒有辦法以分佈式的方式做到這一點,而不使用中央服務器?

回答

3

如果您只需估計系統中的節點數,並且希望將該計數分佈到羣集中而不是將其存儲在數據庫中,那麼八卦協議是一種輕量且高效的方法服務器之間的狀態類型。

http://en.m.wikipedia.org/wiki/Gossip_protocol

簡單閒話的實現是:週期性地在每個服務器中選擇一些隨機組的鄰居與之通信的。服務器只是發送這些鄰居的當前狀態(在這種情況下是集羣中節點的數量)。使八卦協議健全的屬性是信息傳播像病毒。

您可以根據此方法進行擴展,並使用某種邏輯時鐘(如Lamport時鐘或vector clock)通過對更新進行基本版本化來處理衝突解決方案。例如,如果節點A從版本爲10的節點B接收到服務器計數,並且稍後從版本爲8的節點C接收計數,則節點A將簡單地忽略來自節點C的更新,因爲其狀態是在先前的邏輯時間比節點B的時間。通過防止具有羣集的「過時」視圖的服務器覆蓋來自更多「最新」服務器的更新,這可以提高服務器計數的一致性。

此外,你甚至可以使用八卦協議來執行更強大的故障檢測。例如,如果從羣集某個部分的角度看網絡分區,則可能會出現服務器已經死亡或者可能剛剛離開羣集的情況。不要依賴不可靠的網絡,您可以使用八卦協議通過閒談關於哪些服務器嘗試聯繫可疑服務器的信息來從多個點探測服務器。然後,只有當達到故障閾值時,服務器纔會被認爲是死機。

+0

謝謝。這給了一些提示.. – 2015-03-27 09:08:23