日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一致性哈希简单介绍

發(fā)布時(shí)間:2025/4/16 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一致性哈希简单介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一致性哈希簡單介紹

  • ?Consistent Hashing 算法早在 1997 年就在論文《Consistent hashing and random trees》中被提出,提出了在動(dòng)態(tài)變化的Cache環(huán)境中,哈希算法應(yīng)該滿足的4個(gè)適應(yīng)條件:
  • 平衡性(Balance)
  • 單調(diào)性(Monotonicity)
  • 分散性(Spread)
  • 負(fù)載(Load)
  • ?

    一致性哈希原理

    一致性哈希將key用hash函數(shù)進(jìn)行映射,映射出來的所有點(diǎn)能夠分布到一個(gè)圓環(huán)內(nèi),實(shí)際上consistent hashing 是一種 hash 算法, 在改變映射內(nèi)容的大小時(shí),而不需要改變hash算法,且能夠盡可能小的改變已存在 key 映射關(guān)系,盡可能的滿足單調(diào)性的要求。。這里我要講述一種特殊的一致性哈希——分布式一致性哈希(Distributed Consistent Hashing):
    普通的一致性哈希

    • 分布式一致性哈希(DCH)滿足節(jié)點(diǎn)的對稱分布,普通的一致性哈希表現(xiàn)如圖1:



    • 3個(gè)節(jié)點(diǎn)平均分布在圓環(huán)上,每個(gè)節(jié)點(diǎn)之間的角度為120°,此時(shí),只要hash函數(shù)夠均勻,那么每個(gè)節(jié)點(diǎn)所命中的概率則都是一樣的。
    • 如果再增加一個(gè)節(jié)點(diǎn),普通的一致性哈希認(rèn)為無論在那個(gè)節(jié)點(diǎn)之間增加新的節(jié)點(diǎn),那么與新的節(jié)點(diǎn)非相鄰的節(jié)點(diǎn)盡量保持不變,這樣保證一致性哈希的單調(diào)性,如圖 2:

    • 新的節(jié)點(diǎn)4(n4)自由分配到節(jié)點(diǎn)2(n2)和節(jié)點(diǎn)3(n3)之間,那么原來的key的映射范圍k3變成了新的k3和k4,插入時(shí),新的k3將著落在節(jié)點(diǎn) 4(n4)上;新的k4將著落在節(jié)點(diǎn)3上(n3)。為了節(jié)點(diǎn)的老數(shù)據(jù)不丟失,我們還需要將節(jié)點(diǎn)3上的屬于k3范圍的數(shù)據(jù)遷移到新的節(jié)點(diǎn)4(n4)上,并定期刪除節(jié)點(diǎn)3(n3)的冗余數(shù)據(jù)(一致性哈希的分散性),這樣在查詢時(shí),不會(huì)有命中不到的情況。雖然保證了一致性哈希的單調(diào)性,但是這樣的方式不能保證節(jié)點(diǎn)的負(fù)載均衡,畢竟大部分的查詢會(huì)著落在節(jié)點(diǎn)1(n1)和節(jié)點(diǎn)2(n2)上。
    • 如果減少節(jié)點(diǎn),普通的一致性哈希情況如圖3:

    • 節(jié)點(diǎn)3(n3)因?yàn)槟撤N原因不能進(jìn)行映射,那么圓環(huán)上只剩下2個(gè)節(jié)點(diǎn)(n1、n2),這樣原來k1和k3合并成新的k1,即所有的負(fù)載全部著落在節(jié)點(diǎn) 1(n1)上,同新增加節(jié)點(diǎn)一樣,雖然保證了單調(diào)性,但是明顯不能保證負(fù)載均衡。

      ?

    分布式一致性哈希

    ?

    • 分布式一致性哈希(DCH)只是在普通的的一致性哈希算法進(jìn)行的一點(diǎn)改進(jìn)。同樣DCH是將key映射到一個(gè)圓環(huán)中,與普通一致性哈希不同的是,節(jié)點(diǎn)增加了虛擬的節(jié)點(diǎn);包括實(shí)節(jié)點(diǎn)對之對應(yīng)的虛節(jié)點(diǎn)不是按照連續(xù)的弧度范圍進(jìn)行劃分,而是定義一個(gè)最小的弧度單位(最好能夠被圓整分),在這個(gè)最小的弧度單位里面均勻放置所有的節(jié)點(diǎn),如圖4:

    • 上圖實(shí)線部分表示實(shí)節(jié)點(diǎn),虛線部分表示虛節(jié)點(diǎn)。
    • 當(dāng)增加新節(jié)點(diǎn)或刪除節(jié)點(diǎn)的時(shí)候,保證最小弧度單位不變化,每個(gè)節(jié)點(diǎn)分別控制插入和數(shù)據(jù)遷移的大小,如圖5所示:

    • 當(dāng)新增加節(jié)點(diǎn)時(shí)

    最小弧度中數(shù)據(jù)遷移大小=最小弧度/節(jié)點(diǎn)數(shù)
    總共數(shù)據(jù)遷移量=最小弧度中數(shù)據(jù)遷移大小*360/最小弧度=360/節(jié)點(diǎn)數(shù)

    • 與傳統(tǒng)一致性哈希比較,遷移數(shù)據(jù)從1點(diǎn)節(jié)點(diǎn)開始增加,那么遷移的數(shù)據(jù)弧度比例分別為:

    傳統(tǒng)一致性哈希(2分法):1/2+1/4+1/4+1/8+1/8+1/8+1/8+...
    DCH:1/2+1/3+1/4+1/5+1/6+1/7+1/8...

    • 很明顯,傳統(tǒng)一致性哈希遷移數(shù)據(jù)量少,但是負(fù)載集中在某幾個(gè)節(jié)點(diǎn)上;而DCH則主要體現(xiàn)在遷移數(shù)據(jù)會(huì)利用各個(gè)節(jié)點(diǎn)的資源達(dá)到均衡,查詢時(shí)也會(huì)比傳統(tǒng)一致性哈希更均勻些。
    • 當(dāng)刪除節(jié)點(diǎn)時(shí),并無數(shù)據(jù)遷移;

    總結(jié)

    • 對于在分布式的環(huán)境中來說,數(shù)據(jù)的訪問負(fù)載均衡更加重要,所以采用DCH的類似架構(gòu)可能比數(shù)據(jù)遷移更加重要,比如memcache當(dāng)中就采用了虛擬節(jié)點(diǎn)方式去達(dá)到負(fù)載均衡的目的。
    • 對于數(shù)據(jù)遷移來說,普通的一致性哈希針對的是某兩個(gè)節(jié)點(diǎn)的數(shù)據(jù)遷移,而DCH針對的是一個(gè)分布式的環(huán)境,在數(shù)據(jù)量特別大的時(shí)候,DCH方式將數(shù)據(jù)遷移的壓力分散到各個(gè)節(jié)點(diǎn),而不是集中在某些節(jié)點(diǎn)上。

    總結(jié)

    以上是生活随笔為你收集整理的一致性哈希简单介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。