分佈式存儲系統關鍵問題

(一)關鍵問題node

  • 數據分佈

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

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

取模直接哈希:
將不一樣哈希值的數據分佈到不一樣的服務器上

1

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

問題:增長、減小服務器時的大量數據遷移負載均衡

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

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

2

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

優勢: 節點增長/刪除時只會影響到在hash環中相鄰的節點,而對其餘節點沒影響。性能

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

虛擬節點:
將哈希取模的模數取得很大,就會獲得更多的哈希值,這個哈希值成爲邏輯節點,一個物理機器能夠根據本身的能力選擇若干個邏輯節點的存儲節點。

3

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

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

表格上的數據按照主鍵總體有序索引

  • 負載均衡

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

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

若是運行過程當中有新機器的加入,致使每一個機器的存儲數據量不一樣,須要可以自動發現,並自動進行調整。可是在調整的過程當中也要控制好速度,以避免對業務產生影響。

  • 複製&多備份

1)最大保護模式

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

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

2)最大性能模式

異步複製模式:主庫執行成功即返回

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

3)最大可用性模式

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

  • 數據一致性

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

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

  • 容錯

1)故障檢測

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

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

2)故障恢復

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

datanode:永久故障,增長備份

  • 可擴展性

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

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

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

2)同構系統

存儲節點分爲若干組,每一個組內的節點服務徹底相同的數據

3)異構系統

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

相關文章
相關標籤/搜索