分布式存儲系統(tǒng)可靠性:系統(tǒng)量化估算
一、引言
我們常常聽到衡量分布式存儲系統(tǒng)好壞的兩個指標:可用性和可靠性指標。
可用性指的是系統(tǒng)服務的可用性。一般按全年可用時間除以全年時間來衡量可用性的好壞,平常我們說的 SLA指標就是可用性指標,這里就不展開細說。
可靠性指標指的是數(shù)據(jù)的可靠性。我們常說的數(shù)據(jù)可靠性11個9,在對象存儲中就意味著存儲一千億個對象大概會有1個文件是不可讀的。由此可見,數(shù)據(jù)可靠性指標給分布式存儲系統(tǒng)帶來的挑戰(zhàn)不言而喻。
本文就重點來分析一下分布式系統(tǒng)的數(shù)據(jù)可靠性的量化模型。
二、背景
數(shù)據(jù)的重要性不必多說,基本上數(shù)據(jù)可以稱得上是企業(yè)生命力的核心,是企業(yè)賴以生存的根本。因此數(shù)據(jù)的可靠性是基礎的基礎,任何數(shù)據(jù)的丟失都會給企業(yè)造成無法計算和彌補的損失。
隨著數(shù)據(jù)規(guī)模的日益增大,環(huán)境更加復雜,我們大體可以把威協(xié)數(shù)據(jù)可靠性的因素歸為幾大類:
-
硬件故障:主要是磁盤故障、還有網(wǎng)絡故障、服務器故障、IDC故障;
-
軟件隱患:內核BUG,軟件設計上的BUG等;
-
運維故障:人為誤操作。
其中,第1類的硬件故障中又以磁盤故障最為頻繁,壞盤對于從事分布式存儲運維的同學來說再正常不過了。
因此,我們接下來從磁盤故障這個維度來嘗試量化一下一個分布式系統(tǒng)的數(shù)據(jù)可靠性。
三、數(shù)據(jù)可靠性量化
為了提高數(shù)據(jù)的可靠性,數(shù)據(jù)副本技術和EC編碼冗余技術是分布式系統(tǒng)可靠性最常用的手段了。以多副本為例,副本數(shù)越多,數(shù)據(jù)的可靠性肯定越高。
為了對分布式系統(tǒng)的數(shù)據(jù)可靠性作一個量化估算,進一步分析得到影響存儲數(shù)據(jù)可靠性的因素主要有:
-
N:分布式系統(tǒng)磁盤的總數(shù),可以很直觀理解,磁盤的數(shù)量是和可靠性強相關,N的大小與數(shù)據(jù)的打散程度有很大關系。
-
R:副本數(shù),副本數(shù)越高數(shù)據(jù)的可靠性肯定越高,但同時也會帶來更大的存儲成本。
-
T:RecoveryTime出現(xiàn)壞盤情況下數(shù)據(jù)恢復的時間,這個也很好理解,恢復時間越短,數(shù)據(jù)的可靠性越高。
-
AFR:Annualized Failure Rate磁盤的年度故障率,這個和磁盤本身的質量相關,質量越好,AFR越低,數(shù)據(jù)的可靠性越高。
-
S:CopySet數(shù)量,一個盤上的數(shù)據(jù)的冗余在集群中的打散程度,打得越散,則有可能任意壞3塊盤就剛好有數(shù)據(jù)的冗余數(shù)據(jù)都丟失。所以,僅從打散程度這個維度看,打散程度越小越好。
因此,我們可以用一個公式表示分布式系統(tǒng)的全年數(shù)據(jù)可靠性:
3.1 磁盤年故障率:AFR
AFR:Annualized Failure Rate又稱為硬盤年度失敗概率,一般用來反映一個設備在全年的使用出故障的概率,可以很直觀的理解,AFR越低,系統(tǒng)的可靠性越高,因為AFR與系統(tǒng)的數(shù)據(jù)可靠性強相關;而這個指標通常又是由另一個磁盤質量指標MTBF(Mean Time Before Failure)推算出來,而MTBF各大硬盤廠商都是有出廠指標的,比如說希捷的硬盤出廠的MTBF指標為120W個小時。以下為AFR的計算公式:
但是實際使用當中往往MTBF會低于硬盤出廠指標。Google就根據(jù)他們的線上集群的硬盤情況進行了統(tǒng)計計算AFR如下:
( 5年內硬盤AFR統(tǒng)計情況 )
(圖片來自 http://oceanbase.org.cn )
3.2 副本數(shù)據(jù)復制組:CopySet
副本數(shù)據(jù)復制組CopySet:用通俗的話說就是,包含一個數(shù)據(jù)的所有副本的節(jié)點,也就是一個copyset損壞的情況下,數(shù)據(jù)會丟失。
(單個數(shù)據(jù)隨機復制分組示意圖)
(圖片來自 https://www.dazhuanlan.com )
如圖2所示,以9塊盤為例,這9塊盤的copyset就是:{1,5,6},{2,6,8},如果不做任何特殊處理,數(shù)據(jù)多了之后,數(shù)據(jù)的隨機分布如下:
(海量數(shù)據(jù)隨機分布示意圖)
(圖片來自 https://www.dazhuanlan.com )
最大CopySet:如上圖所示,12個數(shù)據(jù)的多副本隨機打散到9塊盤上,從上圖中任決意挑3塊盤都可以挑出包含某個數(shù)據(jù)的三個副本,就相當于從n個元素中取出k個元素的組合數(shù)量為:
最大的CopySet配置下一旦有三塊磁盤壞了,丟數(shù)據(jù)的概率是100%。另外一種情況,數(shù)據(jù)的分布是有規(guī)律的,比如一塊盤上的數(shù)據(jù)只會在另外一塊盤上備份,如下圖所示,在這種情況下數(shù)據(jù)覆蓋的CopySet只有(1,5,7)、(2,4,9)、(3,6,8)也就是說這種情況下CopySet為3。我們不難理解,9塊盤的最小CopySet為3。也就是N/R。
(磁盤粒度冗余分布示意圖)
因此,CopySet數(shù)量S符合以下:
既然CopySet數(shù)據(jù)可以最小為N/R,能不能把CopySet數(shù)量調到最小,答案當然是不行的,因為,一方面如果CopySet調到最小,當有一個盤壞了后,只有其它2塊盤進行這塊盤的恢復操作,這樣數(shù)據(jù)的恢復時間又變長了,恢復時間變長也會影響數(shù)據(jù)的可靠性;而且一旦命中了CopySet中的一個,則丟失的數(shù)據(jù)量規(guī)模非常大。因此,分布式系統(tǒng)中的CopySet的量和恢復速度RecoveryTime是一個均衡整個系統(tǒng)數(shù)據(jù)可靠性和集群可用性的參數(shù)。
文獻【1】Copysets: Reducing the Frequency of Data Loss in Cloud Storage提供了一種分布式系統(tǒng)的CopySet Replication的選擇策略,在分布式存儲系統(tǒng)當中比如對象存儲和文件存儲當中,還有一種方式可以根據(jù)系統(tǒng)的可靠性和可用性進行調整系統(tǒng)CopySets的數(shù)量,就是在隨機放置情況下,使用小文件合并成大文件的存儲策略,可以通過控制大文件的大小從而控制每個磁盤上大文件的數(shù)量,比如100G一個文件,8T盤上的最大文件存儲數(shù)量也就是8T/100G = 80個文件,也就是說一個8T的盤的數(shù)據(jù)最多打散到了80塊其它的盤上,對于集群盤遠大于80的系統(tǒng)顯然也能夠很好的控制一個數(shù)據(jù)盤的數(shù)據(jù)打散程度。
因此,在磁盤上的分片是隨機打散的情況下,CopySets數(shù)量可以量化為以下公式:
其中,P為磁盤的容量,B為分片大小,N為系統(tǒng)磁盤的數(shù)據(jù),R為副本數(shù)。80%為使用率。
3.3 數(shù)據(jù)恢復時間:Recovery Time
數(shù)據(jù)恢復時間對數(shù)據(jù)可靠性影響很大,這個很好理解,因此縮短數(shù)據(jù)恢復時間可以有效降低數(shù)據(jù)丟失的風險。前面已經(jīng)介紹數(shù)據(jù)恢復時間和磁盤上數(shù)據(jù)打散程度強相關,同時數(shù)據(jù)恢復時間也與服務本身的可用性相關。
比如磁盤帶寬為200MB/s,假設留給恢復可用的帶寬為20%就是40MB/s,磁盤容量為P,使用率為80%,B為BlockSize大小,則恢復速度可按以下方式計算:
四、可靠性模型推導
4.1 磁盤故障與泊松分布
泊松分布:泊松分布其實是二項分布的極限情況,泊松分布公式如下:
(圖片來自 知乎 )
其中,t為時間周期(小時為單位),n為故障的盤的塊數(shù),N為整個集群的盤的數(shù)量,為單位時間1小時內出故障的磁盤平均數(shù)。
從3.1節(jié)我們已經(jīng)介紹過了磁盤一年之內出故障的概率為AFR,那么單位時間1個小時的時間周期磁盤出故障的概率為FIT(Failures in Time):
那么N塊盤的集群在單位時間1小時內出故障的盤的數(shù)量為FIT*N,換句話說,也就是單位時間1小時內出故障的磁盤平均數(shù)。因此可以得到:
4.2 系統(tǒng)全年可靠性計算推導
由4.1我們得到磁盤故障是符合泊松分布,N塊盤的集群中在t小時內有n塊盤故障的概率:
接下來我們以3副本為例,來推導一下全年集群沒有數(shù)據(jù)丟失的概率的量化模型,3副本情況下,全年集群沒有數(shù)據(jù)丟失的概率不太好量化,我們可以通過計算全年集群出現(xiàn)數(shù)據(jù)丟失的概率,然后全年集群沒有數(shù)據(jù)丟失的概率就以計算出來:
全年集群出現(xiàn)數(shù)據(jù)丟失的概率:只有在t(1年)的時間內有第一塊磁盤出現(xiàn)故障之后,然后系統(tǒng)進入數(shù)據(jù)恢復階段,在數(shù)據(jù)恢復的時間tr內又有第二塊磁盤出現(xiàn)故障,我們先不考慮數(shù)據(jù)恢復了多少,然后在tr內又有第三塊磁盤出現(xiàn)故障,但是這三個磁盤不一定剛好命中了我們在3.2介紹的copyset復制組如果命中了copyset,那么集群在全年就真的有出現(xiàn)數(shù)據(jù)丟失了。因為全年集群出現(xiàn)數(shù)據(jù)丟失的概率和P1,P2,P3,以及Copyset命中概率Pc相關。
1年時間t內有任意一塊磁盤出現(xiàn)故障的概率為:
上面這塊磁盤出現(xiàn)問題后,需要馬上恢復,在恢復時間tr內有另外一塊盤出現(xiàn)故障概率:
在恢復時間tr內有第三塊任意盤出現(xiàn)故障的概率:
而這三塊出現(xiàn)故障的磁盤剛好命中集群的CopySets的概率為:
因此,不難得到全年集群出現(xiàn)數(shù)據(jù)丟失的概率P:
然后全年集群不出現(xiàn)數(shù)據(jù)丟失的概率1-P就可以計算得到了。
4.3 EC冗余全年可靠性計算推導
EC冗余機制相對于三副本機制是用額外的校驗塊來達到當有一些塊出現(xiàn)故障的情況下數(shù)據(jù)不會丟,按(D,E)數(shù)據(jù)塊進行EC編碼,那么在計算EC冗余下的全年集群數(shù)據(jù)丟失概率的時候,EC模式下的恢復速度tr和三副本肯定是不一樣的,另外,EC模式下的copysets是不一樣的,EC模式是允許E個數(shù)據(jù)塊丟失,而且是在D個數(shù)據(jù)塊有任意的E個數(shù)據(jù)塊丟失數(shù)據(jù)都找不回來了,因此,不難得出,EC模式的全年集群出現(xiàn)數(shù)據(jù)丟失的概率P,以下公式,默認E為4,也就是丟失4個數(shù)據(jù)塊:
相對于三副本模式來說,EC模式的copyset需要考慮在D+E個塊當中丟失其中任意E個塊,則EC模式下的copyset數(shù)為:
五、可靠性模型估算
5.1 量化模型影響因素
以三副本為例,從以上量化的全集群出故障的概率計算公式可以得到影響的因素有:
-
N:集群的盤的個數(shù);
-
FIT:就也是1小時磁盤的故障率,可以由AFR得到;
-
t:這個是固定1年;
-
tr:恢復時間,單位為小時,和恢復速度W和磁盤存儲量、分片大小相關;
-
R:副本數(shù);
-
Z:磁盤的存儲總空間;
-
B:分片或者Block的大小,小文件合并成大文件的最大Size。
5.2 可靠性量化計算
接下來我們把影響可靠性計算的幾個因素根據(jù)生產(chǎn)集群的現(xiàn)狀帶入模型計算可靠性計算:
結合4.2的磁盤故障與可靠性的推導,通過表格中10個case的計算,可以看到:
Case 1,2,3通過擴展磁盤的數(shù)量從48塊盤到804再到3600塊盤,可靠性從11個9提高到接近13個9,然后804塊盤到3600塊盤還是維護在13個9,按理說,集群的規(guī)模增大,增3塊盤的概率會提高,但是由于恢復速度也隨著磁盤的增加而線性增加,因此,可靠性一直在提升,而從804到3600塊盤,可靠性沒有增加,是因為這時候恢復速度已經(jīng)不隨磁盤增加而線性增大,因為在磁盤量很大后,決定恢復速度因素就變?yōu)閱伪P分片個數(shù)。
Case 5,6比較好理解,恢復速度由100M/S變?yōu)?0M/S,可靠性降低2個以上數(shù)量級;
Case 7,8也比較好理解,AFR由0.43提高到1.2再提高到7,可靠性降低了3個數(shù)量級;
Case 9,10比較繞,磁盤數(shù)在100的情況下,Block大小由80G一個提高到100G一個,可靠性降低了,這種情況下是因為恢復速度提高,CopySet也提高,但速度影響更大導致。
Case 11,12也比較繞,由于我們限定了恢復速度不能超過5分鐘(模擬線上,因為系統(tǒng)檢測壞盤,自動踢盤等操作也需要時間),這兩個Case下的CopySet都超級大,所以恢復的并發(fā)度都非常高,但受限于5分鐘限定,所以兩個Case的恢復速度一樣,所以PK CopySet的數(shù)量,Case12的CopySet比Case11的CopySet要小,所以更不容易丟失,所以可靠性更高。
六、總結
-
首先AFR越低越好,AFR是直接決定整個集群磁盤故障引起的數(shù)據(jù)丟失概率的最大因素;
-
其次是恢復速度:在不影響服務可用性指標的前提下,最大限度的提高磁盤故障的恢復帶寬是提高集群數(shù)據(jù)可靠性的另一個重要因素;
-
如果在恢復速度受限的前提下,比如系統(tǒng)架構設計導致的相關發(fā)現(xiàn)壞盤到踢盤到進行數(shù)據(jù)恢復操作啟動為5分鐘,那么可以通過合理降低磁盤數(shù)據(jù)的分散程度降低CopySet,如果系統(tǒng)是按分片粒度或Block粒度,則相應的以提高Block粒度來降低數(shù)據(jù)分散程度的方式來提高數(shù)據(jù)的可靠性。