(一)關鍵問題node
對於存儲系統,最重要的問題就是數據分佈,即什麼樣的數據放置在什麼樣的節點上。數據分佈時須要考慮數據是否均衡、之後是否容易擴容等一系列問題。不一樣的數據分佈方式也存在不一樣的優缺點,須要根據自身數據特色進行選擇。緩存
關鍵:找出一個散列特性很好的哈希函數服務器
問題:增長、減小服務器時的大量數據遷移負載均衡
解決:1)將<哈希值,服務器>元數據存儲在元數據服務器中;2)一致性哈希異步
關鍵:哈希值變成了一個範圍,每一個物理節點上存儲的數據是哈希值處於前一段範圍的數據。函數
優勢: 節點增長/刪除時只會影響到在hash環中相鄰的節點,而對其餘節點沒影響。性能
維護每臺機器在哈希環中的位置方式:1) 記錄它前一個&後一個節點的位置信息,每次查找可能遍歷整個哈希環全部服務器;2) O(logN)位置信息,查找的時間複雜度爲O(logN);3) 每臺服務器維護整個集羣中全部服務器的位置信息,查找服務器的時間複雜度爲O(1)cdn
優勢:將傳統哈希的一(物理節點)對一(哈希值)的分佈變成了一(物理節點)對多(哈希值)的分佈。能夠根據物理節點的能力調整數據的分佈。blog
表格上的數據按照主鍵總體有序索引
1)數據寫入時,寫入節點的選擇(空間容量?CPU負載?)
2)運行過程當中,數據的遷移
若是運行過程當中有新機器的加入,致使每一個機器的存儲數據量不一樣,須要可以自動發現,並自動進行調整。可是在調整的過程當中也要控制好速度,以避免對業務產生影響。
1)最大保護模式
強同步複製:至少在一個備庫上執行成功
至少成功存儲2個備份,才返回成功。
2)最大性能模式
異步複製模式:主庫執行成功即返回
只要成功存儲1個備份,就返回成功。
3)最大可用性模式
兩種模式折衷:正常狀況是最大保護模式,出現故障時變成最大性能模式
版本號:在收到寫入數據請求時,生成對應版本號。
刪除老的版本號;讀取時,保證讀取到的是最新的版本號的數據;寫入時,保證寫入數據的版本號要新與存儲的。
心跳:S每隔一段時間向C發送一個心跳包
租約機制:帶有超時時間的受權
master:主備機制,持久化索引
datanode:永久故障,增長備份
不是瓶頸:捨棄小文件的處理,數據的讀寫控制權下放到工做機,經過客戶端緩存元數據減小對總控節點的訪問
內存成爲瓶頸:採用兩級結構,在總控機與工做機之間加一層元數據節點
存儲節點分爲若干組,每一個組內的節點服務徹底相同的數據
將數據劃分爲大小接近的分片,每一個分片的多個副本分佈到集羣中的任何一個存儲節點,某個節點發生故障,原有的服務將由整個集羣而不是某幾個固定的存儲節點來恢復