哈希競猜游戲前端開發(fā)邏輯
哈希是通過壓縮數(shù)據(jù)來提高效率的解決方案。然而,由于哈希函數(shù)的有限性和數(shù)據(jù)量的增加,哈希沖突已成為精確數(shù)據(jù)壓縮的難題
算法原理
一致性哈希算法由麻省理工學(xué)院于1997年提出。這是一種特定的哈希算法。刪除或添加服務(wù)器時(shí),它可以盡可能少地改變現(xiàn)有服務(wù)請求與請求處理服務(wù)器之間的映射關(guān)系
一致性哈希解決了分布式哈希表(DHT)之中直觀哈希算法的動(dòng)態(tài)伸縮問題
一致性哈希算法本質(zhì)之上也是一種模塊化算法

然而,與上述基于服務(wù)器數(shù)量的模塊有所不同,一致性哈希是將固定值2^32
IPv4地址模塊化,由4組8位二進(jìn)制數(shù)組成,因此,2^32可以確保每個(gè)IP地址都有唯一的映射
哈希環(huán)
我們可以將這2^32個(gè)值抽象化為一個(gè)環(huán)環(huán)正下方的點(diǎn)表示順時(shí)針排列的0,依此類推:1、2、3。。。直到2^32-1。由32個(gè)點(diǎn)到2的冪組成的環(huán)統(tǒng)稱為哈希環(huán)
服務(wù)器映射到哈希環(huán)
映射服務(wù)器時(shí),使用哈希(服務(wù)器IP)%2^32,即:
服務(wù)器IP地址用于哈希計(jì)算,哈希結(jié)果用于?;?^32。結(jié)果必須是0到2^32-1間的整數(shù)
哈希環(huán)之上此整數(shù)映射的位置表示一個(gè)服務(wù)器,該服務(wù)器依次將node0、node1和node2緩存服務(wù)器映射到哈希環(huán)
對象密鑰映射到服務(wù)器
將相應(yīng)密鑰映射到特定服務(wù)器時(shí),需要首先計(jì)算金鑰的哈希值:哈希(key)%2^32
注意:此處的哈希函數(shù)可能有所不同于計(jì)算服務(wù)器映射到哈希環(huán)的函數(shù)。只要值范圍與哈希環(huán)的值范圍相近(即2^32)
將密鑰映射到服務(wù)器遵循下列邏輯:
從緩存對象密鑰的位置開始,逆時(shí)針方向遇到的第一個(gè)服務(wù)器就是當(dāng)前對象將緩存到的服務(wù)器
假設(shè)我們有“semlinker”、“kakuqo”、“Lolo”和“fer”,它們縮寫為O1,O2、O3和O4分別

數(shù)據(jù)傾斜和服務(wù)器性能均衡問題
導(dǎo)致問題
在上述示例之中,每個(gè)服務(wù)器幾乎均勻分布到哈希環(huán)
但是,在具體場景之中,很容易選擇一個(gè)哈希函數(shù)將所有服務(wù)器理想地散列到哈希環(huán)之上
此時(shí),當(dāng)服務(wù)器節(jié)點(diǎn)數(shù)太難時(shí),由于節(jié)點(diǎn)分布不均勻,很難造成數(shù)據(jù)傾斜
在添加CS4服務(wù)器時(shí),CS4只分擔(dān)CS1服務(wù)器的負(fù)載,CS2和CS3服務(wù)器并沒有因?yàn)樘砑恿薈S4服務(wù)器而降低負(fù)載壓力;如果CS4服務(wù)器的性能與原來的服務(wù)器相同甚至更低,那么這個(gè)結(jié)果就不是我們所期望的
虛擬節(jié)點(diǎn)
為了解決上述問題,我們可以引入虛擬節(jié)點(diǎn)來解決負(fù)載不均衡的問題:
也就是說,將每個(gè)物理服務(wù)器虛擬化為一組虛擬服務(wù)器,虛擬服務(wù)器被放置在哈希環(huán)之上。如果要確定對象的服務(wù)器,需要首先確定對象的虛擬服務(wù)器,然后虛擬服務(wù)器確定物理服務(wù)器

使用場景
一致性哈希應(yīng)該是分布式系統(tǒng)之中負(fù)載均衡的首選算法。它可以在客戶端和下方件之上敏捷實(shí)現(xiàn)。例如,日常緩存之中常見的memcached和redis集群可以使用它
memcached集群是特定的。嚴(yán)格來說,它只能被視為一個(gè)偽集群,因?yàn)樗姆?wù)器不能相互通信。請求的分發(fā)路由全然取決于客戶端來計(jì)算緩存對象應(yīng)該位于哪個(gè)服務(wù)器之上,其路由算法使用一致性哈希
redis集群之中還有哈希槽的概念。雖然實(shí)現(xiàn)方式有所不同,但想法總是相近的。閱讀本文之中的一致性哈希后,您將更難理解redis slot
一致性哈希算法的實(shí)現(xiàn)
接下來,我們根據(jù)上述描述使用golang實(shí)現(xiàn)一致性哈希算法。該算法具有下列特點(diǎn):
相同哈希的核心算法
支持自定義哈希算法
支持自定義虛擬節(jié)點(diǎn)數(shù);
掃描二維碼推送至手機(jī)訪問。
版權(quán)聲明:本文由財(cái)神資訊-領(lǐng)先的體育資訊互動(dòng)媒體轉(zhuǎn)載發(fā)布,如需刪除請聯(lián)系。