分布式快取出於如下考慮,首先是快取本身的水平線性擴充套件問題,其次是快取大併發下的本身的效能問題,再次避免快取的單點故障問題(多副本和副本一致性)。分布式快取的核心技術包括首先是記憶體本身的管理問題,包括了記憶體的分配,管理和**機制。其次是分布式管理和分布式演算法,其次是快取鍵值管理和路由。
一、常用分布式演算法
memcached在實現分布集群部署時,memcached服務端的之間是沒有通訊的,服務端是偽分布式,實現分布式是由客戶端實現的,客戶端實現了分布式演算法把資料儲存到不同的memcached 服務端。
1.取模
currserver = serverlist[ hash(key) % sizeof(serverlist) ]
餘數計算的方法簡單,資料的分散性也相當優秀,但也有其缺點。那就是當新增或移除伺服器時,快取重組的代價相當巨大。新增伺服器後,餘數就會產生巨變,這樣就無法獲取與儲存時相同的伺服器,從而影響快取的命中。
2.一致性hash
原理,首先求出memcached 伺服器(節點)的雜湊值,並將其配置到0~232的圓(continuum)上。然後用同樣的方法求出儲存資料的鍵的雜湊值,並對映到圓上。然後從資料對映到的位置開始順時針查詢,將資料儲存到找到的第乙個伺服器上。如果超過232 仍然找不到伺服器,就會儲存到第一台memcached 。
關於一致性hash演算法詳解,請參考:
餘數分布式演算法由於儲存鍵的伺服器會發生巨大變化,而影響快取的命中率,但consistent hashing中,只有在continuum上增加伺服器的地點逆時針方向的第一台伺服器上的鍵會受到影響,最大限度地抑制了鍵的重新分布。
二、多副本、故障轉移
memcached對容錯不做處理的,也就是說當memcached 服務端掛掉或者 memcached 重啟復活,由於memcached重啟後無資料,對高併發的大型系統中,是沒辦法接受的,我們在集群的情況下,要做到負載均衡和容錯 ,這種情況下, 伺服器端掛掉,負載就不那麼均衡,快取資料也會丟失 ,重新對資料庫進行操作,加大的系統的效能, 資料丟失容錯也沒做得那麼好。 memcache自身並沒有實現集群功能,如果想用memcahce實現集群需要借助第三方軟體或者自己設計程式設計實現,如repcached、memagent、 memcached-ha等。
注:memcached集群中節點機需要實現時間同步。
Memcache 分布式高可用集群介紹
分布式快取需考慮如下三點 1 快取本身的水平線性擴充套件的問題。2 快取大病罰下的本身效能問題。3 避免快取的單點鼓掌問題。分布式快取存在的問題 1 記憶體本身的管理問題。記憶體的分配,管理和 機制。2 分布式管理和分布式演算法。3 快取鍵值管理和路由。memcached在實現分布集群部署時,mem...
Memcache 分布式高可用集群介紹
分布式快取需考慮如下三點 1 快取本身的水平線性擴充套件的問題。2 快取大病罰下的本身效能問題。3 避免快取的單點鼓掌問題。分布式快取存在的問題 1 記憶體本身的管理問題。記憶體的分配,管理和 機制。2 分布式管理和分布式演算法。3 快取鍵值管理和路由。memcached在實現分布集群部署時,mem...
分布式架構 高可用
本文將通過自建架構圖 進行講解 如圖採用了分布式 微服務架構,將傳統系統進行重構後的效果 微服務架構體系對多個層面進行探索 分析和優化,本文不在詳細闡述 微服務 分布式架構根據公司 企業需求定製化構造而來,目的細化模組間的呼叫,鏈路更加清晰明了,不同環節高可用方案不同,優化手段也存在差異。分析思考 ...