這種演算法非常的簡單,就是根據伺服器台數的餘數進行分散,求得整數值的hash值,再除以伺服器的台數,根據其餘數來選擇伺服器,將server的hash值與server的總台數進行求餘,即hash%n。
但是在這種演算法對快取命中率的影響下:
我們假設有8臺伺服器,執行中突然down了一台,則求餘的底數變成了7,那麼其產生的結果就完全變了
一般地,我們從數學上歸納之:
有n臺伺服器,變成了n-1臺伺服器,所以命中率在伺服器down的短期內,急劇下降至1/(n-1),所以伺服器越多,則down機的後果越嚴重
為了解決上述取模演算法遇到的問題,我們可以使用另一種分布式演算法,即一致性hash演算法,所謂的一致性hash演算法,就是把伺服器的各個節點放在鐘錶的各個時刻上,同時,我們也將要儲存的key也對映到鐘錶的某個時刻上,該key延鐘錶順時針走,碰到第乙個比他小的節點之後,則key就落在這台伺服器上
補充:利用crc32()函式可以將key值轉換成整數
當某個節點down後,只影響該節點順時針之後的1個節點,而其他節點不受影響
我們通過上圖看到,6號節點down後,所有的壓力都轉移到7號節點上,造成了7號節點伺服器的壓力特別的大,那我們考慮是否能夠將6號節點的壓力注意到其餘的節點上?
所以我們引入了虛擬節點的概念:
虛擬節點-n個真實節點,把每個真實節點對映成m個虛擬節點, 再把m*n個虛擬節點,雜湊在圓環上. 各真實節點對應的虛擬節點相互交錯分布,這樣某個真實節點down後,則把其影響平均分擔到其他所有節點上
基於scrapy redis的兩種分布式爬蟲
redis分布式部署 1.scrapy框架是否可以自己實現分布式?不可以。原因有二。其一 因為多台機器上部署的scrapy會各自擁有各自的排程器,這樣就使得多台機器無法分配start urls列表中的url。多台機器無法共享同乙個排程器 其二 多台機器爬取到的資料無法通過同乙個管道對資料進行統一的資...
分布式共享記憶體兩種實現方式
分布式共享記憶體 這裡,我們介紹兩種分布式共享記憶體,一種是分布式共享記憶體,另外一種是 分布式共享記憶體 簡單的分布式共享記憶體 所有的程序去訪問乙個共享記憶體,這個共享記憶體是虛擬的,他可能分布在不同的物理機上,其實可以理解為一種抽象,他整合了所有的儲存資源,然後所有的排程 分配 讀寫都對程式設...
分布式概念 分布式鎖(分布式互斥的一種實現方式)
分布式系統中,多個節點都需要訪問乙個臨界資源,但是同一時刻只能有乙個節點可以訪問,為了解決這個問題就是要通過分布式互斥來實現 分布式鎖就是實現分布式互斥的一種實現方式。鎖是實現多執行緒同時訪問同一共享資源,保證同一時刻只有乙個執行緒可訪問共享資源所做的一種標記。分布式鎖是指分布式環境下,系統部署在多...