NoSQL數(shù)據(jù)庫的分布式模型
單一服務(wù)器
在一個服務(wù)器完全能夠勝任工作時就沒必要考慮分布式,這樣部署簡單,維護(hù)也方便很多;
分片
特點
數(shù)據(jù)的各個部分存放在集群的不同服務(wù)器中;
比如按字母來劃分:以a-g開頭的鍵值都存放到***臺服務(wù)器上,以h-n開頭的存放到第二臺...
需要考慮的問題
-
如何存放數(shù)據(jù),讓用戶基本上只需從一臺服務(wù)器上獲取數(shù)據(jù)
如果經(jīng)常需要與多個結(jié)點交互才能取到需要數(shù)據(jù),可能分片策略不合適,或者該場景中分片不是一個理想的方案; -
數(shù)據(jù)節(jié)點的分布:地理位置與訪問用戶的關(guān)系
數(shù)據(jù)結(jié)點分布在全球各地,讓北京的用戶只需要訪問北京的結(jié)點就能取到所需數(shù)據(jù); -
保持負(fù)載均衡
優(yōu)點
-
同時提升讀取和寫入性能
由于分片是將數(shù)據(jù)分散到多個結(jié)點存儲,這樣在寫入時,壓力同樣分散; -
橫向擴展寫入能力
缺點
降低數(shù)據(jù)庫的錯誤恢復(fù)能力
分片后,集群中結(jié)點的故障將導(dǎo)致部分?jǐn)?shù)據(jù)丟失;
解決方案:每個分片數(shù)據(jù)不只存放在一個結(jié)點上,冗余存放,增加數(shù)據(jù)安全性(通過后面講到的與主從復(fù)制的結(jié)合使用,是常用的手段)
主從復(fù)制
特點
主節(jié)點存放權(quán)威數(shù)據(jù),負(fù)責(zé)數(shù)據(jù)更新操作;
主節(jié)點將更新的數(shù)據(jù)復(fù)制到從節(jié)點;
優(yōu)點
-
有助于提升數(shù)據(jù)讀取性能
從結(jié)點只負(fù)責(zé)查詢,增加從結(jié)點提升數(shù)據(jù)讀取性能 -
增強“讀取操作的故障恢復(fù)能力”
主節(jié)點損壞,依然可處理讀取請求;
從結(jié)點升級為主結(jié)點后可以處理更新請求; -
“一拖一” 即時備份的單存儲方案
即使不需要分布式部署,主從復(fù)制也可以用來做為單機服務(wù)器備份的部署方案;
缺點
-
數(shù)據(jù)的不一致性(未及時更新)
主節(jié)點更新后,同步到各個從結(jié)點的數(shù)據(jù)不能保證及時,可能導(dǎo)致各個結(jié)點上查詢的數(shù)據(jù)不一致(只具有最終一致性) -
對提升寫入操作性能幫助不大
所有的更新操作都通過主結(jié)點處理,對于更新頻繁的業(yè)務(wù),使用主從復(fù)制模型優(yōu)勢不大; -
主節(jié)點是系統(tǒng)的瓶頸和弱點
對等復(fù)制
特點
所有節(jié)點地位相同,都可接收查詢和寫入請求;
各節(jié)點將自己的更新的數(shù)據(jù)復(fù)制到其他節(jié)點;
優(yōu)點
-
從容處理出錯節(jié)點,不必?fù)?dān)心數(shù)據(jù)請求的丟失
-
增加節(jié)點,輕易提升查詢和寫入性能
缺點
-
數(shù)據(jù)不一致性
寫入和讀取都有可能發(fā)生沖突;
結(jié)合使用
分片和主從復(fù)制中的一拖一方案結(jié)合使用;
分片的作用在于數(shù)據(jù)的分布式存儲;主從復(fù)制的作用在于為各個分片結(jié)點提供備份,增加數(shù)據(jù)安全;
注:新浪Redis集群的部署使用的是這種方案,關(guān)于新浪redis的使用詳見大CC之前的博客:
Redis 在新浪微博中的應(yīng)用
附思維導(dǎo)圖
參考
《NoSQL精粹》