分布式存儲系統(tǒng)可靠性:系統(tǒng)量化估算
作者:vivo互聯(lián)網(wǎng)通用存儲研發(fā)團隊-Gong Bing
一、引言
我們常常聽到衡量分布式存儲系統(tǒng)好壞的兩個指標(biāo):可用性和可靠性指標(biāo)。
可用性指的是系統(tǒng)服務(wù)的可用性。一般按全年可用時間除以全年時間來衡量可用性的好壞,平常我們說的 SLA指標(biāo)就是可用性指標(biāo),這里就不展開細說。
可靠性指標(biāo)指的是數(shù)據(jù)的可靠性。我們常說的數(shù)據(jù)可靠性11個9,在對象存儲中就意味著存儲一千億個對象大概會有1個文件是不可讀的。由此可見,數(shù)據(jù)可靠性指標(biāo)給分布式存儲系統(tǒng)帶來的挑戰(zhàn)不言而喻。
本文就重點來分析一下分布式系統(tǒng)的數(shù)據(jù)可靠性的量化模型。
二、背景
數(shù)據(jù)的重要性不必多說,基本上數(shù)據(jù)可以稱得上是企業(yè)生命力的核心,是企業(yè)賴以生存的根本。因此數(shù)據(jù)的可靠性是基礎(chǔ)的基礎(chǔ),任何數(shù)據(jù)的丟失都會給企業(yè)造成無法計算和彌補的損失。
隨著數(shù)據(jù)規(guī)模的日益增大,環(huán)境更加復(fù)雜,我們大體可以把威協(xié)數(shù)據(jù)可靠性的因素歸為幾大類:
- 硬件故障:主要是磁盤故障、還有網(wǎng)絡(luò)故障、服務(wù)器故障、IDC故障;
- 軟件隱患:內(nèi)核BUG,軟件設(shè)計上的BUG等;
- 運維故障:人為誤操作。
其中,第1類的硬件故障中又以磁盤故障最為頻繁,壞盤對于從事分布式存儲運維的同學(xué)來說再正常不過了。
因此,我們接下來從磁盤故障這個維度來嘗試量化一下一個分布式系統(tǒng)的數(shù)據(jù)可靠性。
三、數(shù)據(jù)可靠性量化
為了提高數(shù)據(jù)的可靠性,數(shù)據(jù)副本技術(shù)和EC編碼冗余技術(shù)是分布式系統(tǒng)可靠性最常用的手段了。以多副本為例,副本數(shù)越多,數(shù)據(jù)的可靠性肯定越高。
為了對分布式系統(tǒng)的數(shù)據(jù)可靠性作一個量化估算,進一步分析得到影響存儲數(shù)據(jù)可靠性的因素主要有:
- N:分布式系統(tǒng)磁盤的總數(shù),可以很直觀理解,磁盤的數(shù)量是和可靠性強相關(guān),N的大小與數(shù)據(jù)的打散程度有很大關(guān)系。
- R:副本數(shù),副本數(shù)越高數(shù)據(jù)的可靠性肯定越高,但同時也會帶來更大的存儲成本。
- T:RecoveryTime出現(xiàn)壞盤情況下數(shù)據(jù)恢復(fù)的時間,這個也很好理解,恢復(fù)時間越短,數(shù)據(jù)的可靠性越高。
- AFR:Annualized Failure Rate磁盤的年度故障率,這個和磁盤本身的質(zhì)量相關(guān),質(zhì)量越好,AFR越低,數(shù)據(jù)的可靠性越高。
- S:CopySet數(shù)量,一個盤上的數(shù)據(jù)的冗余在集群中的打散程度,打得越散,則有可能任意壞3塊盤就剛好有數(shù)據(jù)的冗余數(shù)據(jù)都丟失。所以,僅從打散程度這個維度看,打散程度越小越好。
因此,我們可以用一個公式表示分布式系統(tǒng)的全年數(shù)據(jù)可靠性:

3.1 磁盤年故障率:AFR
AFR:Annualized Failure Rate又稱為硬盤年度失敗概率,一般用來反映一個設(shè)備在全年的使用出故障的概率,可以很直觀的理解,AFR越低,系統(tǒng)的可靠性越高,因為AFR與系統(tǒng)的數(shù)據(jù)可靠性強相關(guān);而這個指標(biāo)通常又是由另一個磁盤質(zhì)量指標(biāo)MTBF(Mean Time Before Failure)推算出來,而MTBF各大硬盤廠商都是有出廠指標(biāo)的,比如說希捷的硬盤出廠的MTBF指標(biāo)為120W個小時。以下為AFR的計算公式:

但是實際使用當(dāng)中往往MTBF會低于硬盤出廠指標(biāo)。Google就根據(jù)他們的線上集群的硬盤情況進行了統(tǒng)計計算AFR如下:

