一致性雜湊虛節點解決雪崩問題

2021-06-26 06:01:29 字數 1864 閱讀 3965

一致性雜湊的基本原理大家都知道,就是找乙個最近的節點或者順時針,逆時針找乙個節點,而不是通過模乙個n去找節點,這樣做的好處就是當其中一台磬機的時候,一致性雜湊還可以繼續工作,而模n的方法,所有定位在磬機節點上都會失敗。如下**是乙個簡單的一致性雜湊:

<?php

class

redis

public

function set($key, $value

)

public

function

ok()

}class

redisglobal

public

function set($key, $value

) }}}

}$global = new

redisglobal();

$global->addserver(new redis(1));

$global->addserver(new redis(2));

$global->addserver(new redis(3));

for ($i=0; $i

<10; $i++)

?>

//output

redis 3: set key 0

redis 2: set key 1

redis 3: set key 2

redis 1: set key 4

redis 3: set key 5

redis 1: set key 6

redis 1: set key 7

redis 3: set key 8

redis 1: set key 9

以上**基本ok,不過上面的**主要有三個問題,也是一致性雜湊基本思想存在的問題。面試中也經常考察乙個方案的弊端。

1.分布不均勻。

2.當一台磬機以後,磬機節點的所有請求會落到下一台主機,這樣就有可能使下一台主機也磬機,這就是雪崩問題。

3.不同主機處理能力不同如何配置量。

解決以上兩個問題,是通過配虛節點,也就是乙個主機對映n個節點,下面的例子中預設對映100個節點,處理能力較強的主機可以配200或者更高的虛節點數量。

<?php

class

redis

public

function set($key, $value

)

public

function

ok()

}class

redisglobal

}public

function set($key, $value

) }}}

}$global = new

redisglobal();

$global->addserver(new redis(1));

$global->addserver(new redis(2));

$global->addserver(new redis(3));

for ($i=0; $i

<10; $i++)

?>

//output

redis 1: set key 0

redis 1: set key 1

redis 3: set key 2

redis 1: set key 3

redis 2: set key 4

redis 1: set key 5

redis 2: set key 6

redis 2: set key 7

redis 3: set key 8

redis 1: set key 9

一致性雜湊

直接貼出一篇介紹的很清楚的博文。關鍵字一致性雜湊 平衡性,單調性,分散性,負載 其實說白了,就是解決把請求分散到不同的機器上運算,怎麼做分散的平均,機器少一台多一台,或者壞掉一台,成很好的自適應和拓展。最簡單的實現分布式演算法,取模嘛,但是它就上述的一些問題,所以不算好的雜湊函式。一致性雜湊演算法,...

一致性雜湊

from 學習分布式,一致性雜湊是最最基礎的知識,所以要理解好.那什麼是一致性雜湊呢?what 1.平衡性是指 hash的結果應該平均分配到各個節點,這樣從演算法上就解決了負載均衡問題.2.單調性是指 在新增或者刪減節點時,同乙個key訪問到的值總是一樣的.3.分散性是指 資料應該分散的存放在 分布...

一致性雜湊

一致性 雜湊演算法在1997年由 麻省理工學院提出 參見擴充套件閱讀 1 設計目標是為了解決網際網路中的熱點 hot spot 問題,初衷和 carp十分類似。一致性雜湊修正了carp使用的簡單雜湊演算法帶來的問題,使得dht可以在p2p環境中真正得到應用。雜湊演算法 編輯 一致性雜湊提出了在動態變...