2012-07-26 53 views
0

我有一個分佈式系統設計問題。問題摘要是建立新的服務領導者並通知領導

我們有很多客戶來服務。該服務需要容錯,因此它會有很多副本。當客戶端不能再訪問服務時,它將切換到副本並通知所有的 其他客戶端將切換到相同的副本。 (這不是 接受負載平衡整個副本的副本數據 值是不完全一樣的,但所有的客戶端必須在任何時候都返回 相同的數據值。)

我當前的設計就是讓客戶在未能獲得服務時尋求新的服務領導者。當一個新的服務領導者成立時,它會通知所有的客戶使用它。

與許多分佈式協調設計一樣,我需要一個分佈式組管理器。我正在考慮在解決方案中使用JGroups和/或Apache Zookeeper。

是否有一個現有的食譜或食譜,我應該看看解決這個問題?

回答

1

如果您控制的服務,然後讓服務之間做一個leader election。客戶將觀察當選領導者的變化,並向當前服務領導發送請求。

如果你不控制服務,那麼讓客戶選擇一個領導者,並且該客戶端將負責維護指向當前領導者服務的zookeeper中的節點。所有客戶端都將觀察此節點,以通知主節點是哪個節點的變化。領導者客戶必須能夠以某種方式檢查領導者服務的健康狀況。

但是所有客戶必須在任何時候

這是不可能返回與飼養員,或在大多數分佈式系統相同的數據值。這將需要一些時間(通常只有毫秒),以使服務領導者的變化傳播到所有節點。