分散式儲存系統可靠性:系統量化估算

vivo網際網路技術發表於2021-08-02

一、引言

我們常常聽到衡量分散式儲存系統好壞的兩個指標:可用性和可靠性指標。

可用性指的是系統服務的可用性。一般按全年可用時間除以全年時間來衡量可用性的好壞,平常我們說的 SLA指標就是可用性指標,這裡就不展開細說。

可靠性指標指的是資料的可靠性。我們常說的資料可靠性11個9,在物件儲存中就意味著儲存一千億個物件大概會有1個檔案是不可讀的。由此可見,資料可靠性指標給分散式儲存系統帶來的挑戰不言而喻。

本文就重點來分析一下分散式系統的資料可靠性的量化模型。

二、背景

資料的重要性不必多說,基本上資料可以稱得上是企業生命力的核心,是企業賴以生存的根本。因此資料的可靠性是基礎的基礎,任何資料的丟失都會給企業造成無法計算和彌補的損失。

隨著資料規模的日益增大,環境更加複雜,我們大體可以把威協資料可靠性的因素歸為幾大類:

  • 硬體故障:主要是磁碟故障、還有網路故障、伺服器故障、IDC故障;

  • 軟體隱患:核心BUG,軟體設計上的BUG等;

  • 運維故障:人為誤操作。

其中,第1類的硬體故障中又以磁碟故障最為頻繁,壞盤對於從事分散式儲存運維的同學來說再正常不過了。

因此,我們接下來從磁碟故障這個維度來嘗試量化一下一個分散式系統的資料可靠性。

三、資料可靠性量化

為了提高資料的可靠性,資料副本技術和EC編碼冗餘技術是分散式系統可靠性最常用的手段了。以多副本為例,副本數越多,資料的可靠性肯定越高。

為了對分散式系統的資料可靠性作一個量化估算,進一步分析得到影響儲存資料可靠性的因素主要有:

  • N:分散式系統磁碟的總數,可以很直觀理解,磁碟的數量是和可靠性強相關,N的大小與資料的打散程度有很大關係。

  • R:副本數,副本數越高資料的可靠性肯定越高,但同時也會帶來更大的儲存成本。

  • T:RecoveryTime出現壞盤情況下資料恢復的時間,這個也很好理解,恢復時間越短,資料的可靠性越高。

  • AFR:Annualized Failure Rate磁碟的年度故障率,這個和磁碟本身的質量相關,質量越好,AFR越低,資料的可靠性越高。

  • S:CopySet數量,一個盤上的資料的冗餘在叢集中的打散程度,打得越散,則有可能任意壞3塊盤就剛好有資料的冗餘資料都丟失。所以,僅從打散程度這個維度看,打散程度越小越好。

因此,我們可以用一個公式表示分散式系統的全年資料可靠性:

3.1 磁碟年故障率:AFR

AFR:Annualized Failure Rate又稱為硬碟年度失敗概率,一般用來反映一個裝置在全年的使用出故障的概率,可以很直觀的理解,AFR越低,系統的可靠性越高,因為AFR與系統的資料可靠性強相關;而這個指標通常又是由另一個磁碟質量指標MTBF(Mean Time Before Failure)推算出來,而MTBF各大硬碟廠商都是有出廠指標的,比如說希捷的硬碟出廠的MTBF指標為120W個小時。以下為AFR的計算公式:

但是實際使用當中往往MTBF會低於硬碟出廠指標。Google就根據他們的線上叢集的硬碟情況進行了統計計算AFR如下:

(5年內硬碟AFR統計情況)

