阿里云对数据可靠性保障的一些思考
互聯(lián)網(wǎng)時代的數(shù)據(jù)重要性不言而喻,任何數(shù)據(jù)的丟失都會給企事業(yè)單位、政府機關(guān)等造成無法計算和無法彌補的損失,尤其隨著云計算和大數(shù)據(jù)時代的到來,數(shù)據(jù)中心的規(guī)模日益增大,環(huán)境更加復(fù)雜,云上客戶群體越來越龐大,從而造成硬件故障、軟件失效等錯誤發(fā)生的頻率也在猛增,任何架構(gòu)和流程上的疏漏都可能會造成大面積的數(shù)據(jù)丟失。由此可見,保證客戶的數(shù)據(jù)可靠性對云計算服務(wù)提供商有多重要。
阿里云自研的盤古作為一個已經(jīng)演進了近10年的分布式存儲系統(tǒng),經(jīng)受了阿里巴巴內(nèi)部各種產(chǎn)品、各種硬件的磨煉,發(fā)布到公有云來普惠大眾,讓每個基于阿里云的用戶都可以享受到世界領(lǐng)先的數(shù)據(jù)可靠性服務(wù)。因此,在此分享一下阿里云自研的分布式存儲系統(tǒng)——盤古針對數(shù)據(jù)可靠性問題的保障。
說起云環(huán)境下的數(shù)據(jù)可靠性,相信更多的一般云用戶想到的是硬件錯誤,這類錯誤非常多,Firmware引起的靜默數(shù)據(jù)丟失只是非常罕見的一類錯誤。但是,硬件錯誤只是云環(huán)境下威脅數(shù)據(jù)可靠性的一小部分因素,導(dǎo)致數(shù)據(jù)丟失的可能會是軟件、運維部分出現(xiàn)錯誤。由此,可以看出在云環(huán)境下保證客戶數(shù)據(jù)可靠性,不單單是硬件或者某一方面的事情,其涉及到存儲系統(tǒng)的方方面面,是一個龐大的系統(tǒng)工程,這就要求云服務(wù)提供商在各方面都能提供穩(wěn)定的、可靠的、有效的措施來保障客戶的數(shù)據(jù)。
數(shù)據(jù)可靠性的威脅一般包括硬件、軟件、運維等方面。
硬件威脅:
硬件錯誤類型非常多,包括磁盤壞道、Firmware bug磁盤靜默錯誤導(dǎo)致數(shù)據(jù)損壞無法及時發(fā)現(xiàn)、電壓不穩(wěn)定導(dǎo)致數(shù)據(jù)未寫入但返回寫入成功、SSD長時間下線導(dǎo)致數(shù)據(jù)丟失、網(wǎng)絡(luò)傳輸錯誤導(dǎo)致數(shù)據(jù)通過網(wǎng)卡后產(chǎn)生bits反轉(zhuǎn)等,。
軟件威脅:
內(nèi)核bug導(dǎo)致的文件系統(tǒng)數(shù)據(jù)錯亂、系統(tǒng)Page cache導(dǎo)致的機器重啟和機房掉電丟失數(shù)據(jù)、野指針、多線程競爭、上層應(yīng)用程序指針錯亂導(dǎo)致正在被寫入和讀取的數(shù)據(jù)污染、存儲層軟件在機制上有數(shù)據(jù)丟失的漏洞等。
運維威脅:
運維是當前丟失數(shù)據(jù)概率最高的因素,包括客戶的誤操作、誤刪除等因素。
對于數(shù)據(jù)可靠性來說,數(shù)據(jù)副本技術(shù)是目前大多數(shù)客戶最容易理解的容錯技術(shù)了,也是提升分布式系統(tǒng)可靠性、可用性、可擴展性的常用手段之一。目前,阿里云及各家廠商都提供了三副本技術(shù)保障數(shù)據(jù)的可靠,另外阿里云的三副本技術(shù)是支持跨可用區(qū)的,考慮到跨可用區(qū)的成本較高,現(xiàn)在還僅有少數(shù)廠商才能做到。但是,數(shù)據(jù)可靠性保障不是僅數(shù)據(jù)副本技術(shù)就能做到的,其是一個龐大的系統(tǒng)工程,并不是某一項或幾項技術(shù)手段就能夠保障的,必須從數(shù)據(jù)中心的基礎(chǔ)建設(shè)開始、一直到整個軟件棧的構(gòu)建以及多種技術(shù)手段共同來保障。下面將詳細分析阿里云在云環(huán)境下如何系統(tǒng)保障客戶數(shù)據(jù)的可靠性。
3.1. 數(shù)據(jù)中心基礎(chǔ)設(shè)施建設(shè)
基礎(chǔ)設(shè)施硬件一般會在不同時間分批次購買不同廠商的硬件設(shè)備,其中就包含各種類型的磁盤設(shè)備。之所以這樣做,除了從成本上考慮之外,還需要考慮影響范圍問題。單純一個廠商采購一旦出現(xiàn)類似Firmware的問題就出現(xiàn)大面積數(shù)據(jù)丟失,影響眾多用戶。另外硬件投入使用中也需要對使用情況進行跟蹤,例如磁盤設(shè)備由于組裝、運輸?shù)扔绊?#xff0c;在初期投入生產(chǎn)使用時出錯率遠遠高于后期正常使用期間的出錯率,所以剛投入使用的硬件應(yīng)該有一個烤機的過程,將出錯率降低后再投入使用,買來就大面積使用的方式是非常不負責任的一種做法。投入使用后也絲毫不能松懈,需要跟蹤每個批次磁盤的Firmware版本更新通知,一旦發(fā)現(xiàn)高危風險更新,需要及時打布丁或者將數(shù)據(jù)遷移,把數(shù)據(jù)丟失風險降低到最低。
3.2. 數(shù)據(jù)可靠的軟件棧構(gòu)建
硬件錯誤類型非常多,想要在數(shù)量眾多的硬件錯誤中,預(yù)期未來會出現(xiàn)哪種錯誤是非常困難的,所以需要在軟件設(shè)計上規(guī)避掉硬件問題,設(shè)計一套優(yōu)良的軟件棧來防御預(yù)期和非預(yù)期的錯誤。
首先軟件需要清晰的劃分層次,層次間通過清晰的接口來協(xié)作,實現(xiàn)端到端的保證在每個環(huán)節(jié)都保證可靠性、無數(shù)據(jù)污染。
上層應(yīng)用系統(tǒng)在接收到客戶數(shù)據(jù)的第一刻起,首先做好數(shù)據(jù)防錯準備,所有后續(xù)操作都依賴于此步驟的準備工作。數(shù)據(jù)防錯最基本高效方法是對用戶數(shù)據(jù)產(chǎn)生Checksum數(shù)據(jù)并傳遞到之后每一個層次,更高可靠性可以利用對數(shù)據(jù)做MD5進行保護,在之后的說明中用Checksum為例來說明如何對數(shù)據(jù)進行保護。
層次間傳遞數(shù)據(jù)的所有接口必須攜帶數(shù)據(jù)校驗Checksum類型和數(shù)據(jù)的Checksum值。在本層次對數(shù)據(jù)加工的過程中,首先通過數(shù)據(jù)加工產(chǎn)生新數(shù)據(jù)和數(shù)據(jù)對應(yīng)的Checksum,之后對新數(shù)據(jù)運行逆運算來重新產(chǎn)生原始數(shù)據(jù)并做驗證對比,保證加工過程并未損壞任何數(shù)據(jù),同時給下一個處理步驟提供數(shù)據(jù)檢查依據(jù),直到數(shù)據(jù)和對應(yīng)的Checksum值被存儲到底層盤古系統(tǒng)中。
當系統(tǒng)終端用戶讀取數(shù)據(jù)時,每個層次逐層檢查下層系統(tǒng)的數(shù)據(jù)正確性,并依照數(shù)據(jù)加工流程重新恢復(fù)出用戶需要的數(shù)據(jù)并返回,從而達到了整個阿里云系統(tǒng)對用戶數(shù)據(jù)的全程無漏洞保護。
3.3. 存儲系統(tǒng)設(shè)計要點
當上層業(yè)務(wù)系統(tǒng)加工完成數(shù)據(jù)后存盤過程中,盤古需要利用三副本和Erasure Coding編碼存儲技術(shù)保證不會由于單點硬件/軟件異常導(dǎo)致數(shù)據(jù)損壞和不可用。
3.3.1. 跨多可用區(qū)的三副本技術(shù)
三副本技術(shù)阿里云提供一個扁平的線性存儲空間,在內(nèi)部會對線性地址進行切片,一個分片稱為一個Chunk。對于每一個Chunk,阿里云會復(fù)制出三個副本,并將這些副本按照一定的策略存放在集群中的不同節(jié)點上,保證數(shù)據(jù)的可靠性。
在阿里云數(shù)據(jù)存儲系統(tǒng)中,有三類角色,分別稱為Master、Chunk Server和Client。一個寫操作,經(jīng)過層層轉(zhuǎn)換,最終會交由Client來執(zhí)行,執(zhí)行過程簡要說明如下:
? Client計算出這個寫操作對應(yīng)的Chunk。
? Client向Master查詢該Chunk的三份副本的存放位置。
? Client根據(jù)Master返回的結(jié)果,向這3個Chunk Server發(fā)出寫請求。
? 如果三份都寫成功,Client向客戶返回成功;反之,Client向客戶返回失敗。
Master的分布策略會綜合考慮集群中所有Chunk Server的硬盤使用情況,在不同交換機機架下的分布情況、電源供電情況、機器負載情況,盡量保證一個Chunk的所有副本分布在不同機架下的不同Chunk Server上,有效防止由于一個Chunk Server或一個機架的故障導(dǎo)致的數(shù)據(jù)不可用。
數(shù)據(jù)保護機制
當有數(shù)據(jù)節(jié)點損壞,或者某個數(shù)據(jù)節(jié)點上的部分硬盤發(fā)生故障時,集群中部分Chunk的有效副本數(shù)就會小于3。一旦發(fā)生這種情況,Master就會發(fā)起復(fù)制機制,在Chunk Server之間復(fù)制數(shù)據(jù),使集群中所有Chunk的有效副本數(shù)達到3份。.
支持跨多可用區(qū)的存儲系統(tǒng)
盤古文件系統(tǒng)在生產(chǎn)系統(tǒng)中采用跨多可用區(qū)部署的方式,目前還僅是少數(shù)能做到,經(jīng)典的模式是支持橫跨三個以上可用區(qū),每個可用區(qū)距離30公里到50公里。無論是三副本還是EC(糾刪碼)副本,都是均勻分布在三個可用區(qū)內(nèi)。任何一次寫入都在三個可用區(qū)數(shù)據(jù)落盤后才會返回客戶成功。由于各可用區(qū)的數(shù)據(jù)中心有獨立的供電,網(wǎng)絡(luò)和冷卻系統(tǒng)等,跨多可用區(qū)的存儲提供了數(shù)據(jù)中心級別的容災(zāi)能力,在任一可用區(qū)完全不服務(wù)的情況下,整體服務(wù)無縫切換,數(shù)據(jù)無任何丟失。跨多可用區(qū)對阿里云內(nèi)部核心骨干網(wǎng)絡(luò)的要求非常極高,端到端的延遲要求在穩(wěn)定1毫秒以內(nèi),并且有Tb級別帶寬能力。阿里云投入了大量的資源來建設(shè)高容錯能力和高性能的多可用區(qū)互訪的內(nèi)部核心骨干網(wǎng)絡(luò)。
綜上所述,對云盤上的數(shù)據(jù)而言,所有用戶層面的操作都會同步到底層三份副本上。因此,無論遇到軟硬件的錯誤,這種模式都能夠保障數(shù)據(jù)的可靠性和一致性。
3.3.2. 糾刪碼技術(shù)(Erasure Coding)
對于可靠性來說,數(shù)據(jù)副本技術(shù)是最容易理解的容錯技術(shù),目前一般云環(huán)境下采用三副本技術(shù)。數(shù)據(jù)副本技術(shù)另一大優(yōu)勢在于數(shù)據(jù)恢復(fù)的過程中對計算資源的消耗極少。由于采用的是直接復(fù)制,除了數(shù)據(jù)的存放位置可能需要計算之外,其它過程對CPU的利用極少。但是,使用數(shù)據(jù)副本技術(shù)也會帶來兩大方面的問題,一個是數(shù)據(jù)副本所占用的空間太大,對于網(wǎng)絡(luò)以及磁盤空間都有著極大的負擔;另一個問題在于維護副本間的數(shù)據(jù)一致性會帶來極大的資源消耗。
為了提高磁盤的利用率,阿里云的數(shù)據(jù)中心系統(tǒng)使用冗余糾刪碼的方法來降低所需要的磁盤,并保證相同的容錯能力。Reed Solomon是目前在云存儲系統(tǒng)中最常用的糾刪碼算法。在這個編碼中,假設(shè)原始數(shù)據(jù)為k 個大小相同的塊,糾刪碼通過編碼產(chǎn)生m 個冗余塊,這n = k +m 個塊中如果損壞了不超過m 個塊,則利用剩下的至少k 個塊可以將全部的n 個塊恢復(fù)出來。如果采用k=8, m=4的情況下,需要150%存儲空間即可,并且可以容忍4個磁盤的錯誤,糾刪碼技術(shù)對副本技術(shù)很大的改進。因此,云存儲系統(tǒng)保證數(shù)據(jù)可靠性,研究糾刪碼極其重要?,F(xiàn)在通常采用的副本技術(shù)并發(fā)讀性能好,數(shù)據(jù)恢復(fù)速度快,但成本較高,通常用于保存熱數(shù)據(jù);采用糾刪碼成本低,容錯能力可以進行選擇,但數(shù)據(jù)恢復(fù)代價高,恢復(fù)速度慢,通常用于保存冷數(shù)據(jù)。
傳統(tǒng)的盤古文件系統(tǒng)中的糾刪碼技術(shù)醞釀于2012年末,目標旨在通過應(yīng)用Erasure Codes編碼,在保障數(shù)據(jù)安全的前提下節(jié)省盤古數(shù)據(jù)的存儲空間,通過使用某種Erasure Codes編碼來達到節(jié)省空間的目的,將數(shù)據(jù)存儲效率提升了100%甚至更多。然而,由于其潛在的網(wǎng)絡(luò)流量、空間利用率等方面的局限性,2017年新一代盤古2.0對糾刪碼進行了優(yōu)化和升級,除保持原有糾刪碼技術(shù)的基本功能之外,在設(shè)計上,讀寫場景、流量優(yōu)化、空間效率上都會有大幅提升。
目前盤古2.0的糾刪碼技術(shù)對外支持多種存儲業(yè)務(wù),被大量而廣泛的使用各種應(yīng)用場景。阿里云通過采用Cauchy Reed Solomon(CRS)算法編碼,該算法簡單,編解碼效率很高使得相對于盤古三副本模式下3倍的存儲效率提升到了約2倍,同時能保證略好的理論數(shù)據(jù)安全性。阿里云存儲的metadata需要設(shè)置數(shù)據(jù)塊的數(shù)目和校驗塊的數(shù)目,以(3,2)配置為例,阿里云將一塊數(shù)據(jù)拆成3份相同大小的數(shù)據(jù)塊,并利用ErasureCode計算出2塊校驗塊,將這五份數(shù)據(jù)分別寫到5塊機器上,如果其中任意2塊數(shù)據(jù)出現(xiàn)了錯誤,都可以根據(jù)存活下來的塊進行數(shù)據(jù)恢復(fù),從而保證了數(shù)據(jù)的可靠性。
另外,盤古將Erasure Codes的能力實現(xiàn)在盤古內(nèi)部而不是外部。HDFS Raid將Raid功能以contrib包的形式實現(xiàn),獨立于HDFS核心之外。好處是不會增加核心文件系統(tǒng)的復(fù)雜度,壞處是效率和靈活度不足。盤古將Raid功能實現(xiàn)在核心中,通過同各個子模塊的緊密結(jié)合實現(xiàn)了最高的效率和靈活度。同時,支持實時編解碼及文件級別指定編碼方法和編碼參數(shù)。實時編碼直接寫入Raid文件,無需后臺轉(zhuǎn)換,能最大程度節(jié)省網(wǎng)絡(luò)和計算資源。文件級別編碼參數(shù)的指定使得盤古能同時適用于在線和離線應(yīng)用的獨特要求。
綜上所述,阿里云已將糾刪碼技術(shù)大量應(yīng)用在了云存儲環(huán)境和產(chǎn)品中,在保障客戶數(shù)據(jù)可靠性的前提下,提升存儲效率。未來阿里云將繼續(xù)深入研究糾刪碼技術(shù)的應(yīng)用,提升編碼速度和數(shù)據(jù)恢復(fù)速度,拓展應(yīng)用場景。目前,阿里云已和國內(nèi)外頂尖高校在糾刪碼技術(shù)領(lǐng)域開展了廣泛的科研合作,如清華大學(xué)、上海交通大學(xué)等,研究不同校驗鏈融合的原理與策略和優(yōu)化方法,盡可能降低跨AZ數(shù)據(jù)遷移、恢復(fù)和校驗修改的資源開銷,大大提高網(wǎng)絡(luò)效率,針對不同的應(yīng)用場景,在同時兼顧性能、成本、可靠性、可用性、可擴展性和管理策略的基礎(chǔ)上進行優(yōu)化。
3.3.3. 及時檢測和快速恢復(fù)技術(shù)
結(jié)合三副本和糾刪碼技術(shù)確實能夠保證數(shù)據(jù)一定程度的可靠性,但也需要充分考慮到數(shù)據(jù)檢測和恢復(fù),才能更大程度地保證客戶的數(shù)據(jù)可靠性和可用性。因此,阿里云的盤古提供了及時檢測和快速恢復(fù)技術(shù),其設(shè)計要點:
上面的策略中,及時發(fā)現(xiàn)錯誤、快速數(shù)據(jù)恢復(fù)和數(shù)據(jù)原有的容錯能力配置共同決定的數(shù)據(jù)可靠性有多高。
在數(shù)據(jù)存儲格式上也需要非??b密的設(shè)計,需要保證:
出現(xiàn)數(shù)據(jù)損壞可以高效發(fā)現(xiàn),發(fā)現(xiàn)過程可以是在用戶觸發(fā)的讀操作,也可能是存儲產(chǎn)品的后臺掃描等過程;
如果出現(xiàn)了元數(shù)據(jù)丟失、文件系統(tǒng)損壞、運維誤操作等情況或者Firmware導(dǎo)致的文件系統(tǒng)元數(shù)據(jù)損壞,可以使用掃描落盤數(shù)據(jù)方式來快速重建元數(shù)據(jù),將數(shù)據(jù)丟失風險降低到最低。這種縝密的設(shè)計是盤古系統(tǒng)接近10年的生命期內(nèi)能保證無數(shù)據(jù)丟失的安身立命的基本功。
3.3.4. 端到端CRC保護
盤古系統(tǒng)提供端到端的數(shù)據(jù)校驗,上層的云存儲產(chǎn)品提供數(shù)據(jù)的CRC,盤古在落盤的時候進行校驗,并且把CRC和數(shù)據(jù)一起寫入磁盤。后臺任務(wù)也一直巡檢,檢查存儲介質(zhì)可能出現(xiàn)的位跳變(bit rot)錯誤,一旦發(fā)現(xiàn)和寫入的CRC不符,找到正確的副本,重新復(fù)制一份新的副本。
任何對數(shù)據(jù)轉(zhuǎn)換的操作前后遵循檢查步驟:
? 數(shù)據(jù)D轉(zhuǎn)換為D’,計算CRC C’
? 逆轉(zhuǎn)換D’到D,計算C’’,檢查C ?= C’’
? 進行后續(xù)數(shù)據(jù)傳輸或存儲
防御能力:
? 代碼野指針導(dǎo)致的內(nèi)存數(shù)據(jù)污染
? 網(wǎng)絡(luò)bits翻轉(zhuǎn)導(dǎo)致的數(shù)據(jù)錯誤
? 磁盤靜默錯誤導(dǎo)致的數(shù)據(jù)損壞
數(shù)據(jù)塊唯一性特征作為落盤前CRC的初始值:
? 防止內(nèi)核文件系統(tǒng)錯亂
? 數(shù)據(jù)丟失后裸盤掃描特征識別
數(shù)據(jù)節(jié)點定期全盤CRC檢查
? 防止數(shù)據(jù)靜默錯誤
3.3.5. 灰度變更
灰度變更是另外一項保障客戶數(shù)據(jù)可靠性的關(guān)鍵技術(shù)。顧名思義,灰度變更是指在黑與白之間,能夠平滑過渡的一種變更方式。這種變更方式類似于A/B test,讓需要變更內(nèi)容一部分先變更到目標內(nèi)容,一部分保留,如果變更后的內(nèi)容在運行一段時間內(nèi)沒有發(fā)生錯誤,再逐漸擴大范圍,把全部內(nèi)容變更為目標內(nèi)容。灰度變更可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時候就可以發(fā)現(xiàn)、調(diào)整問題,以保證其影響度?;叶茸兏膬?yōu)勢在于:
? 云服務(wù)數(shù)據(jù)可靠性及可用性優(yōu)先保障。
? 灰度變更能降低云操作風險,減少影響范圍,并且范圍可控。
? 方便集中監(jiān)控日志,全量變更由于負載均衡的作用,需要整體跟蹤,效率較低。
? 方便數(shù)據(jù)回滾。
? 避免出現(xiàn)錯誤給用戶帶來壞的體驗。
阿里云將灰度變更用于硬件、軟件及備份容災(zāi)等方面,具體如下:
軟件灰度:
? 操作系統(tǒng)升級
? 軟件版本灰度
硬件灰度:
? 新機型適配
? 新存儲介質(zhì)適配
跨地域容災(zāi)備份
? 防止自然災(zāi)害、戰(zhàn)爭引起的數(shù)據(jù)丟失
? 增加系統(tǒng)可用性
3.3.6. 防御運維誤操作
? 盤古Pin
支持哪些頂級目錄是不允許刪除的,可以有效防止命令行中的空格導(dǎo)致的頂級目錄被誤刪除的問題。
? 回收站
目錄樹回收站:保證文件刪除后可以在目錄樹的回收站中保留一個可配置時間。
數(shù)據(jù)節(jié)點回收站:在磁盤空間富裕時,盡量保留刪除的數(shù)據(jù)不被覆蓋,給誤刪除數(shù)據(jù)恢復(fù)留余地。
? 元數(shù)據(jù)備份
專有云中,定期調(diào)用盤古功能對元數(shù)據(jù)的增量日志進行存儲備份,防止數(shù)據(jù)被誤刪后恢復(fù)時間過長的問題。
? 盤古集群唯一標識
防止運維操作數(shù)據(jù)節(jié)點從一個集群下線后重新上線到其他集群后數(shù)據(jù)被清空的問題。
? 格式化審批
所有數(shù)據(jù)盤格式化都必須經(jīng)過盤古管控模塊確認數(shù)據(jù)安全的前提下才允許進行下線格式化。
? 下線審批
機器和磁盤下線前需要經(jīng)過全盤掃描后,保證上面的數(shù)據(jù)在其他機器上有足后的副本數(shù)后才允許下線,防止誤操作導(dǎo)致服務(wù)停止。
綜上所述,阿里云非常重視客戶數(shù)據(jù)的可靠性,將其作為一個龐大的系統(tǒng)工程進行設(shè)計和保障,久經(jīng)磨練的盤古在經(jīng)歷了多次軟件重構(gòu)、架構(gòu)迭代之后,最終作為統(tǒng)一的存儲平臺支撐各種云產(chǎn)品并推向公共云、專有云,利用跨多可用區(qū)的三副本技術(shù)、糾刪碼技術(shù)、糾刪碼和多副本融合技術(shù)、及時檢測、快速恢復(fù)、端到端CRC保護、灰度變更、防止運維誤操作等一系列的技術(shù)手段,為客戶的數(shù)據(jù)提供了一套系統(tǒng)的保障方案,保障客戶能夠抵御涉及到硬件、軟件及運維等多方面的錯誤,也保證了阿里云為用戶提供世界領(lǐng)先的數(shù)據(jù)可靠性。
本文作者:劉晨旭
閱讀原文
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的阿里云对数据可靠性保障的一些思考的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到门牙断了一半是什么预兆
- 下一篇: Github入门详情教程