Redis集群的一點理解


一、集群與分布式的區別 (摘自某乎)

分布式:一個業務分拆多個子業務,部署在不同的服務器上

集群:同一個業務,部署在多個服務器上

二、集群技術 Cluster (摘自百度百科)

集群是一組相互獨立的、通過高速網絡互聯的計算機,它們構成了一個組,並以單一系統的模式加以管理。一個客戶與集群相互作用時,集群像是一個獨立的服務器。集群配置是用於提高可用性和可縮放性。

1 提高性能 -- 其實就是負載均衡的好處

2 降低成本 -- 其實單位性能性價比

3 提高可擴展性 -- 可以隨時增加和去掉節點

4.增強可靠性 -- 高可用

三、典型的兩種集群 (摘自百度百科)

負載均衡集群 --- 擴展性

高可用性集群 --- 高可用

四、集群需要解決的問題,及Redis集群的處理 (摘自某篇文章)

負載失衡 負載均衡算法策略

網絡包溢出 溢出可能發生在主控平衡器,也可能是在各服務節點

這兩個問題,其實是一個問題。因負載失衡,會更容易導致某節點的網絡包溢出。

Redis為了解決這種問題,使用了直連的方法,不需要中間proxy層.客戶端不需要連接集群所有節點,連接集群中任何一個可用節點即可。

可用性保證 多節點,每個節點均存在主備雙機。

Redis每個節點推薦使用主備節點。若某一節點的主備節點均失效,不影響其他節點的正常運行。若節點的失效數量超過整個集群的節點數量的一半,也就是說至少有一半的訪問無法正常處理時,才判定整個集群失效。

(因為是過半選舉,那么節點數量最好為奇數)

存儲一致性 多節點共享數據,如何保證一致性,特別是redis這種本身作為數據存儲的服務

實際上每個key的內容存儲在固定的節點上,不同的節點在提供訪問時,均會從存儲節點那獲取信息,這樣保證了存儲的一致性。

這樣意味着每個節點均需要獲取其他節點的數據。因此redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬.

所有的物理節點映射到[0-16383]slot上,cluster 負責維護node<->slot<->value

Redis 集群中內置了 16384 個哈希槽,當需要在 Redis 集群中放置一個 key-value 時,redis 先對 key 使用 crc16 算法算出一個結果,然后把結果對 16384 求余數,這樣每個 key 都會對應一個編號在 0-16383 之間的哈希槽,redis 會根據節點數量大致均等的將哈希槽映射到不同的節點

五、總結:Redis集群實際上是 負載均衡集群和高可用集群的集合。

多個節點分擔訪問和計算壓力

每個節點的主備雙機,保證高可用

注意: Redis集群並不提供單機的完整功能,如一個命令獲取多個key。這很好理解,畢竟每個key分布的節點是很有可能不一樣的。如果一次性獲取多個key,也就意味着一個節點,需要同時獲取多個節點的數據。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM