- 論壇徽章:
- 8
|
本文轉(zhuǎn)自InfoQ,作者楊賽
現(xiàn)在分布式存儲(chǔ)這一塊,有塊存儲(chǔ)、對(duì)象存儲(chǔ)、文件存儲(chǔ),有不同的開(kāi)源項(xiàng)目如Ceph、GlusterFS、Sheepdog、Swift,還有不同的商業(yè)實(shí)現(xiàn)如Google、AWS、微軟、金山、七牛、又拍、阿里云還有QingCloud,思路或多或少都有些不同,可選的硬件種類也很多。似乎可選的東西太多了,而且各有優(yōu)缺點(diǎn)。
選擇的多樣性是好事,同時(shí)也對(duì)技術(shù)選型人員的知識(shí)和能力提出了更高的要求。在本次座談會(huì)上,我們提出了有關(guān)分布式存儲(chǔ)的三個(gè)基本問(wèn)題,邀請(qǐng)領(lǐng)域內(nèi)各路專家來(lái)分享他們的解讀。本次邀請(qǐng)嘉賓分別是:
王豪邁(麥子邁|wheats),UnitedStack工程師,擅長(zhǎng)OpenStack、單機(jī)物理存儲(chǔ)、分布式存儲(chǔ)系統(tǒng)、Web應(yīng)用棧等領(lǐng)域。OpenStack Nova、Cinder、Trove、Ceph、VirtualBox等項(xiàng)目的貢獻(xiàn)者。他的個(gè)人博客是麥子邁。
許式偉,七牛云存儲(chǔ)CEO,《Go語(yǔ)言編程》一書(shū)作者,ECUG大會(huì)發(fā)起者。2000年畢業(yè)于南京大學(xué),后進(jìn)入金山的WPS Office事業(yè)部,從事Office軟件的研發(fā),是WPS Office 2005的首席架構(gòu)師。2007年,許式偉創(chuàng)立了金山實(shí)驗(yàn)室,致力于云存儲(chǔ)技術(shù)的研究。2009年,許式偉離開(kāi)百度加盟盛大創(chuàng)新院,發(fā)起了盛大祥云計(jì)劃(盛大云前身)。2010年10月發(fā)布了面向個(gè)人的盛大網(wǎng)盤。2011年6月,許式偉離開(kāi)盛大創(chuàng)辦了七牛,專注云存儲(chǔ),專注為創(chuàng)業(yè)者服務(wù)。
甘泉,青云QingCloud聯(lián)合創(chuàng)始人&研發(fā)副總裁(Cofounder & VP of Engineering),具有14年軟件開(kāi)發(fā)相關(guān)工作經(jīng)驗(yàn)。曾在華為公司、IBM 軟件實(shí)驗(yàn)室任職;后在百度網(wǎng)頁(yè)搜索部擔(dān)任阿拉丁產(chǎn)品檢索基礎(chǔ)架構(gòu)負(fù)責(zé)人。對(duì)Linux操作系統(tǒng)、網(wǎng)絡(luò)、存儲(chǔ)以及分布式系統(tǒng)架構(gòu)、軟件工程等方面有比較深入的理解。
王旭,MadeiraCloud CTO,在來(lái)到 Madeira Cloud 之前,曾在盛大云進(jìn)行云硬盤(彈性塊存儲(chǔ))服務(wù)的開(kāi)發(fā)、在中國(guó)移動(dòng)研究院進(jìn)行Hadoop HDFS和彈性存儲(chǔ)服務(wù)的開(kāi)發(fā),是《Cassandra權(quán)威指南》的譯者。
三個(gè)基本問(wèn)題分別是:
對(duì)于一套分布式存儲(chǔ)的方案,怎樣評(píng)估它是好還是不好?
如何對(duì)分布式存儲(chǔ)的不同實(shí)現(xiàn)進(jìn)行分類?
分布式存儲(chǔ)中的“數(shù)據(jù)可靠性”是如何計(jì)算的?
InfoQ:無(wú)論是在做方案的選型,還是實(shí)現(xiàn)一套存儲(chǔ)系統(tǒng),權(quán)衡的因素主要考慮哪些?有沒(méi)有一套比較全面的考量/評(píng)估方式來(lái)決定哪種存儲(chǔ)方案更適合哪種場(chǎng)景?換句話說(shuō):當(dāng)你去看一個(gè)存儲(chǔ)方案的實(shí)現(xiàn),無(wú)論是看代碼還是實(shí)測(cè),你如何評(píng)估這套方案哪里好,哪里不好?
甘泉:其實(shí)評(píng)價(jià)一個(gè)存儲(chǔ)方案好和不好,只有一個(gè)客觀的標(biāo)準(zhǔn),那就是是否能滿足用戶的需求。不站在這個(gè)立場(chǎng)上思考這個(gè)問(wèn)題,就會(huì)將技術(shù)凌駕于用戶需求之上,而技術(shù)應(yīng)該是服務(wù)于用戶需求的。
那么我們可以簡(jiǎn)單的剖析一下用戶對(duì)存儲(chǔ)的需求到底是什么。從青云的角度來(lái)說(shuō),有以下幾點(diǎn)是用戶需要的:
1、運(yùn)行或在線系統(tǒng)需要高性能。這個(gè)不用多說(shuō),用戶的業(yè)務(wù)數(shù)據(jù)幾乎都會(huì)存儲(chǔ)在數(shù)據(jù)庫(kù)里面,沒(méi)有一個(gè)用戶會(huì)覺(jué)得數(shù)據(jù)庫(kù)性能不重要。
2、離線或備份數(shù)據(jù)需要高容量,低價(jià)格。這部分?jǐn)?shù)據(jù)通常量很大,但是對(duì)性能要求不高,對(duì)不經(jīng)常用的東西也不希望負(fù)擔(dān)高額成本。
3、所有的數(shù)據(jù)都必須是可靠的,絕對(duì)不能丟。這是用戶對(duì)于存儲(chǔ)的容忍底線,所有負(fù)責(zé)任的企業(yè)都會(huì)將可靠性放在最重要的位置上,在這個(gè)基礎(chǔ)上能達(dá)到多高的性能就看技術(shù)實(shí)力了。
所以從上面的分析來(lái)看,之所以沒(méi)有銀彈方案,是因?yàn)橛脩魧?duì)存儲(chǔ)的需求差異很大,不同的需求需要用不同的方式來(lái)解決。這就好像現(xiàn)在機(jī)械 硬盤已經(jīng)存在這么多年了,磁帶依然沒(méi)有消失的原因,因?yàn)樗靡环N最廉價(jià)的方式解決了大容量離線數(shù)據(jù)的存儲(chǔ)問(wèn)題,雖然它是最慢的。
王旭:
首先對(duì)象存儲(chǔ)和文件存儲(chǔ)的區(qū)別是不大的,存儲(chǔ)的都是一樣的東西,只是拋棄了統(tǒng)一的命名空間和目錄樹(shù)的結(jié)構(gòu),使得擴(kuò)展起來(lái)桎梏少一些。
獨(dú)立的互聯(lián)網(wǎng)存儲(chǔ)服務(wù)一般都是做對(duì)象存儲(chǔ)的,因?yàn)閴K存儲(chǔ)是給計(jì)算機(jī)用的,對(duì)象存儲(chǔ)是給瀏覽器等HTTP客戶端用的。獨(dú)立服務(wù)所提供的存儲(chǔ)系統(tǒng),訪問(wèn)都來(lái)自互聯(lián)網(wǎng),自然是做對(duì)象存儲(chǔ);與之相對(duì)應(yīng),大部分類AWS的主機(jī)服務(wù)商都會(huì)提供一個(gè)塊存儲(chǔ)服務(wù)搭配主機(jī)服務(wù)。
同一個(gè)服務(wù)商同時(shí)提供兩個(gè)服務(wù)是有好處的,除了提供的服務(wù)比較全這個(gè)優(yōu)點(diǎn)以外,對(duì)象存儲(chǔ)還可以支撐塊存儲(chǔ)的快照、主機(jī)的系統(tǒng)鏡像存儲(chǔ)等應(yīng)用,可以相互結(jié)合的。
權(quán)衡的因素有很多——可靠性要求、可用性要求、時(shí)延要求、一致性要求、使用模式相關(guān)要求(包括請(qǐng)求大小、QPS/IOPS、吞吐)等。
比如:
對(duì)于塊存儲(chǔ),要求的訪問(wèn)時(shí)延是 10ms 級(jí)的,因?yàn)榻o虛擬機(jī)用的,傳統(tǒng)硬盤也是10ms 級(jí)的時(shí)延,請(qǐng)求尺寸都很小,但qps(iops)可能會(huì)很高,那么在這種情況下:
-異地多中心是不現(xiàn)實(shí)的,存儲(chǔ)要和主機(jī)盡量接近,相應(yīng)地可靠性必然會(huì)有所打折
-強(qiáng)一致副本不會(huì)過(guò)多,強(qiáng)一致要求對(duì)時(shí)延有影響
對(duì)于對(duì)象存儲(chǔ),要求的訪問(wèn)時(shí)延是 100ms - 1s 級(jí)的,請(qǐng)求一般是中到大尺寸,低 qps 的,在這種情況下可以用更多的分散副本數(shù)來(lái)?yè)Q取更高的可靠性,但過(guò)多副本增加維持一致性的難度,需要折衷。
另外SSD隨著成本降低,在塊存儲(chǔ)里逐漸成為主流了,以便提供更好的IOPS,AWS這個(gè)月開(kāi)始,創(chuàng)建的EBS卷缺省就是SSD的了。
對(duì)于評(píng)價(jià)一個(gè)實(shí)現(xiàn),首先是看適合不適合這個(gè)用途,然后看這個(gè)方案有沒(méi)有顯著的缺點(diǎn),是否有嚴(yán)重的影響,然后成本之類的也是一個(gè)因素,做軟件的人總覺(jué)的用便宜硬件實(shí)現(xiàn)高大上的服務(wù)才值得吹牛,呵呵。
我得補(bǔ)充一點(diǎn)就是,做存儲(chǔ)這東西是需要良心的,一致性這種東西有的時(shí)候用戶是很難看出來(lái)的,偶爾一個(gè)程序出錯(cuò)了,你一般不會(huì)懷疑是硬盤上存著的數(shù)據(jù)壞了,做存儲(chǔ)服務(wù)的人還是要盡量避免出現(xiàn)這種情況的。底層存儲(chǔ)服務(wù)(有別于數(shù)據(jù)庫(kù))的一致性是一種很難被用戶觀測(cè)到的,但是如果一個(gè)實(shí)現(xiàn)根本沒(méi)達(dá)到應(yīng)有的一致性,比如塊服務(wù),只寫了一個(gè)副本就返回給應(yīng)用說(shuō)寫成功了,這樣是不太道德的,反正我個(gè)人堅(jiān)持應(yīng)該(EBS塊存儲(chǔ))應(yīng)該寫兩個(gè)副本再返回,在這個(gè)約束之內(nèi)來(lái)優(yōu)化。
也就是說(shuō),我的觀點(diǎn)是,先看是否滿足約束,然后看架構(gòu)是否恰當(dāng),最后看細(xì)節(jié)流程的優(yōu)化。
InfoQ:目前分布式存儲(chǔ)從應(yīng)用場(chǎng)景、實(shí)現(xiàn)等層面來(lái)看,是如何分類的?
豪邁:分布式存儲(chǔ)的應(yīng)用場(chǎng)景相對(duì)于其存儲(chǔ)接口,現(xiàn)在流行分為三種:
對(duì)象存儲(chǔ): 也就是通常意義的鍵值存儲(chǔ),其接口就是簡(jiǎn)單的GET、PUT、DEL和其他擴(kuò)展,如七牛、又拍、Swift、S3。
塊存儲(chǔ): 這種接口通常以QEMU Driver或者Kernel Module的方式存在,這種接口需要實(shí)現(xiàn)Linux的Block Device的接口或者QEMU提供的Block Driver接口,如Sheepdog,AWS的EBS,青云的云硬盤和阿里云的盤古系統(tǒng),還有Ceph的RBD(RBD是Ceph面向塊存儲(chǔ)的接口)。
文件存儲(chǔ): 通常意義是支持POSIX接口,它跟傳統(tǒng)的文件系統(tǒng)如Ext4是一個(gè)類型的,但區(qū)別在于分布式存儲(chǔ)提供了并行化的能力,如Ceph的CephFS(CephFS是Ceph面向文件存儲(chǔ)的接口),但是有時(shí)候又會(huì)把GFS,HDFS這種非POSIX接口的類文件存儲(chǔ)接口歸入此類。
按照這三種接口和其應(yīng)用場(chǎng)景,很容易了解這三種類型的IO特點(diǎn),括號(hào)里代表了它在非分布式情況下的對(duì)應(yīng):
對(duì)象存儲(chǔ)(鍵值數(shù)據(jù)庫(kù)):接口簡(jiǎn)單,一個(gè)對(duì)象我們可以看成一個(gè)文件,只能全寫全讀,通常以大文件為主,要求足夠的IO帶寬。
塊存儲(chǔ)(硬盤):它的IO特點(diǎn)與傳統(tǒng)的硬盤是一致的,一個(gè)硬盤應(yīng)該是能面向通用需求的,即能應(yīng)付大文件讀寫,也能處理好小文件讀寫。但是硬盤的特點(diǎn)是容量大,熱點(diǎn)明顯。因此塊存儲(chǔ)主要可以應(yīng)付熱點(diǎn)問(wèn)題。另外,塊存儲(chǔ)要求的延遲是最低的。
文件存儲(chǔ)(文件系統(tǒng)):支持文件存儲(chǔ)的接口的系統(tǒng)設(shè)計(jì)跟傳統(tǒng)本地文件系統(tǒng)如Ext4這種的特點(diǎn)和難點(diǎn)是一致的,它比塊存儲(chǔ)具有更豐富的接口,需要考慮目錄、文件屬性等支持,實(shí)現(xiàn)一個(gè)支持并行化的文件存儲(chǔ)應(yīng)該是最困難的。但像HDFS、GFS這種自己定義標(biāo)準(zhǔn)的系統(tǒng),可以通過(guò)根據(jù)實(shí)現(xiàn)來(lái)定義接口,會(huì)容易一點(diǎn)。
因此,這三種接口分別以非分布式情況下的鍵值數(shù)據(jù)庫(kù)、硬盤和文件系統(tǒng)的IO特點(diǎn)來(lái)對(duì)應(yīng)即可。至于冷熱、快慢、大小文件而言更接近于業(yè)務(wù)。但是因?yàn)榇鎯?chǔ)系統(tǒng)是通用化實(shí)現(xiàn),通常來(lái)說(shuō),需要盡量滿足各種需求,而接口定義已經(jīng)一定意義上就砍去了一些需求,如對(duì)象存儲(chǔ)會(huì)以冷存儲(chǔ)、大文件為主。
實(shí)現(xiàn)方面,主要有兩層區(qū)別:
系統(tǒng)的分布式設(shè)計(jì):主從、還是全分布式或者是兼而有之,目前現(xiàn)在存儲(chǔ)系統(tǒng)因?yàn)橐恢滦缘囊,以主從為主?br />
底層的單機(jī)存儲(chǔ):一種是依賴本地文件系統(tǒng)的接口,如GlusterFS,Swift,Sheepdog,Ceph。一種是依賴塊接口的,目前只知道Nutanix是使用這個(gè)的。最后一種是依賴鍵值接口的,目前應(yīng)該只有Ceph是支持(Ceph支持多種單機(jī)存儲(chǔ)接口)。第一種依賴文件系統(tǒng)是因?yàn)榉植际酱鎯?chǔ)系統(tǒng)本身已經(jīng)夠復(fù)雜,實(shí)現(xiàn)者很難從上層一直到底層存儲(chǔ)都去實(shí)現(xiàn),而本地文件系統(tǒng)已經(jīng)是一個(gè)通用化并且非常成熟的實(shí)現(xiàn),因此分布式存儲(chǔ)系統(tǒng)絕大部分(上述提到的都應(yīng)該是)都會(huì)直接依賴本地文件系統(tǒng)。第二種接口目前只知道Nutanix是支持的(傳統(tǒng)的存儲(chǔ)廠商的存儲(chǔ)產(chǎn)品一般會(huì)使用這種方式),這種接口也就是比第一種去掉了文件系統(tǒng)層,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的物理塊管理即可。第三種它的主要原因是“存儲(chǔ)定義”和對(duì)象存儲(chǔ)的普及,希望硬盤來(lái)提供簡(jiǎn)單的鍵值接口即可,如希捷的Kinetic API,F(xiàn)usionio NVMKV,這種接口另一方面是閃存廠商非常喜愛(ài)的,因?yàn)殚W存的物理特性使得它支持鍵值接口比快接口容易得多,目前Ceph是支持這種接口,而希捷和華為最近推出了IP硬盤,聽(tīng)說(shuō)已經(jīng)實(shí)現(xiàn)了Swift上的原型。
從這里可以發(fā)現(xiàn),分布式存儲(chǔ)系統(tǒng)是在傳統(tǒng)的單機(jī)接口上重新包裝了一層,然后實(shí)現(xiàn)三種類似的接口。
策略方面,三副本、多AZ六副本和網(wǎng)絡(luò)RAID都是一類的,它們都是指數(shù)據(jù)的分布策略來(lái)提供數(shù)據(jù)可用性,通常來(lái)說(shuō)前兩者情況就是數(shù)據(jù)的多個(gè)副本分布在所有服務(wù)器的幾個(gè)中,也就是只要超過(guò)副本數(shù)的服務(wù)器掛掉,存儲(chǔ)系統(tǒng)就面臨部分?jǐn)?shù)據(jù)不可用的情況。網(wǎng)絡(luò)RAID是為了避免這種情況,比如在1000臺(tái)服務(wù)器的情況,將其分成10臺(tái)一組的100組,這樣同樣是一份數(shù)據(jù)(Data1)的三個(gè)副本都只屬于某一個(gè)組,它不可用只當(dāng)1組內(nèi)(10臺(tái))中超過(guò)3個(gè)臺(tái)機(jī)器不可用時(shí)才會(huì)發(fā)生,這樣概率會(huì)小非常多。
EC是一個(gè)類副本策略,它可以理解為增強(qiáng)版的復(fù)制,更少的副本可以達(dá)到更好的數(shù)據(jù)可用。
硬件方面,SSD,SAS,SATA和內(nèi)存的組合是為了提供數(shù)據(jù)訪問(wèn)的性能。千兆、萬(wàn)兆甚至Inifiniband是組合是為了提供網(wǎng)絡(luò)傳輸?shù)男阅堋?br />
許式偉:如果我們按存儲(chǔ)的業(yè)務(wù)邏輯分,那么可以分為:鍵值存儲(chǔ)(Key-Value Storage)、文件系統(tǒng)(File System)、數(shù)據(jù)庫(kù)(Database,不是很嚴(yán)謹(jǐn),只是作為所有支持多鍵值的存儲(chǔ)的統(tǒng)稱)、消息隊(duì)列(MQ)等等。按這種分類方法存儲(chǔ)的種類是無(wú)窮盡的,我曾經(jīng)說(shuō)過(guò) “存儲(chǔ)即數(shù)據(jù)結(jié)構(gòu)”,表達(dá)的就是這個(gè)意思。數(shù)據(jù)結(jié)構(gòu)無(wú)窮盡,存儲(chǔ)也會(huì)無(wú)法窮盡。塊存儲(chǔ)我們很少把它劃分到上面的分類中,因?yàn)樗翘摂M存儲(chǔ)設(shè)備,是為 VM 服務(wù)的一個(gè)東西,并不直接面向用戶業(yè)務(wù)(用戶不需要調(diào)用塊存儲(chǔ)設(shè)備的 api 來(lái)完成業(yè)務(wù),當(dāng)然如果我們把 VM 也認(rèn)為是一個(gè)業(yè)務(wù)系統(tǒng)的話,塊存儲(chǔ)也勉強(qiáng)可以作為一種特定的數(shù)據(jù)結(jié)構(gòu)存在)。對(duì)象存儲(chǔ)(Object Storage)是鍵值存儲(chǔ)(Key-Value Storage)的特例,它假設(shè)Value是文件,尺寸范圍可以很大(比如七?梢灾С治募笮0字節(jié)到1TB)。如果要對(duì)對(duì)象存儲(chǔ)做進(jìn)一步分類,我能夠想到的就是按實(shí)現(xiàn)方案來(lái)分類。比如按冗余方案來(lái)分,可分為多副本、RAID、糾刪碼等等;或者我們按一致性方案分,可以分為主從結(jié)構(gòu)和對(duì)等結(jié)構(gòu)等。
不會(huì)有什么存儲(chǔ)方案能夠一統(tǒng)天下。不同業(yè)務(wù)系統(tǒng)的場(chǎng)景需求不同,對(duì)存儲(chǔ)的訴求會(huì)不同,選擇自然會(huì)不同;诩m刪碼的存儲(chǔ)系統(tǒng),復(fù)雜性遠(yuǎn)高于三副本的存儲(chǔ)系統(tǒng)。從易維護(hù)的角度,如果業(yè)務(wù)對(duì)存儲(chǔ)成本不敏感,那么人們自然而然會(huì)選擇三副本的方案。
王旭:除了開(kāi)源服務(wù)外,這些私有的實(shí)現(xiàn)都沒(méi)有太公開(kāi)自己的實(shí)現(xiàn),不同的實(shí)現(xiàn)確實(shí)差異很大。但另一方面因?yàn)橛泄餐哪繕?biāo),常常有很多細(xì)節(jié)是做得差不多的,比如很多對(duì)象存儲(chǔ)都會(huì)把小對(duì)象放到一些預(yù)分配的大塊存儲(chǔ)區(qū)域里,然后定期做compaction,來(lái)提高存儲(chǔ)效率、避免文件系統(tǒng)碎片等。
對(duì)于塊服務(wù),有些實(shí)現(xiàn)是比較簡(jiǎn)單直接的,直接把存儲(chǔ)分成塊,用戶有申請(qǐng),就調(diào)度到某幾臺(tái)機(jī)器上,分配一些塊,組成卷給用戶用,而有些實(shí)現(xiàn)是比較高層的,會(huì)先構(gòu)建一個(gè)底層的分部式存儲(chǔ)系統(tǒng),然后再?gòu)闹蟹峙鋲K給用戶用。后者技術(shù)含量更高一些,但一般前者的實(shí)現(xiàn)都屬于簡(jiǎn)單直接型,實(shí)際效果反而更好(性能、故障處理等)一些。
InfoQ:所有做云存儲(chǔ)的都表示數(shù)據(jù)丟失是不可接受的,但數(shù)據(jù)丟失的概率——即理論上的數(shù)據(jù)可靠性(reliability),不同方案的計(jì)算方式是不同的。你們是怎么做的,或者現(xiàn)在有哪些比較成熟的資料描述這個(gè)計(jì)算方法的?
豪邁:實(shí)際上這個(gè)計(jì)算是需要依賴于存儲(chǔ)系統(tǒng)本身的。我們使用Ceph,Ceph的優(yōu)勢(shì)是提供了一個(gè)叫CRush算法的實(shí)現(xiàn),可以輕松根據(jù)需要來(lái)規(guī)劃數(shù)據(jù)的副本數(shù)和高可用性。參考Ceph提供的模型定義來(lái)規(guī)劃自己的。這是我的同事朱榮澤做的故障計(jì)算,這個(gè)計(jì)算只針對(duì)副本策略,并不適合使用EC(擦除碼)的情況。
硬盤發(fā)生故障的概率是符合泊松分布的。
fit = failures in time = 1/MTTF ~= 1/MTBF = AFR/(24*365)
事件概率 Pn(λ,t) = (λt)n e-λt / n!
我們對(duì)丟失數(shù)據(jù)是不能容忍的,所以只計(jì)算丟失數(shù)據(jù)的概率,不計(jì)算丟失每個(gè)object的概率。
N代表OSD的個(gè)數(shù)
R代表副本數(shù)
S代表scatter width,關(guān)系著recovery時(shí)間
我們忽略Non-Recoverable Errors的概率
計(jì)算1年內(nèi)任意R個(gè)OSD發(fā)生相關(guān)故障概率的方法是
1年內(nèi)OSD故障的概率。
在recovery時(shí)(R-1)個(gè)OSD發(fā)生故障的概率。
以上概率相乘。假設(shè)結(jié)果是Pr
因?yàn)槿我釸個(gè)OSD不一定屬于Ceph的Copy Sets,則Ceph的丟失Copy Sets的概率是:
M = Copy Sets Number
在N個(gè)OSD中,任意R個(gè)OSD的組合數(shù)是 C(R,N)
丟失Copy Sets的概率是 Pr * M / C(R, N)。
最終公式是:
P = func(N, R, S, AFR)
許式偉:可靠性的定義可以有不同,比如有人會(huì)定義為:假設(shè)整個(gè)系統(tǒng)有 L 個(gè)對(duì)象,在 1 年內(nèi)會(huì)損失 m 個(gè)對(duì)象,那么可靠性為 1 - m/L。我在我那篇文章中的定義是:整個(gè)系統(tǒng)有 L 塊硬盤,1 年內(nèi)丟失數(shù)據(jù)的概率是多少(而不管丟失了多少個(gè)對(duì)象)。
沿用文章中的可靠性定義,數(shù)據(jù)可靠性的計(jì)算涉及到以下幾個(gè)量:
集群規(guī)模-總硬盤數(shù)目(L)
容錯(cuò)度(M)
修復(fù)速度(t)
單盤可靠性(p:在t時(shí)間內(nèi)損壞的概率)
我的計(jì)算方法是,先計(jì)算這L塊硬盤在t時(shí)間內(nèi)同時(shí)損壞M+1塊硬盤的概率是多少(Pt,也就是丟失數(shù)據(jù)的概率,當(dāng)然有細(xì)心的網(wǎng)友說(shuō)t時(shí)間內(nèi)同時(shí)損壞M+1塊盤不一定會(huì)丟失數(shù)據(jù),這點(diǎn)當(dāng)然是正確的,但是這個(gè)丟失數(shù)據(jù)的概率雖然不為1但是非常接近1,而且此時(shí)對(duì)軟件系統(tǒng)來(lái)說(shuō)已經(jīng)是失控狀態(tài),為了簡(jiǎn)化計(jì)算假設(shè)為1),然后把時(shí)間拉長(zhǎng)到1年(T)的數(shù)據(jù)丟失概率(P)。這個(gè)拉長(zhǎng)是非常簡(jiǎn)單換算公式:
P = 1 - (1 - Pt)^(T/t) ≈ Pt * (T/t)
所以關(guān)鍵是計(jì)算 Pt(這L塊硬盤在t時(shí)間內(nèi)同時(shí)損壞M+1塊硬盤的概率)。我們擴(kuò)展一下,用 Pt(i) 表示 t 時(shí)間內(nèi)有且僅有 i 塊盤損壞的概率。前面的 Pt 實(shí)際上是 Pt(>M),而不是 Pt(M+1)。不難得出:
Pt(>M) = 1 - Pt(0) - Pt(1) - ... - Pt(M)
好了,我們就剩下計(jì)算 Pt(i) 了。這個(gè)概率的計(jì)算比較常規(guī):
Pt(i) = C(L, i) * p^i * (1-p)^(L-i)
其中 C(L, i) 是組合數(shù),也就是 C(L, i) = L! / (i! * (L-i)!)
至此整個(gè)計(jì)算過(guò)程完成。不過(guò)有一個(gè)細(xì)節(jié)需要說(shuō)明下,由于以下兩個(gè)原因,你無(wú)法用計(jì)算機(jī)常規(guī)的浮點(diǎn)數(shù)計(jì)算來(lái)得到 P:
C(L, i) 值會(huì)很大,甚至?xí)^(guò) float64 浮點(diǎn)類型的最大值(約為1e308),用浮點(diǎn)運(yùn)算最終會(huì)變 Inf(無(wú)窮大)。
p 非常小,這會(huì)導(dǎo)致計(jì)算過(guò)程精度損失非常大,計(jì)算的累計(jì)誤差無(wú)法忽略,答案和理論值大相徑庭。
所以如果你真要去算這個(gè)概率,需要用無(wú)損計(jì)算的數(shù)學(xué)包。
甘泉:我們這個(gè)概率的計(jì)算和RAID是類似的,我們可以將RAID的概念延伸一下,其實(shí)RAID的本 質(zhì)就是replication,通過(guò)多個(gè)副本來(lái)解決一個(gè)或者多個(gè)節(jié)點(diǎn)出問(wèn)題造成的影響。所以不管是本機(jī)的副本,還是跨網(wǎng)絡(luò)或者跨地域的副本,本質(zhì)上都是在用replication做冗余。
王旭:其實(shí)只是丟數(shù)據(jù)的概率問(wèn)題,沒(méi)有云存儲(chǔ)服務(wù)可以承諾絕不丟的。國(guó)內(nèi)有個(gè)問(wèn)題,就是——如果我在服務(wù)條款里說(shuō)了可能丟數(shù)據(jù),那用戶就不愿意用了(“云還丟數(shù)據(jù)?!”),競(jìng)爭(zhēng)對(duì)手的公關(guān)也要找上門來(lái)了;可是丟數(shù)據(jù)的 case 總是可能存在的,那么,一旦丟了就是沒(méi)有盡到告知義務(wù),而且還是會(huì)被炒作(“云還丟數(shù)據(jù)” again),但實(shí)際上這是個(gè) SLA 嘛,生意上的事,最后要用錢解決的嘛。
AWS的兩個(gè)主要資源層存儲(chǔ)服務(wù)是 EBS 和 S3,后者是對(duì)象存儲(chǔ)服務(wù),強(qiáng)調(diào)數(shù)據(jù)可靠性,承諾11個(gè)9的 Durability,據(jù)說(shuō)實(shí)際能達(dá)到更高;而EBS承諾的是年平均故障率(AFR),一年中發(fā)生塊設(shè)備故障而導(dǎo)致卷無(wú)法使用的概率,這個(gè)要求實(shí)際上不高的。
對(duì)于存儲(chǔ)服務(wù),對(duì)象存儲(chǔ)可以視為在線數(shù)據(jù)的最終存儲(chǔ)方案,要保證更高的可靠性,而EBS是半永久存儲(chǔ)方案,只有結(jié)合備份方案、多副本方案或者快照,才可以保證高可靠性的,教育用戶是云服務(wù)行業(yè)不能回避的任務(wù),騙用戶說(shuō)我絕對(duì)可靠是不行的,出來(lái)混是要還的。
詳情參見(jiàn):青云社區(qū)。 |
|