分布式和集群的區別,一致性hash演算法

2021-10-22 22:52:38 字數 1767 閱讀 3535

說一下我今天的學習心得。

首先是關於分布式和集群的區別。什麼是分布式呢:分布式就是將乙個系統拆分成多個子系統,比如我們網購系統,假設我們下訂單,它可以拆分成乙個訂單系統和乙個使用者系統,這就是對系統進行乙個拆分。而集群是指多個例項的執行,很多例項在一起執行,集群可以是相同的系統通過複製的方式進行多個部署,從而減輕單一伺服器壓力。所以說分布式一定是集群,因為執行了多個系統的例項;而集群不一定是分布式,因為可能乙個集群很多個例項都是相同系統複製出來的結果。

說一下第二個知識點。第二個知識點是關於一致性hash演算法。hash演算法應用很廣泛,例如md5,sha等加密演算法,在資料儲存以及查詢方面都應用了hash表。hash演算法最多應用的地方就是資料儲存和查詢領域,因為hash演算法的查詢速度非常快,如果數字按規律排序,我們甚至可以不用遍歷一遍資料集即可找到我們所需要的結果。普通的順序查詢法我們是通過遍歷陣列,乙個乙個找來完成的。效率非常低。我們在此之上提出了一種新的二分查詢法,二分查詢法通過折半查詢,這樣的效率更高。但是我們有沒有一種方法一次就可以查詢到我們需要的值呢?答案是有的。比如我們定義乙個陣列的長度等於我們要存入數字的最大的值,這樣我們查詢數的時候只需要查詢這個數的下標就可以看對應位置有無存值,即可實現一次查詢。但是這種查詢方式的缺點是會浪費記憶體,因為如果數字非常少,但是數字非常大,利用這種方法就比較消耗儲存記憶體。在此基礎上我們可以定義乙個小的陣列。通過對資料進行求模的運算,完成儲存。不過這種儲存方式也會有乙個缺點,那就是如果兩個數的求模以後數值相同,這樣將兩個相同的值存到乙個位址裡,會導致hash衝突。在此基礎上,我們可以將陣列裡面每個位址存放一條鏈路,這樣的話我們找到這個位址以後,通過鏈路一級一級往下找,就能很高效的查詢到最後的結果了。

hash演算法應⽤場景

hash演算法在分布式集群架構中的應⽤場景

hash演算法在很多分布式集群產品中都有應⽤,⽐如分布式集群架構redis、hadoop、elasticsearch,

mysql分庫分表,nginx負載均衡等

主要的應⽤場景歸納起來兩個

請求的負載均衡(⽐如nginx的ip_hash策略)

nginx的ip_hash策略可以在客戶端ip不變的情況下,將其發出的請求始終路由到同⼀個⽬標服務

器上,實現會話粘滯,避免處理session共享問題

如果沒有ip_hash策略,那麼如何實現會話粘滯?

可以維護⼀張對映表,儲存客戶端ip或者sessionid與具體⽬標伺服器的對映關係

缺點1)那麼,在客戶端很多的情況下,對映表⾮常⼤,浪費記憶體空間

2)客戶端上下線,⽬標伺服器上下線,都會導致重新維護對映表,對映表維護成本很⼤

如果使⽤雜湊演算法,事情就簡單很多,我們可以對ip位址或者sessionid進⾏計算雜湊值,雜湊值與服務

器數量進⾏取模運算,得到的值就是當前請求應該被路由到的伺服器編號,如此,同⼀個客戶端ip傳送

過來的請求就可以路由到同⼀個⽬標伺服器,實現會話粘滯。

分布式儲存

以分布式記憶體資料庫redis為例,集群中有redis1,redis2,redis3 三颱redis伺服器

那麼,在進⾏資料儲存時,資料儲存到哪個伺服器當中呢?針對key進⾏hash處理

hash(key1)%3=index, 使⽤餘數index鎖定儲存的具體伺服器節點

今天先記錄到這裡,每天記一點知識點,通過積少成多的方式,慢慢我也可以記錄好多筆記,加油!

分布式一致性

分布式一致性是指在分布式環境中對某個副本資料進行更新操作時,必須確保其他副本也會更新,避免不同副本資料不一致。分布式系統乙個重要的問題時解決資料複製,一是為了增加系統的可用性防止單點故障,二是提高系統可用性,通過負載聚恆,使分布在不同位置的資料副本能夠提供服務。理想狀態下,當然希望分布式系統能夠實現...

分布式一致性

分布式系統的乙個重要問題是資料的複製。對資料的複製一般有兩個原因 資料複製的主要難題是保持各個副本的一致性。即在更新乙個副本時,必須確保同時更新其他的副本,否則資料的各個副本將不再相同。一致性模型實質上是程序和資料儲存之間的乙個約定。正常情況下,乙個資料項上執行讀操作時,它期待該操作返回的是該資料在...

分布式一致性方案

首先,先說一下。老外提出了乙個快取更新套路,名為 cache aside pattern 其中就指出 不是的。假設這會有兩個請求,乙個請求a做查詢操作,乙個請求b做更新操作,那麼會有如下情形產生 快取剛好失效 請求a查詢資料庫,得乙個舊值 請求b將新值寫入資料庫 請求b刪除快取 請求a將查到的舊值寫...