虛擬化技術淺析 什么是虛擬化技術

    前言
    在"一文讓你徹底明白什么是一致性哈希"該文中 , 我們已經了解到了什么是一致性哈希及其的若干問題 。 還不了解的或者需要溫習的請戳以下鏈接進行回味 。
    文中最后留下了兩個小問題 , 最后的兩個小問題將在以下進行詳細美妙的回答 。
2.問題回顧
問題1:hash函數是在大樣本的情況下才會均勻 , 如果現在機器比較少的情況下 , hash后機器的位置分布不均勻怎么辦?
虛擬化技術淺析 什么是虛擬化技術

文章插圖

    問題2:即使剛開始機器分布很均勻 , 但是加機器后也會導致不均勻的情況 。
虛擬化技術淺析 什么是虛擬化技術

文章插圖

虛擬化技術淺析 什么是虛擬化技術

文章插圖

    如果問題不明白的話 , 還是請戳“一文讓你徹底明白什么是一致性哈?!边@篇文章 。
3.解決方案
    上述問題1提到 , 如果機器很少的話 , 他們經過hash之后落在環有可能形成不均勻的情況 , 會造成負載不均衡的情況 , 即:
虛擬化技術淺析 什么是虛擬化技術

文章插圖

    因為hash函數必須在足夠大的樣本里 , hash之后的分布才會顯得均勻 , 因此針對問題1 , 我們引入虛擬節點的概念 , 例如 , 有三臺物理機 , 分別是m-1、m-2和m-3 , 假設虛擬節點個數為1000.
將m-1虛擬化m-1-1、m-1-2、m-1-3...... m-1-1000
m-2虛擬化m-2-1、m-2-2、m-2-3.....m-2-1000
m-3虛擬化m-3-1、m-3-2、m-3-3.....m-3-1000 ,
    然后設置一張物理機和虛擬機的對應表 , 目的是為了找到可以通過物理機找到對應的虛擬機 , 通過虛擬機找到相對應的物理機 , 如下 。
虛擬化技術淺析 什么是虛擬化技術

文章插圖

虛擬化技術淺析 什么是虛擬化技術

文章插圖

    那這樣的話 , 通過每臺真實的物理機虛擬化后的節點 , 經過hash , 映射到環上 , 注意 , 是虛擬節點去搶環上的點 , 又因為每臺物理機都有等量的虛擬節點 , 故它們在環上的分布可以看作是比較均勻的 。
    當數據來的時候 , 同樣是按照數據找到其在環上的位置 , 然后通過順時針法則找到離它最近的虛擬節點 , 然后將該數據存到該虛擬節點所對應的物理機上(通過虛擬節點-物理機對應表尋找) 。
虛擬化技術淺析 什么是虛擬化技術

文章插圖

    如圖 , 環上的節點均為虛擬節點 , 為簡單起見 , 假設每臺物理機只有3個虛擬節點 , 那當數據經過hash后映射到環上是上圖的位置時 , 順時針找到離它最近的m-1-1 , 然后通過“虛擬節點-物理機”映射表找到m-1-1對應的m-1物理機進行存儲 。
4.加、減機器的數據遷移
    同樣的 , 如果新增一臺m4機器 , 將它虛擬化成等量的虛擬節點 , 然后分布在環上 。 簡單起見 , 每個物理機只有3個虛擬節點 , 實際上是虛擬化成很多很多的 , 例如上文提到的1000個虛擬節點 。
    所以 , 原本圖中綠色的數據屬于m-1中的m-1-1部分的 , 但是現在中間多了個m-4-1 , 因此 , 按順時針法則 , 灰色部分的數據從m-1上的m-1-1虛擬節點轉移到m-4上的m-4-1節點 。 同樣滿足虛擬節點均勻分布(即說明每臺物理機都負載均衡)和數據遷移代價低的條件 。
5.哈希沖突
【虛擬化技術淺析 什么是虛擬化技術】    哈希沖突問題 , 即兩個虛擬節點在環上發生沖突了 , 目前的解決方案是兩個虛擬節點分別對應的兩個真實物理機都存同樣一份數據 。 另外沖突的概率是很小的 , 是個小概率事件 , 比如環上的哈希值范圍為0~2^64 , 即環上總共可以有2^64個點 , 但是虛擬節點數目遠比這個總數要小 , 所以發生沖突的可能性比較低 , 因此可采用以上策略進行解決 。

    推薦閱讀