3.2 副本數(shù)據(jù)復(fù)制組:CopySet
副本數(shù)據(jù)復(fù)制組CopySet:用通俗的話說就是,包含一個數(shù)據(jù)的所有副本的節(jié)點,也就是一個copyset損壞的情況下,數(shù)據(jù)會丟失。

如圖2所示,以9塊盤為例,這9塊盤的copyset就是:{1,5,6},{2,6,8},如果不做任何特殊處理,數(shù)據(jù)多了之后,數(shù)據(jù)的隨機分布如下:

(圖片來自https://www.dazhuanlan.com)
最大CopySet:如上圖所示,12個數(shù)據(jù)的多副本隨機打散到9塊盤上,從上圖中任決意挑3塊盤都可以挑出包含某個數(shù)據(jù)的三個副本,就相當(dāng)于從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ù)量調(diào)到最小,答案當(dāng)然是不行的,因為,一方面如果CopySet調(diào)到最小,當(dāng)有一個盤壞了后,只有其它2塊盤進行這塊盤的恢復(fù)操作,這樣數(shù)據(jù)的恢復(fù)時間又變長了,恢復(fù)時間變長也會影響數(shù)據(jù)的可靠性;而且一旦命中了CopySet中的一個,則丟失的數(shù)據(jù)量規(guī)模非常大。因此,分布式系統(tǒng)中的CopySet的量和恢復(fù)速度RecoveryTime是一個均衡整個系統(tǒng)數(shù)據(jù)可靠性和集群可用性的參數(shù)。
文獻【1】Copysets: Reducing the Frequency of Data Loss in Cloud Storage提供了一種分布式系統(tǒng)的CopySet Replication的選擇策略,在分布式存儲系統(tǒng)當(dāng)中比如對象存儲和文件存儲當(dāng)中,還有一種方式可以根據(jù)系統(tǒng)的可靠性和可用性進行調(diào)整系統(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ù)恢復(fù)時間:Recovery Time
數(shù)據(jù)恢復(fù)時間對數(shù)據(jù)可靠性影響很大,這個很好理解,因此縮短數(shù)據(jù)恢復(fù)時間可以有效降低數(shù)據(jù)丟失的風(fēng)險。前面已經(jīng)介紹數(shù)據(jù)恢復(fù)時間和磁盤上數(shù)據(jù)打散程度強相關(guān),同時數(shù)據(jù)恢復(fù)時間也與服務(wù)本身的可用性相關(guān)。
比如磁盤帶寬為200MB/s,假設(shè)留給恢復(fù)可用的帶寬為20%就是40MB/s,磁盤容量為P,使用率為80%,B為BlockSize大小,則恢復(fù)速度可按以下方式計算:

四、可靠性模型推導(dǎo)
4.1 磁盤故障與泊松分布
泊松分布:泊松分布其實是二項分布的極限情況,泊松分布公式如下:

其中,t為時間周期(小時為單位),n為故障的盤的塊數(shù),N為整個集群的盤的數(shù)量,為單位時間1小時內(nèi)出故障的磁盤平均數(shù)。
從3.1節(jié)我們已經(jīng)介紹過了磁盤一年之內(nèi)出故障的概率為AFR,那么單位時間1個小時的時間周期磁盤出故障的概率為FIT(Failures in Time):

那么N塊盤的集群在單位時間1小時內(nèi)出故障的盤的數(shù)量為FIT*N,換句話說,也就是單位時間1小時內(nèi)出故障的磁盤平均數(shù)。因此可以得到:

4.2 系統(tǒng)全年可靠性計算推導(dǎo)
由4.1我們得到磁盤故障是符合泊松分布,N塊盤的集群中在t小時內(nèi)有n塊盤故障的概率:

接下來我們以3副本為例,來推導(dǎo)一下全年集群沒有數(shù)據(jù)丟失的概率的量化模型,3副本情況下,全年集群沒有數(shù)據(jù)丟失的概率不太好量化,我們可以通過計算全年集群出現(xiàn)數(shù)據(jù)丟失的概率,然后全年集群沒有數(shù)據(jù)丟失的概率就以計算出來:
全年集群出現(xiàn)數(shù)據(jù)丟失的概率:只有在t(1年)的時間內(nèi)有第一塊磁盤出現(xiàn)故障之后,然后系統(tǒng)進入數(shù)據(jù)恢復(fù)階段,在數(shù)據(jù)恢復(fù)的時間tr內(nèi)又有第二塊磁盤出現(xiàn)故障,我們先不考慮數(shù)據(jù)恢復(fù)了多少,然后在tr內(nèi)又有第三塊磁盤出現(xiàn)故障,但是這三個磁盤不一定剛好命中了我們在3.2介紹的copyset復(fù)制組如果命中了copyset,那么集群在全年就真的有出現(xiàn)數(shù)據(jù)丟失了。因為全年集群出現(xiàn)數(shù)據(jù)丟失的概率和P1,P2,P3,以及Copyset命中概率Pc相關(guān)。

