本文由 網易雲 發佈。html
原標題:分佈式存儲系統可靠性-如何估算數據庫
做者:孫建良,網易雲對象存儲負責人分佈式
常規狀況下,咱們通常使用多副本技術來提升存儲系統的可靠性,不管是結構化數據庫存儲(典型的如MySQL)、文檔型NoSQL數據庫存儲(MongoDB)或者是常規的Blob存儲系統(GFS、Hadoop)等。函數
數據幾乎是企業的生命所在,如何較爲正確地衡量集羣數據的可靠性,如何進行系統設計使得集羣數據達到更高的可靠性,這是本文要解答的疑問。oop
「在999塊磁盤3備份系統中,同時壞三塊盤狀況下的數據丟失機率?」,這個跟存儲系統的設計息息相關。咱們先考慮兩個極端設計下的狀況google
設計一:把999塊磁盤組層333塊磁盤對。spa
在這種設計狀況下,只有選中其中一個磁盤對纔會發生數據丟失。這種設計中,丟失數據的機率爲 333/C(999,3) = 5.025095326058336*e-07。設計
設計二:數據隨機打散到999盤中,極端狀況下,隨機一塊盤上的邏輯數據的副本數據打散在在全部集羣中的998塊盤中。 這種設計中,丟失數據的機率爲 C(999,3)/C(999,3)=1,也就是必然存在。code
經過這兩種極端的栗子,咱們能夠看到數據的丟失機率跟數據的打散程度息息相關,爲了方便後續閱讀,這裏咱們引入一個新的概念copyset(複製組)。htm
CopySet:包含一個數據的全部副本數據的設備組合,好比一份數據寫入1,2,3三塊盤,那麼{1,2,3}就是一個複製組。
9個磁盤的集羣中,最小狀況下的copyset的組合數爲3,copysets = {1,2,3}、{4,5,6}、{7,8,9},即一份數據的寫入只能選擇其中一個複製組,那麼只有 {1,2,3}、{4,5,6}或者{7,8,9} 同時壞的狀況下才會出現數據丟失。即最小copyset數量爲N/R。
系統中最大的copyset的數目爲 C(N,R) ,其中R爲副本數,N爲磁盤的數量。在徹底隨機選擇節點寫入副本數據的狀況下,系統中的copyset數目會達到最大值C(N,R)。即任意選擇R個磁盤都會發生一部分數據的三個副本都在這R個盤上。
磁盤數量N,副本爲R的存儲系統中,copyset數量S, N/R < S < C(N, R)
3.1 磁盤故障與泊松分佈
在正式估算機率以前還須要科普下一個基礎的機率學分佈:泊松分佈。泊松分佈主要描述在一個系統中隨機事件發生的機率,譬如汽車站臺的候客人數的機率,某個醫院1個小時內出生N個新生兒的機率等等,更形象的可參見 阮一峯的《泊松分佈和指數分佈:10分鐘教程》)。
如上爲泊松分佈的公式。等號的左邊,P 表示機率,N表示某種函數關係,t 表示時間,n 表示數量,λ 表示事件的頻率。
舉個例子:1000塊磁盤在1年內出現10塊機率爲P(N(365) = 10)[注:t的平均單位爲天]。λ 爲1000塊磁盤1天內發生故障磁盤的數量,按照Google的統計,年故障率在8%,那麼 λ = 1000*8%/365 。
如上只是損壞N塊磁盤的機率統計,那麼怎麼利用這個信息計算分佈式系統中數據的可靠性(即數據丟失機率)的近似估算。
3.2 分佈式存儲系統中的丟失率估算
3.2.1 T時間內故障率
分佈式存儲存儲系統中如何進行年故障率估算,咱們先假定一種狀況,T(1年時間內),系統存滿數據的狀況下,壞盤不處理。這種狀況下統計下數據的年故障率。
這裏咱們先定義一些數據
N:磁盤數量
T:統計時間
K:壞盤數量
S: 系統中copyset數量(複製組的個數)
R:備份數量
如何計算T(1年)時間內數據丟失的機率,從機率統計角度來講就是把T(1年)時間內全部可能出現數據丟失的事件所有考慮進去。包含N個磁盤R副本冗餘的系統中,在T時間內可能出現數據丟失數據的事件爲壞盤大於等於R的事件,即R,R+1,R+2,… N (即爲 K∈[R,N] 區間全部的時間),這些隨機事件發生時,什麼狀況下會形成數據丟失?沒錯就是命中複製組的狀況。
K個損壞狀況下(隨機選擇K個盤狀況下)命中複製組的機率爲
p = X/C(N,K) 其中X爲隨機選擇K個磁盤過程當中命中複製組的組合數。
那麼系統出現K個磁盤損壞形成數據丟失的機率爲
Pa(T,K) = p * P(N(T)=K)
最後系統中T時間內出現數據丟失的機率爲全部可能出現數據丟失的事件的機率加起來。
Pb(T) = Σ Pa(T,K) ; K∈[R,N]
3.2.2 分佈式系統衡量年故障率
以上咱們假設在一年中,不對任何硬件故障作恢復措施,那麼t用一年代入便可算出此種系統狀態下的年故障率。可是在大規模存儲系統中,數據丟失狀況下每每會啓動恢復程序,恢復完了以後理論上又是從初始狀態的隨機事件,加入這個因素以後計算可靠性會變得比較複雜。
理論上大規模存儲系統中壞盤、恢復是極其複雜的連續事件,這裏咱們把這個機率模型簡化爲不一樣個單位時間T內的離散事件進行統計計算。只要兩個T之間連續事件的發生機率極小,而且T時間內絕大部份壞盤狀況可以恢復在T時間內恢復,那麼下個時間T能就是從新重新的狀態開始,則這種估算可以保證近似正確性。T的單位定義爲小時(即),那麼1年能夠劃分爲365/24/T個時間段,那麼系統的年故障率能夠理解爲100%減去全部單位T時間內都不發生故障的機率。
即系統總體丟失數據的機率爲:
Pc = 1 - (1-Pb(T))**(365*24/T)
瞭解 網易雲 :
網易雲官網:https://www.163yun.com/
新用戶大禮包:https://www.163yun.com/gift
網易雲社區:https://sq.163yun.com/