經常使用分庫算法的介紹與分析

水平分庫的算法應當保證:算法

一、平衡性(Balance): 平衡性是指哈希的結果可以儘量分佈到全部的節點中去、這樣可使得全部的存儲節點都能獲得利用。數據庫

二、單調性(Monotonicity):單調性是指若是已經有一些內容經過哈希分派到了相應的節點上,在新的節點加入到系統中時,算法可以保證原有已分配的內容能夠被映射到原有的或者新的節點上去,而不會映射到舊節點中的其餘節點上。負載均衡

1、取模哈希分佈式

       平衡字段%模數來獲取數據存儲節點:spa

        如:oid%2 = 0爲0庫,oid%2 = 1爲1庫設計

  • 優勢:簡單、數據均衡、負載均衡。
  • 缺點:擴容困難,要遷移數據,模數改變時,對原有儲存節點上的數據影響較大。

2、 一致性哈希中間件

        一致性哈希算法早在1997年由麻省理工學院提出的一種分佈式哈希實現算法,設計目標是爲了解決因特網中的熱點(Hot spot)問題。對象

         大致思想也十分簡單:將存儲對象和存儲節點分別利用經常使用的hash算法將其映射到一個桶空間(能夠想象成一個閉合的環形或者環形隊列)中,而後將存儲對象存儲到通空間中按順時針方向最近的存儲節點上去。隊列

        當有節點出現故障被刪除時,那麼原有映射到故障節點上的對象,將會存儲到故障節點的下一個節點中去(至於原存儲到故障節點中的數據,可利用備庫或者其餘手段將數據遷移到新映射的節點上去)。ci

        新節點加入到系統中時,按照桶空間順時針的原則將會有部分存儲對象映射存儲到上面,新增節點動做只會影響到系統中的一個存儲節點,也就是在加入新節點前,原對象映射到的存儲節點,系統中其餘的存儲節點並不會受到影響。

  •  優勢:簡單、數據均衡、擴容簡單。
  •  缺點:負載不均衡,解決不了熱點數據問題。

3、一致性哈希 + 虛擬節點

    其實仍是一致性哈希,只不過映射到桶空間中的存儲節點多了(部分節點是機器節點虛擬出來的),採用這種方式能夠進一步下降數據存儲的粒度,從而減小對某個被影響節點的數據遷移工做,提升存儲系統的健壯性。

             

4、取模哈希+虛擬節點

    進過前面的介紹,取模哈希+虛擬節點應該不難理解了,就是將傳統取模哈希中的模數變爲虛擬後的節點數,而不是真實的機器數,這裏須要維護一個虛擬節點和實際存儲實例的對應關係。

    在減小或增長存儲實例時,只要相應的調整存儲實例和機器節點的映射關係就好,不會影響到存儲系統中與需調整的虛擬機點沒有關係的其餘節點。

    網易的數據庫中間件DDB就是這麼作的。

  •  優勢:擴容簡單、數據均衡、負載均衡。
  •  缺點:歡迎評論區留言討論。

 

 

 

 

 

博客處女篇,寫的不到位的地方,還請見諒,真誠歡迎您提出寶貴建議~

相關文章
相關標籤/搜索