海量數(shù)據(jù)分流處理-------一致性哈希算法

大學(xué)時(shí)期做移動(dòng)開發(fā)(ios),畢業(yè)后開始做大數(shù)據(jù)開發(fā),到現(xiàn)在也為止也做過不少工程項(xiàng)目,掌握了不少我只認(rèn)為是工具的東西,比如Hadoop中的HDFS、Mapreduce、Yarn、HBase、Hive、Sqoop、Flume、Mahout、Pig、Zookeeper等和Spark中的Spark SQL、Spark Streaming、MLlib等,越來越意識(shí)到算法在工程中的重要性,有了扎實(shí)的的算法基礎(chǔ),新的技術(shù),新的工具能夠很快的學(xué)會(huì)并且掌握,也是通往高級(jí)工程師的必經(jīng)之路。今天來說一說海量數(shù)據(jù)分流處理中的一種方法:一致性哈希算法。

海量數(shù)據(jù)分流處理(負(fù)載均衡)的幾種方法

一、傳統(tǒng)Hash方法

實(shí)際應(yīng)用:流量分發(fā)

1.png

這個(gè)算法的問題在于容錯(cuò)性和擴(kuò)展性不好。所謂容錯(cuò)性是指當(dāng)系統(tǒng)中某一個(gè)或幾個(gè)服務(wù)器變得不可用時(shí),整個(gè)系統(tǒng)是否可以正確高效運(yùn)行;而擴(kuò)展性是指當(dāng)加入新的服務(wù)器后,整個(gè)系統(tǒng)是否可以正確高效運(yùn)行。

現(xiàn)假設(shè)有一臺(tái)服務(wù)器宕機(jī)了,那么為了填補(bǔ)空缺,要將宕機(jī)的服務(wù)器從編號(hào)列表中移除,后面的服務(wù)器按順序前移一位并將其編號(hào)值減一,此時(shí)每個(gè)key就要按h = Hash(key) % (N-1)重新計(jì)算;同樣,如果新增了一臺(tái)服務(wù)器,雖然原有服務(wù)器編號(hào)不用改變,但是要按h = Hash(key) % (N+1)重新計(jì)算哈希值。因此系統(tǒng)中一旦有服務(wù)器變更,大量的key會(huì)被重定位到不同的服務(wù)器從而造成大量的緩存不命中。而這種情況在分布式系統(tǒng)中是非常糟糕的。

二、一致性Hash算法

假設(shè)某哈希函數(shù)H的值空間為0 - (2^32)-1(即哈希值是一個(gè)32位無符號(hào)整形),將各個(gè)服務(wù)器進(jìn)行一個(gè)哈希,具體可以選擇服務(wù)器的ip或主機(jī)名作為關(guān)鍵字進(jìn)行哈希,這樣每臺(tái)機(jī)器就能確定其在哈希環(huán)上的位置,這里假設(shè)將上文中三臺(tái)服務(wù)器使用ip地址哈希后在環(huán)空間的位置如下:


Snip20170814_48.png

將數(shù)據(jù)塊A、B、C、D的key使用相同的函數(shù)H計(jì)算出哈希值h,根據(jù)h確定此數(shù)據(jù)在環(huán)上的位置


Snip20170814_49.png

從各數(shù)據(jù)塊的位置沿環(huán)順時(shí)針“行走”,第一臺(tái)遇到的服務(wù)器就是其應(yīng)該定位到的服務(wù)器。
Snip20170814_50.png

可擴(kuò)展性分析:增加一個(gè)server4,D重新指向server4


Snip20170814_51.png

容錯(cuò)性分析:server1掛掉,A重新指向server2


Snip20170814_52.png

綜上所述,一致性哈希算法對(duì)于節(jié)點(diǎn)的增減都只需重定位環(huán)空間中的一小部分?jǐn)?shù)據(jù),具有較好的容錯(cuò)性和可擴(kuò)展性

思考:

一致性哈希算法在服務(wù)節(jié)點(diǎn)太少時(shí),容易因?yàn)楣?jié)點(diǎn)分部不均勻而造成數(shù)據(jù)傾斜問題,此時(shí)應(yīng)該怎么辦?有時(shí)間我們討論虛擬節(jié)點(diǎn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載:http://blog.codinglabs.org/articles/consistent-hashing...
    qf1007閱讀 793評(píng)論 0 3
  • Memcached是一個(gè)分布式的高性能內(nèi)存對(duì)象緩存系統(tǒng),可以緩存數(shù)據(jù),如果沒有它,就必須從數(shù)據(jù)庫中獲取數(shù)據(jù),加重?cái)?shù)...
    狼之足跡閱讀 2,717評(píng)論 0 1
  • 起源 一致性哈希算法在1997年由麻省理工學(xué)院提出的一種分布式哈希(DHT)實(shí)現(xiàn)算法,設(shè)計(jì)的目標(biāo)是為了解決因特網(wǎng)中...
    益初閱讀 458評(píng)論 0 1
  • 一致性哈希算法在1997年由麻省理工學(xué)院提出的一種分布式哈希(DHT)實(shí)現(xiàn)算法,設(shè)計(jì)目標(biāo)是為了解決因特網(wǎng)中的熱點(diǎn)(...
    技術(shù)學(xué)習(xí)閱讀 682評(píng)論 0 1
  • 初三 他對(duì)她說,我喜歡你,做我女朋友吧。她臉紅了。 高一 他的朋友揶揄的笑,你們都已經(jīng)這么長時(shí)間了,才帶出來讓我們...
    故人以南青衫薄閱讀 204評(píng)論 1 0

友情鏈接更多精彩內(nèi)容