1年時間t內(nèi)有任意一塊磁盤出現(xiàn)故障的概率為:

上面這塊磁盤出現(xiàn)問題后,需要馬上恢復(fù),在恢復(fù)時間tr內(nèi)有另外一塊盤出現(xiàn)故障概率:

在恢復(fù)時間tr內(nèi)有第三塊任意盤出現(xiàn)故障的概率:

而這三塊出現(xiàn)故障的磁盤剛好命中集群的CopySets的概率為:

因此,不難得到全年集群出現(xiàn)數(shù)據(jù)丟失的概率P:

然后全年集群不出現(xiàn)數(shù)據(jù)丟失的概率1-P就可以計算得到了。
4.3 EC冗余全年可靠性計算推導(dǎo)
EC冗余機制相對于三副本機制是用額外的校驗塊來達到當(dāng)有一些塊出現(xiàn)故障的情況下數(shù)據(jù)不會丟,按(D,E)數(shù)據(jù)塊進行EC編碼,那么在計算EC冗余下的全年集群數(shù)據(jù)丟失概率的時候,EC模式下的恢復(fù)速度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個塊當(dāng)中丟失其中任意E個塊,則EC模式下的copyset數(shù)為:

五、可靠性模型估算
5.1 量化模型影響因素

以三副本為例,從以上量化的全集群出故障的概率計算公式可以得到影響的因素有:
- N:集群的盤的個數(shù);
- FIT:就也是1小時磁盤的故障率,可以由AFR得到;
- t:這個是固定1年;
- tr:恢復(fù)時間,單位為小時,和恢復(fù)速度W和磁盤存儲量、分片大小相關(guān);
- R:副本數(shù);
- Z:磁盤的存儲總空間;
- B:分片或者Block的大小,小文件合并成大文件的最大Size。
5.2 可靠性量化計算
接下來我們把影響可靠性計算的幾個因素根據(jù)生產(chǎn)集群的現(xiàn)狀帶入模型計算可靠性計算:

結(jié)合4.2的磁盤故障與可靠性的推導(dǎo),通過表格中10個case的計算,可以看到:
Case 1,2,3通過擴展磁盤的數(shù)量從48塊盤到804再到3600塊盤,可靠性從11個9提高到接近13個9,然后804塊盤到3600塊盤還是維護在13個9,按理說,集群的規(guī)模增大,增3塊盤的概率會提高,但是由于恢復(fù)速度也隨著磁盤的增加而線性增加,因此,可靠性一直在提升,而從804到3600塊盤,可靠性沒有增加,是因為這時候恢復(fù)速度已經(jīng)不隨磁盤增加而線性增大,因為在磁盤量很大后,決定恢復(fù)速度因素就變?yōu)閱伪P分片個數(shù)。
Case 5,6比較好理解,恢復(fù)速度由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一個,可靠性降低了,這種情況下是因為恢復(fù)速度提高,CopySet也提高,但速度影響更大導(dǎo)致。
Case 11,12也比較繞,由于我們限定了恢復(fù)速度不能超過5分鐘(模擬線上,因為系統(tǒng)檢測壞盤,自動踢盤等操作也需要時間),這兩個Case下的CopySet都超級大,所以恢復(fù)的并發(fā)度都非常高,但受限于5分鐘限定,所以兩個Case的恢復(fù)速度一樣,所以PK CopySet的數(shù)量,Case12的CopySet比Case11的CopySet要小,所以更不容易丟失,所以可靠性更高。
六、總結(jié)
- 首先AFR越低越好,AFR是直接決定整個集群磁盤故障引起的數(shù)據(jù)丟失概率的最大因素;
- 其次是恢復(fù)速度:在不影響服務(wù)可用性指標(biāo)的前提下,最大限度的提高磁盤故障的恢復(fù)帶寬是提高集群數(shù)據(jù)可靠性的另一個重要因素;
- 如果在恢復(fù)速度受限的前提下,比如系統(tǒng)架構(gòu)設(shè)計導(dǎo)致的相關(guān)發(fā)現(xiàn)壞盤到踢盤到進行數(shù)據(jù)恢復(fù)操作啟動為5分鐘,那么可以通過合理降低磁盤數(shù)據(jù)的分散程度降低CopySet,如果系統(tǒng)是按分片粒度或Block粒度,則相應(yīng)的以提高Block粒度來降低數(shù)據(jù)分散程度的方式來提高數(shù)據(jù)的可靠性。
參考資料
1. https://zhuanlan.zhihu.com2.《Copysets: Reducing the Frequency of Data Loss in Cloud Storage》3.?https://www.dazhuanlan.com4.http://oceanbase.org.cn