redis cluster集羣架構詳解(八)-redis cluster設計目標

redis 具備Cluster功能後,Redis從一個單純的NoSQL內存數據庫變成了分佈式NoSQL數據庫,CAP模型也從CP變成了AP。也就是說,通過自動分片和冗餘數據,Redis具有了真正的分佈式能力。某個結點掛了,因爲數據在其他結點上有備份,所以其他結點可以繼續提供服務,保證了Availability。然而,也正因爲這一點,Redis無法保證曾經的強一致性了。這也是CAP理論要求的,三者只能取其二。

5.1. redis cluster設計目標

在官方文檔Cluster Spec中,作者詳細介紹了Redis集羣爲什麼要設計成現在的樣子。最核心的目標有三個:

1、性能:這是Redis賴以生存的看家本領,增加集羣功能後當然不能對性能產生太大影響,所以Redis採取了P2P,而非Proxy方式,客戶端重定向,異步複製,即Master與slave之間使用異步replication,且不存在操作的merge(即操作不能跨多個nodes,不存在merge層)等設計。犧牲了部分的一致性。
2、水平擴展:集羣的最重要能力當然是擴展,redis cluster 文檔描述可以線性擴展到1000結點。
3、數據一致性:一定程度上保證writes的安全性,需要客戶端容忍一定程度的數據丟失。集羣將會儘可能(best-effort)保存客戶端write操作的數據;通常在failover期間,會有短暫時間內的數據丟失(因爲異步replication引起);當客戶端與少數派的節點處於網絡分區時(network partition),丟失數據的可能性會更高。(因爲節點有效性檢測、failover需要更長的時間)。

4、可用性

(1)具備監控和自動Failover能力:在Cluster推出之前,可用性要靠Sentinel保證。有了集羣之後也自動具有了Sentinel的監控和自動Failover能力。

(2)將slaves的分佈在整個集羣相對平衡。:“replicas migration”可以將那些擁有多個slaves的master的某個slave,遷移到沒有slave的master下,即將slaves的分佈在整個集羣相對平衡,盡力確保每個master都有一定數量的slave備份。

(3)高可用:只要集羣中大多數master可達、且失效的master至少有一個slave可達時,集羣都可以繼續提供服務。

Redis Cluster功能特點如下:

1、節點自動發現:所有的節點相互連接。

2、集羣消息通信通過集羣總線通信,集羣總線端口大小爲客戶端服務端口+10000,這個10000是固定值。

3、節點與節點之間通過二進制協議進行通信。

4、客戶端和集羣節點之間通信和通常一樣,通過文本協議進行。

5、集羣節點不會代理查詢。

6、數據按照Slot存儲分佈在多個Redis實例上。

7、集羣節點掛掉會自動故障轉移。

8、可以相對平滑擴/縮容節點。
9、Cluster不能進行跨Nodes操作,也沒有nodes提供merge層代理。

10、Redis集羣並不支持處理多個keys的命令,因爲這需要在不同的節點間移動數據,從而達不到像Redis那樣的性能,在高負載的情況下可能會導致不可預料的錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章