本文來自網易雲社區html
做者:孫建良web
在分佈式存儲系統 中說明了,在必定狀況下,copyset的數量不是越多越好,在恢復時間肯定的狀況下,找到合適的copyset的數量能夠下降數據丟失的機率。算法
在分佈式存儲系統可靠性系列文章分佈式存儲系統可靠性-設計模式一文中也總結道:設計模式
爲了提升存儲系統數據可靠性,首先在系統容許的成本範圍內選擇合適的副本數,再次在系統設計中咱們首先優先考慮加快數據恢復時間,在此基礎上減少系統的copyset數量。使得在既定的成本下達到儘量高的可靠性。服務器
其實在業界也已經有團隊在這方面有過實踐和經營總結。《Copysets: Reducing the Frequency of Data Loss in Cloud Storage》,這篇paper是斯坦福大學的學生在facebook HDFS集羣上做實驗,爲了有效下降數據丟失機率,數據放置算法,從原來的Random Replicaiton更改成copyset Replication 算法,實驗結果說明能夠將FaceBook HDFS集羣1%節點故障時的數據丟失機率從22.8%下降道0.78%dom
Motivation: 下降數據丟失機率分佈式
Innovation: 減小copyset數量能夠下降數據丟失機率ide
Implementation: copyset Replicationoop
Evaluation: 在Facebook HDFS集羣1%節點故障時,22.8% to 0.78%大數據
如下總結分析3種較爲典型的副本分佈策略,即 Random Replication、Randon Relication With Failure Domain、CopySet Replication,並簡單分析這些策略狀況下的數據丟失機率。
如上爲典型的副本隨機放置策略,1個大文件分爲不少chunk(或稱爲block),chunk的大小好比64M, chunk的放置並無什麼限制,每一個chunk數據的放置基本是按照隨機策略進行,固然也可能會考慮容量的均衡,可是基本上是屬於一種隨機策略。
在R副本,節點數爲N的集羣中:
集羣放置方式(即最大copyset數量) K = C(N, R)
R個節點故障:C(N, R)
R個節點故障時,丟數據機率:Min(K, #chunk) / C(N, R) = 1
若是chunk不少,機率接近於1
如上這種機架感知的副本放置策略狀況下,主要的設計緣由爲保障數據可用性,在一個機架端點或者故障狀況下,還有其餘機架上的數據仍是可用的。如圖中所述,放置策略爲:
一個副本放置在本節點
第二個副本放置在remote Rack的 節點上
第三個副本放置哎remote Rack 的另一個節點上
若是還有其餘副本,其餘副本隨機放置
在R副本,節點數爲N,故障域數量爲N的集羣中:
集羣放置方式(即最大copyset數量):K = C(Z, 2) C(N/Z, 1) C(N/Z, R-3)
R個節點故障:C(N, R)
R個節點故障時,丟數據機率:Min(K,#chunk) / C(N, R)
從上面2中放置策略能夠基本得出較爲單一的結論:
放置方式越多,數據越分散,發生R節點故障時,數據丟失機率越大。
固然並非說放置方式越少越好,最小的方式直接組織磁盤爲RAID 0 mirror 方式,可是這種狀況下數據恢復時間較長,從而會進一步加大數據丟失機率。
這裏先不討論,恢復時間和數據分散 在什麼樣子的搭配狀況下會獲得最優的狀況。只探討在固定恢復時間狀況下,如何有效控制數據打散程度,獲得最好的可靠性。
恢復速度與scatter width成正相關,所謂scatter width:
scatter width: 一塊盤上的數據所對應的副本數據會打散到其餘盤上,所謂scatter,就是全部這些副本數據所對應的盤的數量。scatter width 越大,參與進行數據恢復的節點越多,恢復速度越快,因此固定恢復速度狀況下,是能夠算出究竟須要多大的scatter width。
scatter width 肯定狀況下,如何副本放置算法如何確保磁盤的scatter width?
接下來就是輪到CopySet Replication 算法出場了。
其實算法原理很節點,看下下面這張圖就成,算法根據系統節點數,和副本數量,進行多個輪次的計算,每一輪次把全部節點按照副本數劃分爲 N/R 個copyset。每次確保其中的copyset 不與當前和以前全部輪次中已經產生的copyset相同,最後數據寫入的時候,選擇一個copyset 寫入便可。 因爲每一個排列會吧S(Scatter Width) 增長R-1,因此 算法執行P = S/(R-1) 次, K(CopySet數量) = P (N/R) = S/(R-1) (N/R)
顯然相比前兩種策略,CopySet Replication在保障恢復時間的基礎上可以獲得最佳的數據分佈策略。
另外在隨機放置狀況下,其實若是使用小文件合併成大文件的存儲策略,能夠經過控制大文件的大小,從而控制每一個磁盤上大文件的數量,好比100G一個文件,8T盤上的最大文件存儲數量也就是8T/100G = 80個文件,顯然也就是可以很好的控制一個數據盤的數據打散程度,可是相對而言CopySet Replication 更多的是一種較爲通用的算法,而這種算法更多的是適用於特定構架的分佈式存儲系統,即小文件合併成大文件。
《Copysets: Reducing the Frequency of Data Loss in Cloud Storage》
https://www.slideshare.net/sawjd/aziksa-hadoop-architecture-santosh-jha
雲硬盤是網易雲提供的數據持久化服務,爲雲服務器和容器服務提供彈性塊存儲設備。
網易雲免費體驗館,0成本體驗20+款雲產品!
更多網易研發、產品、運營經驗分享請訪問網易雲社區。
相關文章:
【推薦】 試水新的Angular4 HTTP API
【推薦】 如何從「點子」落地到「執行」?—完整解析1個手遊傳播類mini項目的進化