(圖片來自http://oceanbase.org.cn

3.2 副本資料複製組:CopySet

副本資料複製組CopySet:用通俗的話說就是,包含一個資料的所有副本的節點,也就是一個copyset損壞的情況下,資料會丟失。

(單個資料隨機複製分組示意圖)

(圖片來自https://www.dazhuanlan.com

如圖2所示,以9塊盤為例,這9塊盤的copyset就是:{1,5,6},{2,6,8},如果不做任何特殊處理,資料多了之後,資料的隨機分佈如下:

(海量資料隨機分佈示意圖)

(圖片來自https://www.dazhuanlan.com

最大CopySet:如上圖所示,12個資料的多副本隨機打散到9塊盤上,從上圖中任決意挑3塊盤都可以挑出包含某個資料的三個副本,就相當於從n個元素中取出k個元素的組合數量為:

最大的CopySet配置下一旦有三塊磁碟壞了,丟資料的概率是100%。另外一種情況,資料的分佈是有規律的,比如一塊盤上的資料只會在另外一塊盤上備份,如下圖所示,在這種情況下資料覆蓋的CopySet只有(1,5,7)、(2,4,9)、(3,6,8)也就是說這種情況下CopySet為3。我們不難理解,9塊盤的最小CopySet為3。也就是N/R。

(磁碟粒度冗餘分佈示意圖)

因此,CopySet數量S符合以下:

既然CopySet資料可以最小為N/R,能不能把CopySet數量調到最小,答案當然是不行的,因為,一方面如果CopySet調到最小,當有一個盤壞了後,只有其它2塊盤進行這塊盤的恢復操作,這樣資料的恢復時間又變長了,恢復時間變長也會影響資料的可靠性;而且一旦命中了CopySet中的一個,則丟失的資料量規模非常大。因此,分散式系統中的CopySet的量和恢復速度RecoveryTime是一個均衡整個系統資料可靠性和叢集可用性的引數。

文獻【1】Copysets: Reducing the Frequency of Data Loss in Cloud Storage提供了一種分散式系統的CopySet Replication的選擇策略,在分散式儲存系統當中比如物件儲存和檔案儲存當中,還有一種方式可以根據系統的可靠性和可用性進行調整系統CopySets的數量,就是在隨機放置情況下,使用小檔案合併成大檔案的儲存策略,可以通過控制大檔案的大小從而控制每個磁碟上大檔案的數量,比如100G一個檔案,8T盤上的最大檔案儲存數量也就是8T/100G = 80個檔案,也就是說一個8T的盤的資料最多打散到了80塊其它的盤上,對於叢集盤遠大於80的系統顯然也能夠很好的控制一個資料盤的資料打散程度。

因此,在磁碟上的分片是隨機打散的情況下,CopySets數量可以量化為以下公式:

其中,P為磁碟的容量,B為分片大小,N為系統磁碟的資料,R為副本數。80%為使用率。

3.3 資料恢復時間:Recovery Time

資料恢復時間對資料可靠性影響很大,這個很好理解,因此縮短資料恢復時間可以有效降低資料丟失的風險。前面已經介紹資料恢復時間和磁碟上資料打散程度強相關,同時資料恢復時間也與服務本身的可用性相關。

比如磁碟頻寬為200MB/s,假設留給恢復可用的頻寬為20%就是40MB/s,磁碟容量為P,使用率為80%,B為BlockSize大小,則恢復速度可按以下方式計算:

四、可靠性模型推導

4.1 磁碟故障與泊松分佈

泊松分佈:泊松分佈其實是二項分佈的極限情況,泊松分佈公式如下:

(圖片來自知乎

其中,t為時間週期(小時為單位),n為故障的盤的塊數,N為整個叢集的盤的數量,為單位時間1小時內出故障的磁碟平均數。

從3.1節我們已經介紹過了磁碟一年之內出故障的概率為AFR,那麼單位時間1個小時的時間週期磁碟出故障的概率為FIT(Failures in Time):

那麼N塊盤的叢集在單位時間1小時內出故障的盤的數量為FIT*N,換句話說,也就是單位時間1小時內出故障的磁碟平均數。因此可以得到:

4.2 系統全年可靠性計算推導

由4.1我們得到磁碟故障是符合泊松分佈,N塊盤的叢集中在t小時內有n塊盤故障的概率:

接下來我們以3副本為例,來推導一下全年叢集沒有資料丟失的概率的量化模型,3副本情況下,全年叢集沒有資料丟失的概率不太好量化,我們可以通過計算全年叢集出現資料丟失的概率,然後全年叢集沒有資料丟失的概率就以計算出來:

全年叢集出現資料丟失的概率:只有在t(1年)的時間內有第一塊磁碟出現故障之後,然後系統進入資料恢復階段,在資料恢復的時間tr內又有第二塊磁碟出現故障,我們先不考慮資料恢復了多少,然後在tr內又有第三塊磁碟出現故障,但是這三個磁碟不一定剛好命中了我們在3.2介紹的copyset複製組如果命中了copyset,那麼叢集在全年就真的有出現資料丟失了。因為全年叢集出現資料丟失的概率和P1,P2,P3,以及Copyset命中概率Pc相關。

1年時間t內有任意一塊磁碟出現故障的概率為:

上面這塊磁碟出現問題後,需要馬上恢復,在恢復時間tr內有另外一塊盤出現故障概率:

在恢復時間tr內有第三塊任意盤出現故障的概率:

而這三塊出現故障的磁碟剛好命中叢集的CopySets的概率為:

因此,不難得到全年叢集出現資料丟失的概率P:

然後全年叢集不出現資料丟失的概率1-P就可以計算得到了。

4.3 EC冗餘全年可靠性計算推導

EC冗餘機制相對於三副本機制是用額外的校驗塊來達到當有一些塊出現故障的情況下資料不會丟,按(D,E)資料塊進行EC編碼,那麼在計算EC冗餘下的全年叢集資料丟失概率的時候,EC模式下的恢復速度tr和三副本肯定是不一樣的,另外,EC模式下的copysets是不一樣的,EC模式是允許E個資料塊丟失,而且是在D個資料塊有任意的E個資料塊丟失資料都找不回來了,因此,不難得出,EC模式的全年叢集出現資料丟失的概率P,以下公式,預設E為4,也就是丟失4個資料塊:

相對於三副本模式來說,EC模式的copyset需要考慮在D+E個塊當中丟失其中任意E個塊,則EC模式下的copyset數為:

五、可靠性模型估算

5.1 量化模型影響因素

以三副本為例,從以上量化的全叢集出故障的概率計算公式可以得到影響的因素有:

  • N:叢集的盤的個數;

  • FIT:就也是1小時磁碟的故障率,可以由AFR得到;

  • t:這個是固定1年;

  • tr:恢復時間,單位為小時,和恢復速度W和磁碟儲存量、分片大小相關;

  • R:副本數;

  • Z:磁碟的儲存總空間;

  • B:分片或者Block的大小,小檔案合併成大檔案的最大Size。

5.2 可靠性量化計算

接下來我們把影響可靠性計算的幾個因素根據生產叢集的現狀帶入模型計算可靠性計算:

結合4.2的磁碟故障與可靠性的推導,通過表格中10個case的計算,可以看到:

Case 1,2,3通過擴充套件磁碟的數量從48塊盤到804再到3600塊盤,可靠性從11個9提高到接近13個9,然後804塊盤到3600塊盤還是維護在13個9,按理說,叢集的規模增大,增3塊盤的概率會提高,但是由於恢復速度也隨著磁碟的增加而線性增加,因此,可靠性一直在提升,而從804到3600塊盤,可靠性沒有增加,是因為這時候恢復速度已經不隨磁碟增加而線性增大,因為在磁碟量很大後,決定恢復速度因素就變為單盤分片個數。

Case 5,6比較好理解,恢復速度由100M/S變為10M/S,可靠性降低2個以上數量級;

Case 7,8也比較好理解,AFR由0.43提高到1.2再提高到7,可靠性降低了3個數量級;

Case 9,10比較繞,磁碟數在100的情況下,Block大小由80G一個提高到100G一個,可靠性降低了,這種情況下是因為恢復速度提高,CopySet也提高,但速度影響更大導致。

Case 11,12也比較繞,由於我們限定了恢復速度不能超過5分鐘(模擬線上,因為系統檢測壞盤,自動踢盤等操作也需要時間),這兩個Case下的CopySet都超級大,所以恢復的併發度都非常高,但受限於5分鐘限定,所以兩個Case的恢復速度一樣,所以PK CopySet的數量,Case12的CopySet比Case11的CopySet要小,所以更不容易丟失,所以可靠性更高。

六、總結

  • 首先AFR越低越好,AFR是直接決定整個叢集磁碟故障引起的資料丟失概率的最大因素;

  • 其次是恢復速度:在不影響服務可用性指標的前提下,最大限度的提高磁碟故障的恢復頻寬是提高叢集資料可靠性的另一個重要因素;

  • 如果在恢復速度受限的前提下,比如系統架構設計導致的相關發現壞盤到踢盤到進行資料恢復操作啟動為5分鐘,那麼可以通過合理降低磁碟資料的分散程度降低CopySet,如果系統是按分片粒度或Block粒度,則相應的以提高Block粒度來降低資料分散程度的方式來提高資料的可靠性。

參考資料

1. https://zhuanlan.zhihu.com

2.《Copysets: Reducing the Frequency of Data Loss in Cloud Storage》

3. https://www.dazhuanlan.com

4.http://oceanbase.org.cn

​作者:vivo網際網路通用儲存研發團隊-Gong Bing

相關文章