分布式儲存與一致性雜湊

2021-10-10 00:18:40 字數 2476 閱讀 8668

如果我們需要儲存qq號與個人資訊,建立起假設qq有10億使用者,並且每個使用者的個人資訊佔據了100m,如果要儲存這些資料,所需要的空間就得(100億* 100m) = 10wt,這麼龐大的資料是不可能在單機環境下儲存的,只能採用分布式的方法,用多個機器進行儲存,但是即使使用多機,這些資料也至少要10w臺機器(假設每台伺服器存1t)才能儲存。

並且我們還需要考慮,如何將這10w臺機器與我們的資料建立起對映關係呢?換句話來說就是,我們如何確定哪些資料應該放在哪個機器呢?這時就需要用到雜湊演算法。

我們可以採用除留餘數法來完成乙個對映,key值為qq號,餘數為機器數量,得到的結果就是應該儲存的機器的編號。這樣我們將資料放入指定機器中,使用時再根據機器號進入對應的機器進行增刪查改即可。

機器號 =

hash

(qq號)

% 機器數量

但是這個方法存在著乙個致命的缺陷,隨著使用者量不斷增多或者使用者資訊增加,10w臺機器就會不夠用,此時就需要將機器擴容至15w臺。

當進行擴容後,由於機器數量發生變化,資料的對映關係也會變化,我們就需要進行rehash來將資料重新對映到正確的位置上。

但是問題來了,這10w臺機器的資料如果需要進行重新對映,花費的時間幾乎是不可想象的,我們不可能說為了遷移資料而讓伺服器宕機數月之久,所以這種方法是不可能行得通的。

為了彌補上一種方法的,就引入了一致性雜湊演算法。

上面一種方法的主要缺陷就是由於擴容後rehash帶來的資料大量遷移問題。

為了解決上述問題,一致性雜湊將雜湊構造成乙個0~2^32-1的環形結構,並將餘數從原來的機器數量修改值為整型最大值(也可以是比這個更大的)。因為這個資料足夠大,所以不需要考慮因為機器數增加導致的rehash問題。

機器號 =

hash

(qq號)%2

^32

我們將環中的某一區間去對映到某台伺服器,讓這台伺服器負責這個區間的管理,這樣就能讓這10w臺伺服器來切分這個閉環結構

當我們要查詢某個資料的時候,根據雜湊函式算出的對映位置來找到包含該位置的那個區間所對應的伺服器,然後在那個伺服器中進行操作即可

如果原先的伺服器不夠用了,此時增加5w個伺服器,也不需要像之前一樣對所有機器的資料進行遷移,我們只需要遷移負載重的機器即可

例如此時nodec中儲存了25000-50000的資料,此時往其中增加乙個新伺服器nodee,讓其負責對映閉環中25000-37500的資料。

此時我們需要做的就是將nodec中25000~37500的那一部分重新遷移到nodee上,並改變兩個伺服器的對映範圍,就完成了資料的遷移。從這裡我們可以看到,一致性雜湊將伺服器資料的整體遷移變成了高負載伺服器的部分遷移,大大提高了效率以及穩定性。

總結:一致性雜湊就是乙個大範圍的閉環,由於除數過大,我們也不需要因為由於除數增加導致全體rehash。並且對映關係變味了資料區間——機器,如果要增加機器,就只需要改變對映範圍,並將區間中的小部分資料進行遷移,大大的提高了效率。

但是,一致性雜湊也存在缺陷,就是在節點過少的時候可能會因為節點分布不均勻而導致資料傾斜問題。例如當前只有兩個伺服器

此時就會出現這種情況,部分節點資料過少,而部分節點資料過多,此時的資料大量集中在nodea上,資料大量傾斜。

既然節點較少,那就可以考慮在不增加伺服器的基礎上多增加幾個節點,所以為了解決這問題,一致性雜湊又引入了虛擬節點。對每個服務節點進行多次雜湊對映,每個對映的位置都會放置該服務節點,成為虛擬節點。例如上圖,就分別將nodea和nodeb分成了三個虛擬節點。我們不需要改變資料定位的演算法,只需要將虛擬節點與服務節點進行對映,將定位到虛擬節點nodex #1、#2、#3的節點再定位回服務節點即可。

通過這種方法就保證了即使服務節點少,也能做到相對均勻的資料分布

分布式與一致性雜湊

一致性雜湊演算法 一致性雜湊演算法主要用來解決分布式的問題。我們定義乙個圓環 0 2 32 1 我們根據一定的雜湊函式計算出資料的key然後利用hash結構儲存相應的val或這key val,如果 出現了hash衝突我們可以採用鏈位址法或者線性探測法加以解決,我們可以保證最大效率的 查詢到這個key...

分布式儲存和一致性雜湊

1 什麼是一致性雜湊 在動態變化的cache環境中,雜湊演算法應滿足4個適應條件 均衡性 雜湊的結果能夠盡可能分布到所有的快取中去 單調性 當緩衝區大小變化時一致性雜湊盡量保護已分配的內容不會被重新對映到新緩衝區 分散性 在分布式環境中,終端有可能看不到所有的緩衝,而是只能看到其中的一部分。當終端希...

分布式 一致性雜湊演算法

一致性雜湊演算法,作為分布式計算的資料分配參考,比傳統的取模,劃段都好很多 傳統雜湊取模,在資料需要遷移時代價巨大,因此需要優化。一致性雜湊 將雜湊值看作乙個環,順時針將雜湊值接近節點的物件存到對應節點,通過這種演算法做資料分布,在增減節點的時候,可以大大減少資料的遷移規模。此時,可能會出現乙個問題...