目錄
講解分佈式數據存儲的核心算法,數據分佈的算法
hash算法
-> 一致性hash算法
(memcached) -> redis cluster hash slot算法
用不同的算法,就決定了在多個master節點的時候,數據如何分佈到這些節點上去,解決這個問題
redis cluster介紹
redis cluster
- 自動將數據進行分片,每個master上放一部分數據
- 提供內置的高可用支持,部分master不可用時,還是可以繼續工作的
- 在
redis cluster
架構下,每個redis要放開兩個端口號,比如一個是6379
,另外一個就是加10000的端口號,比如16379
16379
端口號是用來進行節點間通信的,也就是cluster bus -- 集羣總線
。
cluster bus通信,用來進行故障檢測,配置更新,故障轉移授權
cluster bus
用了另外一種二進制的協議,主要用於節點間進行高效的數據交換,佔用更少的網絡帶寬和處理時間
三大數據分佈算法
最老土的hash算法和弊端(大量緩存重建)
一致性hash算法(自動緩存遷移)+虛擬節點(自動負載均衡)
熱點問題–虛擬節點負載均衡
redis cluster的hash slot算法
redis cluster
有固定的16384
個hash slot,對每個key計算CRC16
值,然後對16384取模
,可以獲取key對應的hash slot
redis cluster
中每個master都會持有部分slot,比如有3個master,那麼可能每個master持有5000多個hash slothash slot
讓node的增加和移除很簡單,增加一個master,就將其他master的hash slot移動部分過去,減少一個master,就將它的hash slot移動到其他master上去- 移動hash slot的成本是非常低的
- 客戶端的api,可以對指定的數據,讓他們走同一個hash slot,通過
hash tag
來實現