2011-04-12 69 views
3

我想弄清楚我是否在正確的軌道上。我正在構建(實時)統計/分析服務,並使用redis來存儲一些集合和散列。一致性哈希作爲一種縮放寫入的方式

現在讓我們假設我有一些成功,我需要擴大。哈希環技術看起來不錯,但我有一個印象,它只適用於緩存場景。

如果一個節點出現故障會怎麼樣?理論上,其密鑰現在由其他節點擁有。實際上,他們不會有這些數據。它丟失了,對吧?與添加/刪除節點相同。

我錯過了一些基本的東西嗎?這可能是一個窮人的集羣嗎?

回答

5

有兩個原因使用多個節點在一個集羣:

  • 拆分以限制存儲在每個節點上
  • 複製來減少讀負載,並允許一個節點的數據量沒有數據要被去除失利。

這兩者基本上是不同的,但是您可以同時實現 - 使用一致的散列指向具有標準主/從設置而不是單個節點的一組節點。

如果羣集是您的主數據存儲而不是緩存,則需要使用不同的重新分配策略,其中包括複製數據。

我的實現基於讓客戶端爲散列選擇64k桶中的一個,並具有將該桶映射到節點的表。最初,所有映射到節點#1。

當節點#1變得太大時,它的從節點成爲主節點#2,並且更新表以將節點#1鍵的一半映射到節點#2。此時,所有讀寫操作都將與新映射一起工作,您只需清理現在位於錯誤節點上的密鑰。根據性能要求,您可以一次檢查所有密鑰,或隨着期滿系統的檢查隨機選擇一個密鑰。

+0

這很聰明!感謝您的洞察力:-) – 2011-04-13 14:46:01