本文根據(jù)龔兵老師在〖2023 Gdevops全球敏捷運(yùn)維峰會(huì)-北京站〗現(xiàn)場(chǎng)演講內(nèi)容整理而成。(文末有PPT獲取方式,不要錯(cuò)過(guò))
作者介紹
龔兵,vivo云存儲(chǔ)研發(fā)負(fù)責(zé)人。工作10余年,先后就職于華為、騰訊、百度,現(xiàn)在vivo擔(dān)任云存儲(chǔ)研發(fā)負(fù)責(zé)人,研究方向:對(duì)象存儲(chǔ)、文件存儲(chǔ)、NOSQL存儲(chǔ)等分布式存儲(chǔ)領(lǐng)域。
分享概要
一、溯源:vivo存儲(chǔ)服務(wù)介紹
二、歸因:存儲(chǔ)可靠性原因分析
三、建模:存儲(chǔ)可靠性量化模型
四、實(shí)踐:存儲(chǔ)可靠性評(píng)估實(shí)踐
五、思考:存儲(chǔ)可靠性評(píng)估思考
六、Q&A
一、溯源——vivo存儲(chǔ)服務(wù)介紹
1.產(chǎn)品矩陣
當(dāng)前我們的團(tuán)隊(duì)主要負(fù)責(zé)兩大板塊內(nèi)容,一是存儲(chǔ)和數(shù)據(jù)庫(kù)產(chǎn)品矩陣,二是周邊工具及接收類(lèi)服務(wù)。
這兩部分內(nèi)容的區(qū)別主要是,周邊工具和接入類(lèi)服務(wù)幾乎是無(wú)狀態(tài)的,用戶對(duì)這類(lèi)服務(wù)提出可用性的需求,比如我們平時(shí)接觸到的SLA;而存儲(chǔ)及數(shù)據(jù)庫(kù)產(chǎn)品等引擎,主要面向?qū)ο蟠鎯?chǔ)、文件存儲(chǔ)、表格存儲(chǔ)等專(zhuān)門(mén)的服務(wù)業(yè)務(wù),包括可用性和可靠性的指標(biāo)。
2.存儲(chǔ)框架
云存儲(chǔ)領(lǐng)域的黃金數(shù)字是11個(gè)9,接下來(lái)就以存儲(chǔ)服務(wù)為切入點(diǎn),向大家介紹11個(gè)9能否量化?如何量化?
如上圖所示,存儲(chǔ)框架的核心思路是以自研的存儲(chǔ)引擎為核心,輔以阿里、騰訊等公有云的存儲(chǔ),獲得統(tǒng)一的存儲(chǔ)底座,在上方形成對(duì)應(yīng)存儲(chǔ)的統(tǒng)一網(wǎng)關(guān),進(jìn)而提供一套混合云的存儲(chǔ)系統(tǒng)。然后,存儲(chǔ)系統(tǒng)進(jìn)行協(xié)議轉(zhuǎn)換、衍生產(chǎn)品開(kāi)發(fā),為業(yè)務(wù)提供存儲(chǔ)服務(wù)和衍生的生態(tài)服務(wù)。
比如,我們會(huì)利用自己的SDK和AWS S3 SDK,提供原生的對(duì)應(yīng)重組產(chǎn)品,向前封裝文件的存儲(chǔ)網(wǎng)關(guān),兼容posix協(xié)議,為用戶提供文件的存儲(chǔ)產(chǎn)品。除此之外,還會(huì)封裝企業(yè)網(wǎng)盤(pán),進(jìn)行專(zhuān)項(xiàng)服務(wù),為用戶提供相應(yīng)的衍生產(chǎn)品。
3.運(yùn)營(yíng)數(shù)據(jù)
當(dāng)前,基于跨機(jī)房的糾刪碼相關(guān)優(yōu)化,對(duì)可靠性提出了挑戰(zhàn)。如下圖所示,我們線上的集群容量達(dá)到400億(此數(shù)據(jù)尚未包括Hadoop的數(shù)據(jù)容量),存儲(chǔ)數(shù)量已超1,000億。
二、歸因:存儲(chǔ)可靠性原因分析
1.數(shù)據(jù)丟失影響因素
數(shù)據(jù)丟失的五大原因包括:軟件故障、數(shù)據(jù)損壞、惡意竊取、人為失誤、硬件故障,其中硬件故障的占比較高。
2.軟件故障和數(shù)據(jù)損壞
軟件故障的主要原因是軟件設(shè)計(jì)不規(guī)范、測(cè)試不完善及運(yùn)維發(fā)布的操作爆炸半徑太高。
這些問(wèn)題的通用解決方案是:
- 設(shè)計(jì)標(biāo)準(zhǔn)規(guī)范化,比如,AWS引入了TLA+、Plusal等形式化規(guī)范語(yǔ)言來(lái)設(shè)計(jì)系統(tǒng);
- 要達(dá)到測(cè)試自動(dòng)化;
- 做好版本向前版本兼容、版本回滾、讀寫(xiě)分離等操作。
數(shù)據(jù)損壞的行業(yè)通用解決方案相對(duì)成熟,因?yàn)樵谔幚韨鬏斉c存儲(chǔ)的過(guò)程中,都有一定概率遇到數(shù)據(jù)損壞的問(wèn)題。
解決方案:
- 通過(guò)HTTPS協(xié)議,保證傳輸?shù)陌踩?/li>
- 然后通過(guò)MD5校驗(yàn),記錄交易數(shù)據(jù)的完整性;
- 最后通過(guò)定期的scrubbing處理機(jī)制,快速掃描是否具有靜默錯(cuò)誤。
3.惡意竊取和人為失誤
人為失誤主要包括兩類(lèi)問(wèn)題,第一類(lèi)是運(yùn)維人員操作失誤,第二類(lèi)是用戶自己的誤殺或誤覆蓋。
- 針對(duì)運(yùn)維的解決方案:運(yùn)維自動(dòng)化、運(yùn)維白屏化、遵循POLP的最小權(quán)限原則。
- 針對(duì)用戶的解決方案:自動(dòng)存儲(chǔ)方面,可以利用多版本的特性,保證用戶可以找回誤刪的這種數(shù)據(jù);文件方面,提供回收站功能可以達(dá)到相同效果。
惡意竊取主要是內(nèi)外部人員相關(guān)竊取或刪除數(shù)據(jù),其解決方案包括:
- 進(jìn)行權(quán)限控制和生命周期管控;
- 可以鎖定對(duì)象粒度為只讀模式;
- 針對(duì)刪除操作,可以提供這種多因素的、健全的雙因子論證,管控刪除操作。
4.硬件故障
硬件故障是需要重點(diǎn)關(guān)注的存儲(chǔ)可靠性原因,因?yàn)樗急容^高,樣本量比較大,所以有一定概率進(jìn)行量化。
1)原因
- 硬盤(pán)故障:最常見(jiàn)最重要的,驅(qū)動(dòng)器、磁頭、溫度、機(jī)械臂故障
- 主機(jī)故障:服務(wù)器各部件故障導(dǎo)致服務(wù)器無(wú)法啟動(dòng)
- 機(jī)柜故障:由于電源、溫度、網(wǎng)絡(luò)等原因?qū)е抡麢C(jī)柜服務(wù)器停機(jī)
- 機(jī)房故障:整個(gè)機(jī)房由于自然災(zāi)害或供電原因癱瘓
- AZ故障:同一地理區(qū)域獨(dú)立電力和網(wǎng)絡(luò)的機(jī)房故障
- Region故障:不同地理區(qū)域的一個(gè)Region故障
2)硬件故障的解決方案
- 數(shù)據(jù)冗余技術(shù)【RAID5/6、副本、糾刪碼】
- 多AZ數(shù)據(jù)冗余部署【vivo 3 AZ 部署】
- 跨區(qū)域復(fù)制功能【功能具備,vivo還沒(méi)多地域機(jī)房】
- 故障預(yù)測(cè)+故障發(fā)現(xiàn)+故障修復(fù)
如果我們只按照傳統(tǒng)方式,增加K,減少M(fèi),修復(fù)帶寬就會(huì)非常高。并且,多AZ之間的修復(fù)帶寬本身成本較高,所以給可靠性帶來(lái)了很大壓力。因此,我們?cè)O(shè)計(jì)了一個(gè)低冗余度、支持多AZ部署、且修復(fù)帶寬較少的糾刪碼優(yōu)化方案。
上方右圖來(lái)自2021年亞馬遜AWS S3關(guān)于可靠性保障的演講,這幅圖提供了兩個(gè)重要的信息。
- 第一個(gè)信息:11個(gè)9是通過(guò)可靠性模型量化得到的,它與磁盤(pán)的故障率、故障發(fā)現(xiàn)的時(shí)間和消費(fèi)時(shí)長(zhǎng)是強(qiáng)相關(guān)的。
- 第二個(gè)信息:可靠性評(píng)估模型,用于指導(dǎo)線上環(huán)境的修復(fù)策略,以及指導(dǎo)跨AZ糾刪碼技術(shù)存儲(chǔ)系統(tǒng)的設(shè)計(jì)。
三、建模:存儲(chǔ)可靠性量化模型
1.11個(gè)9的由來(lái)
11個(gè)9是亞馬遜在2006年提出的可靠性標(biāo)準(zhǔn),所有云存儲(chǔ)提供商都像軍備競(jìng)賽一樣,聲稱自己能提供多少個(gè)9,但行業(yè)內(nèi)幾乎沒(méi)有任何一家云廠商能提供權(quán)威的量化模型。
這11個(gè)9如何量化?
亞馬遜的官方文檔提供了兩種定義:
- 第一個(gè)定義是,存儲(chǔ)一千萬(wàn)個(gè)對(duì)象預(yù)期平均每1萬(wàn)年發(fā)生一個(gè)對(duì)象丟失。這個(gè)定義很好理解,但它實(shí)際上并不好量化;
- 第二個(gè)定義是,平均每年對(duì)象的丟失率預(yù)計(jì)為0.000000001%。這個(gè)定義具體到每年的對(duì)象丟失率,進(jìn)入到統(tǒng)計(jì)學(xué)概率的層面,為量化提供可能。
回顧那張AWS演講里的圖,它引入了兩個(gè)比較重要的參考指標(biāo):硬件的平均故障時(shí)間、故障的平均修復(fù)時(shí)長(zhǎng),對(duì)應(yīng)到年平均指標(biāo)的層面上,就是年平均故障率和年平均修復(fù)率。
2.可靠性模型影響因素
接下來(lái),介紹建立模型的具體影響因素。如下圖所示,如果第一個(gè)磁盤(pán)爆炸,后面磁盤(pán)的數(shù)據(jù)需要對(duì)它進(jìn)行修復(fù),這個(gè)過(guò)程可能涉及到修復(fù)帶寬,所以修復(fù)帶寬的大小一定會(huì)對(duì)可靠性產(chǎn)生影響。這個(gè)磁盤(pán)本身的數(shù)據(jù)量、系統(tǒng)節(jié)點(diǎn)數(shù)目也影響了修復(fù)時(shí)間,這三個(gè)指標(biāo)實(shí)際上影響了修復(fù)率的值。
副本的數(shù)量、磁盤(pán)故障率對(duì)可靠性也是有影響的,這比較好理解,如何理解數(shù)據(jù)分布系數(shù)對(duì)可靠性的影響?
如上圖左下角所示,備份有兩種數(shù)據(jù)分布方式。在第一種備份的數(shù)據(jù)分布狀況下,如果第一個(gè)磁盤(pán)掛了,只能依靠第二個(gè)磁盤(pán)進(jìn)行修復(fù),即只有一個(gè)盤(pán)進(jìn)行修復(fù),所以速度較慢。
第二種備份將數(shù)據(jù)分塊打散,其他三個(gè)磁盤(pán)都存儲(chǔ)一部分?jǐn)?shù)據(jù)。第一個(gè)磁盤(pán)掛掉后,就有多個(gè)磁盤(pán)并行修復(fù),速度會(huì)更快。
這是不是說(shuō)明第二種備份方式就是最好的?也不一定。因?yàn)榈谝环N備份雖然修復(fù)速度慢,但正好修復(fù)了掛掉的數(shù)據(jù)。用第二種備份方式,修復(fù)的數(shù)據(jù)可能不是掛掉的數(shù)據(jù),實(shí)際存在數(shù)據(jù)丟失情況,因此,數(shù)據(jù)分布系數(shù)對(duì)可靠性也有影響。
3.MTTDL可靠性模型
以下介紹幾個(gè)重要的存儲(chǔ)可靠性量化模型。第一個(gè)是MTTDL(平均系統(tǒng)數(shù)據(jù)丟失時(shí)間),它和磁盤(pán)的MTTF的區(qū)別在于,MTTDL用于衡量系統(tǒng)平均數(shù)據(jù)丟失時(shí)間。
MTTDL模型在1994年被提出,1.0版本基于Markov鏈推導(dǎo)而來(lái),上圖列出了一個(gè)簡(jiǎn)化版的計(jì)算公式。相對(duì)于1.0版本,最近幾年出現(xiàn)的MTTDL的2.0版本,引入了剛才講到的數(shù)據(jù)分布系數(shù)。
MTTDL有幾個(gè)缺點(diǎn):第一個(gè)缺點(diǎn)是,它基于Markov鏈的方式;第二個(gè)缺點(diǎn)是,基于當(dāng)前整個(gè)系統(tǒng)的故障平均時(shí)間,它是服從指數(shù)分布的。
另外,前期的MTTDL模型沒(méi)有考慮扇區(qū)錯(cuò)誤,所以近期的MTTDL優(yōu)化版本屏蔽了Markov鏈的劣勢(shì),不使用這種方式建模;將指數(shù)分布優(yōu)化成,故障率可以動(dòng)態(tài)調(diào)整的Weibull分布;考慮獨(dú)立扇區(qū)、相關(guān)性扇區(qū)的錯(cuò)誤;考慮修復(fù)時(shí)長(zhǎng)等NORMAL指標(biāo)。
MTTDL模型對(duì)不同系統(tǒng)設(shè)計(jì)的可靠性進(jìn)行優(yōu)劣評(píng)估,起到了非常大的作用。
4.EAFDL可靠性模型
MTTDL的定義是,平均系統(tǒng)的丟失數(shù)據(jù)的時(shí)長(zhǎng)。它有兩個(gè)特點(diǎn):第一,MTTDL越高,丟數(shù)據(jù)頻率越低;第二,它只關(guān)注丟失的頻率,不關(guān)注每次丟失數(shù)據(jù)的數(shù)量。
EAFDL的定義是,預(yù)期每年數(shù)據(jù)的丟失比例。EAFDL的定義更接近11個(gè)9的定義,因?yàn)?1個(gè)9的定義是平均每年對(duì)象的丟失率,所以EAFDL會(huì)比MTTDL會(huì)更貼近11個(gè)9的計(jì)算。
EAFDL的計(jì)算公式如上圖,它在MTTDL的基礎(chǔ)上,引入了丟失的平均數(shù)據(jù)量,它在mtdl的基礎(chǔ)之上,引入了丟失平均數(shù)據(jù)量在用戶總數(shù)的占比。
但在真實(shí)的場(chǎng)景下,EAFDL模型不一定會(huì)比MTTDL模型更好。
例如,F(xiàn)acebook曾經(jīng)公開(kāi)了一篇論文,講到在大規(guī)模idc部署的情況之下,他們更傾向于控制丟失的頻率,而非丟失事件的數(shù)據(jù)量。因?yàn)槊看我驗(yàn)閬G失事件都會(huì)產(chǎn)生固定成本,而固定成本的影響較大。所以真實(shí)情況下,EAFDL模型不能完全替代MTTDL模型。
如果側(cè)重丟失的頻率,那么在平時(shí)系統(tǒng)設(shè)計(jì)時(shí),可以不斷提高M(jìn)TTDL。如果大家設(shè)計(jì)的MTTDL都差不多,下一步才會(huì)考慮是否應(yīng)該讓EAFDL最小化。
如果側(cè)重丟失的數(shù)量,在系統(tǒng)測(cè)試時(shí),可以不斷讓EAFDL最小化,同時(shí)讓MTTDL最大化。
四、實(shí)踐:存儲(chǔ)可靠性評(píng)估實(shí)踐
1.vivo可靠性建模思路
我們的建模思路對(duì)上述模型進(jìn)行取舍,取的是什么?我們將MTTDL的頻率維度、EAFDL的丟失量維度和數(shù)據(jù)分布系數(shù),納入到建模思路。
舍的是什么?我們屏蔽了MTTDL的指數(shù)分布、扇區(qū)錯(cuò)誤的建模,舍去了Markov鏈的建模。
2.vivo可靠型模型
上圖是整體建模的參數(shù)引入,和之前的參數(shù)是類(lèi)似的。
區(qū)別在于,平時(shí)磁盤(pán)硬件廠商對(duì)外報(bào)AFR參數(shù)有兩個(gè)指標(biāo):一個(gè)是MTBF,一個(gè)是AFR,我們將AFR引入到建模。同時(shí),我們也參照了一家云端廠商Backblaze的公開(kāi)模型介紹,他們利用泊松分布,模擬年度硬盤(pán)故障數(shù)量的分布。基于這兩個(gè)角色,我們制作了副本和糾刪碼的可靠性模型。
建模同時(shí),我們也使用了EAFDL的模型,并引入了丟失的數(shù)據(jù)量在整個(gè)用戶數(shù)據(jù)量的占比。
上圖右下角的表格,是我們基于副本模式進(jìn)行的實(shí)驗(yàn)數(shù)據(jù)。實(shí)驗(yàn)?zāi)康闹饕牵浞烛?yàn)證不同建模參數(shù)對(duì)可靠性的影響,進(jìn)而得出結(jié)論。部分結(jié)論可以從原理層面推斷,比如,AFR越小,可靠性越高;存儲(chǔ)利用率低,可靠性越高;修復(fù)帶寬越高,可靠性越高;副本和檢驗(yàn)位數(shù)越高,可靠性越高。
但是,機(jī)器數(shù)量越多,它的可靠性不一定越高;數(shù)據(jù)分布因子越大,可靠性會(huì)降低,需要我們?cè)谡麄€(gè)系統(tǒng)中進(jìn)行權(quán)衡。
3.可靠性評(píng)估平臺(tái)化建設(shè)
評(píng)估平臺(tái)的建設(shè)基于兩個(gè)原則:第一,需要評(píng)估新老方案的可靠性優(yōu)劣;第二,需要近實(shí)時(shí)地評(píng)估線上系統(tǒng)可靠性的風(fēng)險(xiǎn)。
五、思考:存儲(chǔ)可靠性評(píng)估思考
1.方向思考
我們有兩個(gè)呼吁:
- 共享數(shù)據(jù):現(xiàn)在各大提供分布式存儲(chǔ)的廠商之所以沒(méi)公開(kāi)相關(guān)可靠性計(jì)算模型,是因?yàn)榻y(tǒng)計(jì)樣本數(shù)據(jù)不足。如果全行業(yè)能夠分享各自的部分統(tǒng)計(jì)數(shù)據(jù),樣本量足夠大,就有希望建設(shè)最真實(shí)的評(píng)估模型。
- 統(tǒng)一標(biāo)準(zhǔn):云存儲(chǔ)領(lǐng)域相關(guān)的牽頭企業(yè),基于公司內(nèi)部的海量樣本數(shù)據(jù),能夠分享一個(gè)比較權(quán)威的考勤評(píng)估模型,為業(yè)界提供指引。
IliasIliadis的論文非常有價(jià)值,他從2000年左右開(kāi)始,在CTRQ發(fā)表眾多關(guān)于云存儲(chǔ)系統(tǒng)的可靠性模型研究。大家如果感興趣,可以搜索看看。
2.未來(lái)規(guī)劃
未來(lái),我們可能會(huì)引入扇區(qū)錯(cuò)誤因素,重新建模。
當(dāng)前沒(méi)有引入扇區(qū)錯(cuò)誤,是因?yàn)槟壳皹I(yè)界提供的均值指標(biāo),權(quán)威性還有待考證。扇區(qū)錯(cuò)誤是磁盤(pán)里比較常見(jiàn)的錯(cuò)誤,不一定是獨(dú)立的,可能具有相關(guān)性。所以后續(xù)等相應(yīng)指標(biāo)的真實(shí)性足夠后,我們會(huì)考慮進(jìn)行重新監(jiān)管。
- 軟件故障:自動(dòng)化測(cè)試框架
- 數(shù)據(jù)損壞:自適應(yīng)Data-scrubbing
- 惡意竊取:MFA-Delete特性
- 人為失誤:運(yùn)維自動(dòng)化率進(jìn)一步提升、遵循POLP
- 硬件故障:進(jìn)一步提升故障預(yù)測(cè)+故障檢測(cè)+故障修復(fù)能力,進(jìn)一步設(shè)計(jì)糾刪碼方案使得可靠性+成本兼顧
Q&A
Q1:您覺(jué)得提升可靠性的工作中,近期哪一部分改進(jìn)的影響最大?
A1:近期我們建立了可靠性模型,為什么要建模?因?yàn)槲覀兡壳霸谶M(jìn)行糾刪碼的相關(guān)優(yōu)化,如果糾刪碼的冗余度偏低,就無(wú)法保證可靠性,所以我們建立了一套模型去評(píng)估。
當(dāng)然這個(gè)模型本身的量級(jí)不一定能達(dá)到11個(gè)9,但相對(duì)于線上這套系統(tǒng),它可以看出好還是壞。建立這個(gè)模型,方便我們后續(xù)算法優(yōu)化時(shí)進(jìn)行參考。如果你的算法比較極端,比如下降的量級(jí)比較大,可能就要推翻算法,重新設(shè)計(jì)。