1. 程式人生 > >分布式存儲系統關鍵問題

分布式存儲系統關鍵問題

每次 成功 客戶 需要 amp ash 容易 版本號 情況

(一)關鍵問題

  • 數據分布

對於存儲系統,最重要的問題就是數據分布,即什麽樣的數據放置在什麽樣的節點上。數據分布時需要考慮數據是否均衡、以後是否容易擴容等一系列問題。不同的數據分布方式也存在不同的優缺點,需要根據自身數據特點進行選擇。

1)哈希分布 => 隨機讀取

取模直接哈希:將不同哈希值的數據分布到不同的服務器上

技術分享圖片

關鍵:找出一個散列特性很好的哈希函數

問題:增加、減少服務器時的大量數據遷移

解決:1)將<哈希值,服務器>元數據存儲在元數據服務器中;2)一致性哈希

一致性哈希: 給系統每個節點分配一個隨機token,這些token構成一個hash環。執行數據存放操作時,先計算key的hash值,然後存放到順時針方向第一個大於或者等於該hash值的token所在節點。

技術分享圖片

關鍵:哈希值變成了一個範圍,每個物理節點上存儲的數據是哈希值處於前一段範圍的數據。

優點: 節點增加/刪除時只會影響到在hash環中相鄰的節點,而對其他節點沒影響。

維護每臺機器在哈希環中的位置方式:1) 記錄它前一個&後一個節點的位置信息,每次查找可能遍歷整個哈希環所有服務器;2) O(logN)位置信息,查找的時間復雜度為O(logN);3) 每臺服務器維護整個集群中所有服務器的位置信息,查×××器的時間復雜度為O(1)

虛擬節點:將哈希取模的模數取得很大,就會得到更多的哈希值,這個哈希值成為邏輯節點,一個物理機器可以根據自己的能力選擇若幹個邏輯節點的存儲節點。

技術分享圖片

優點:將傳統哈希的一(物理節點)對一(哈希值)的分布變成了一(物理節點)對多(哈希值)的分布。可以根據物理節點的能力調整數據的分布。

2)順序分布 => 順序掃描

表格上的數據按照主鍵整體有序

  • 負載均衡

1)數據寫入時,寫入節點的選擇(空間容量?CPU負載?)

2)運行過程中,數據的遷移

如果運行過程中有新機器的加入,導致每個機器的存儲數據量不同,需要能夠自動發現,並自動進行調整。但是在調整的過程中也要控制好速度,以免對業務產生影響。

  • 復制&多備份

1)最大保護模式

強同步復制:至少在一個備庫上執行成功

至少成功存儲2個備份,才返回成功。

2)最大性能模式

異步復制模式:主庫執行成功即返回

只要成功存儲1個備份,就返回成功。

3)最大可用性模式

兩種模式折衷:正常情況是最大保護模式,出現故障時變成最大性能模式

  • 數據一致性

版本號:在收到寫入數據請求時,生成對應版本號。

刪除老的版本號;讀取時,保證讀取到的是最新的版本號的數據;寫入時,保證寫入數據的版本號要新與存儲的。

  • 容錯

1)故障檢測

心跳:S每隔一段時間向C發送一個心跳包

租約機制:帶有超時時間的授權

2)故障恢復

master:主備機制,持久化索引

datanode:永久故障,增加備份

  • 可擴展性

1)總控節點是否成為瓶頸

不是瓶頸:舍棄小文件的處理,數據的讀寫控制權下放到工作機,通過客戶端緩存元數據減少對總控節點的訪問

內存成為瓶頸:采用兩級結構,在總控機與工作機之間加一層元數據節點

2)同構系統

存儲節點分為若幹組,每個組內的節點服務完全相同的數據

3)異構系統

將數據劃分為大小接近的分片,每個分片的多個副本分布到集群中的任何一個存儲節點,某個節點發生故障,原有的服務將由整個集群而不是某幾個固定的存儲節點來恢復

技術分享圖片


分布式存儲系統關鍵問題