常規情況下,我們一般使用多副本技術來提高儲存系統的可靠性,無論是結構化資料庫儲存 (如典型的 mysql)、文件型 nosql 資料庫儲存 (mongodb ) 或者是常規的 blob 儲存系統 (gfs、hadoop) 等,無不如此。
因為資料幾乎可以稱得上是企業生命力的核心,保障資料儲存系統的可靠性對於任何企業來說都不是一件小事。
資料丟失與 copyset(複製組)
「在由 999 塊磁碟組成的 3 副本儲存系統中,同時壞三塊盤的情況下資料丟失的概率是多大? 」,這個跟儲存系統的設計息息相關,我們先考慮兩個極端設計下的情況。
設計一:把 999 塊磁碟組成 333 塊磁碟對。
在這種設計下,只有選中其中乙個磁碟對才會發生資料丟失。
這種設計中,丟失資料的概率為 333/c(999,3) = 5.025095326058336*e-07。
設計二:資料隨機打散到 999 塊盤中。
極端情況下,隨機一塊盤上的邏輯資料的副本資料打散在所有集群中的 998 塊盤中。這種設計下,丟失資料的概率為 c(999,3)/c(999,3)=1,也就是必然存在。
copyset:包含乙個資料的所有副本資料的裝置組合,比如乙份資料寫入 1,2,3 三塊盤,那麼 就是乙個複製組。
9 個磁碟的集群中,最小情況下的 copyset 的組合數為 3,copysets = 、、,即乙份資料的寫入只能選擇其中乙個複製組,那麼只有 、 或者 同時壞的情況下才會出現資料丟失。即最小 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)
磁碟故障與儲存系統可靠性估算
1. 磁碟故障與柏松分布
在正式估算相關概率之前還需要科普乙個基礎的概率學分布:柏松分布。柏松分布主要描述在乙個系統中隨機事件發生的概率,譬如描述汽車站台候客人數為某個值的概率,某個醫院 1 小時內出生 n 個新生兒的概率等等,對泊松分布做的更為形象的介紹可參閱阮一峰的《泊松分布和指數分布: 10 分鐘教程》。
如上為泊松分布的公式。其中,p 表示概率,n 表示某種函式關係,t 表示時間,n 表示數量,λ 表示事件的頻率。
舉個例子:1000 塊磁碟在 1 年內出現 10 塊故障的概率為 p (n(365) = 10) [注:t 的平均單位為天]。λ 為 1000 塊磁碟 1 天內發生故障磁碟的數量,按照 google 的統計,年故障率在 8%,那麼 λ = 10008%/365 。
如上只是損壞 n 塊磁碟概率的統計,那麼怎麼利用這個公式計算分布式系統中資料可靠性 (即資料丟失概率) 的近似值呢?
2. 分布式儲存系統中丟失率的估算
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]
2.2 分布式系統衡量年故障率
以上我們假設在一年中,不對任何硬體故障做恢復措施,那麼 t 用一年代入即可算出此種系統狀態下的年故障率。但是在大規模儲存系統中,資料丟失情況下往往會啟動恢復程式,恢復完了之後理論上又算是從初始狀態的隨機事件,加入這個因素之後計算可靠性會變得比較複雜。
理論上大規模儲存系統中壞盤、恢復是極其複雜的連續事件,這裡我們把這個概率模型簡化為不同個單位時間 t 內的離散事件來進行統計計算。只要兩個 t 之間連續事件發生的概率極小,並且 t 時間內絕大部份壞盤情況能夠恢復,那麼下個時間 t 就是重新從新的狀態開始,則這種估算能夠保證近似正確性。t 的單位定義為小時,那麼 1 年可以劃分為 365*24/t 個時間段,那麼系統的年故障率可以理解為 100% 減去所有單位 t 時間內都不發生故障的概率。
即系統整體丟失資料的概率為:
pc = 1 – (1-pb(t))*(36524/t)
分布式儲存系統可靠性如何估算?
本文由網易雲 發布常規情況下,我們一般使用多副本技術來提高儲存系統的可靠性,無論是結構化資料庫儲存 如典型的 mysql 文件型 nosql 資料庫儲存 mongodb 或者是常規的 blob 儲存系統 gfs hadoop 等,無不如此。因為資料幾乎可以稱得上是企業生命力的核心,保障資料儲存系統的...
分布式儲存系統可靠性如何估算?
本文由 網易雲 發布。常規情況下,我們一般使用多副本技術來提高儲存系統的可靠性,無論是結構化資料庫儲存 如典型的 mysql 文件型 nosql 資料庫儲存 mongodb 或者是常規的 blob 儲存系統 gfs hadoop 等,無不如此。因為資料幾乎可以稱得上是企業生命力的核心,保障資料儲存系...
分布式儲存系統可靠性系列一 如何估算
常規情況下,我們一般使用多幅本技術來提高儲存系統的可靠性,不論是結構化資料庫儲存 典型mysql 文件型nosql資料庫儲存 mongodb 或者是常規的blob儲存系統 gfs hadoop 等。資料幾乎是企業的生命所在,那麼如何去衡量較為正確得去衡量集群資料的可靠性?如何進行系統設計使得集群資料...