阿明 發(fā)表于:14年01月02日 11:43 [原創(chuàng)] DOIT.com.cn
2013年12月11日,北京——以“數(shù)據(jù)造化 智見(jiàn)未來(lái)”為主題的2013中國(guó)存儲(chǔ)峰會(huì)在北京盛大開(kāi)幕。作為一年一度的中國(guó)信息產(chǎn)業(yè)界領(lǐng)袖級(jí)會(huì)議,本次大會(huì)得到了中國(guó)軟件行業(yè)協(xié)會(huì)、中國(guó)計(jì)算機(jī)學(xué)會(huì)存儲(chǔ)技術(shù)專業(yè)委員會(huì)、武漢國(guó)家光電實(shí)驗(yàn)室和國(guó)防科技大學(xué)計(jì)算機(jī)學(xué)院的大力支持。在下午軟件定義與數(shù)據(jù)中心論壇上,英特爾亞太研發(fā)公司基礎(chǔ)架構(gòu)實(shí)驗(yàn)室高級(jí)軟件開(kāi)發(fā)工程師周淵為大家現(xiàn)場(chǎng)分享軟件定義云存儲(chǔ)解決方案,帶給大家全新的軟件定義云存儲(chǔ)的趨勢(shì)與觀點(diǎn)。
在演講現(xiàn)場(chǎng),周淵分析道,軟件定義存儲(chǔ)這個(gè)概念大家都在談,但僅靠幾個(gè)名詞很難有深入的理解,對(duì)此給大家分享一個(gè)英特爾實(shí)際在做的關(guān)于對(duì)象存儲(chǔ)的項(xiàng)目,希望能對(duì)大家有幫助。首先是關(guān)于對(duì)象存儲(chǔ)的一些基本概念,大家可能理解最多是本地文件系統(tǒng),比如本地的一塊硬盤格式化成NTFS,向應(yīng)用程序提供了Posix接口,然后是傳統(tǒng)的分布式文件系統(tǒng),也會(huì)向應(yīng)用程序提供Posix接口。而對(duì)象存儲(chǔ)有所不同,通常來(lái)說(shuō)一個(gè)對(duì)象存儲(chǔ),首先會(huì)有一套R(shí)ESTful 的接口,然后是一個(gè)代理/控制節(jié)點(diǎn),主要做關(guān)于數(shù)據(jù)定位,最后面就是真正的存儲(chǔ)節(jié)點(diǎn),用于存儲(chǔ)數(shù)據(jù)。與傳統(tǒng)的文件系統(tǒng)比,最大的差別在接口。
另一方面,值得注意的是對(duì)象存儲(chǔ)系統(tǒng)持久性,通常有三種機(jī)制,第一種就是說(shuō)對(duì)于非常“熱”的數(shù)據(jù)可以用副本機(jī)制,對(duì)冷一點(diǎn)數(shù)據(jù)可以應(yīng)用糾刪碼機(jī)制,實(shí)際情況中采用混合的方案:既有冷數(shù)據(jù)也有熱數(shù)據(jù)。這里其實(shí)也可以理解為是一個(gè)區(qū)分的服務(wù)等級(jí),“比方說(shuō)你給我最多錢就讓你用三副本的形勢(shì)來(lái)存儲(chǔ)。”對(duì)象存儲(chǔ)在過(guò)去幾年時(shí)間里面發(fā)展非?,Amazon S3已經(jīng)有2萬(wàn)億數(shù)據(jù),每秒鐘請(qǐng)求數(shù)有110萬(wàn)。
Erasure Coding很早就出現(xiàn)了,一直在不同的領(lǐng)域變動(dòng)進(jìn)化。實(shí)際上,其基本思想是,把數(shù)據(jù)切割成小塊的形式,再對(duì)這些小塊數(shù)據(jù)計(jì)算校驗(yàn)碼得出校驗(yàn)塊,這樣當(dāng)原始數(shù)據(jù)塊丟失時(shí),可以通過(guò)校驗(yàn)塊計(jì)算出原始數(shù)據(jù),于是可以容忍一定程度上的數(shù)據(jù)丟失。總結(jié)來(lái)說(shuō)就是用CPU資源節(jié)省存儲(chǔ)資源。英特爾對(duì)此專門來(lái)做存儲(chǔ)相關(guān)的一個(gè)庫(kù),提供英特爾® 架構(gòu)上erasure code,壓縮等的支持,從實(shí)驗(yàn)數(shù)據(jù)來(lái)看,這個(gè)庫(kù)性能是很不錯(cuò)的,我們也正嘗試把它開(kāi)源,F(xiàn)在這個(gè)項(xiàng)目也利用了這個(gè)庫(kù)在Swift里面支持Erasure Coding。
對(duì)于Swift來(lái)說(shuō),可以這么理解,它是Amazon S3的替代品。最早是由Rackspace共享出來(lái)給OpenStack提供存儲(chǔ)對(duì)象的一個(gè)項(xiàng)目。首先它有一個(gè)RESTful的接口來(lái)訪問(wèn),其提供container模型來(lái)組織對(duì)象,針對(duì)非機(jī)構(gòu)化數(shù)據(jù)來(lái)提供最終一致性。當(dāng)然最重要的一點(diǎn)就是說(shuō)它提供了一個(gè)很好的擴(kuò)展性:可以用最普通的硬件組建的服務(wù)器就可以把它擴(kuò)展好。比較具體一點(diǎn)來(lái)說(shuō)Swift 里有個(gè)Ring的概念,Ring是一組內(nèi)部的一致性hash表。當(dāng)大家在硬盤上存儲(chǔ)數(shù)據(jù)的時(shí)候,Swift通過(guò)Ring里的算法,可以保證三個(gè)副本放在盡可能不同的位置,不同副本之間盡量不產(chǎn)生影響,同時(shí)后臺(tái)會(huì)有一些不同的進(jìn)程來(lái)維護(hù)一致性。值得注意的是,Swift不是分布式文件系統(tǒng),不提供Posix的接口,不支持ACID語(yǔ)義操作,不是NoSQL數(shù)據(jù)存儲(chǔ),不提供對(duì)塊級(jí)別存儲(chǔ)服務(wù)。
從總體來(lái)看,Swift分成幾個(gè)部分,最前面它有Proxy節(jié)點(diǎn)負(fù)責(zé)處理所有的請(qǐng)求,并將請(qǐng)求發(fā)至后端存儲(chǔ)節(jié)點(diǎn)去訪問(wèn)真實(shí)數(shù)據(jù)。Swift的結(jié)構(gòu)很清晰,里面正好有一個(gè)proxy,像一個(gè)程序的入口出口一樣,所以英特爾考慮在這個(gè)節(jié)點(diǎn)上做文章,在讀寫(xiě)請(qǐng)求做Erasure code編解碼。然后以Container為模型來(lái)組織數(shù)據(jù),通過(guò)container的元數(shù)據(jù)(metadata)來(lái)識(shí)別其中的對(duì)象是否被編碼過(guò)。這和現(xiàn)有Swift架構(gòu)保持一致,還可以同時(shí)支持線上和線下的Erasure code。通過(guò)更加靈活的配置及優(yōu)化策略,可以更好地做一個(gè)Tiering的解決方案,在這里英特爾更多是定義好一個(gè)機(jī)制而非策略,策略可以根據(jù)用戶自己的需要去定義。
基于現(xiàn)有的完整性框架,需要加入一定服務(wù)進(jìn)去來(lái)保證編碼數(shù)據(jù)的完整性,這些代碼都盡量以增量的形式加入,這樣有利于用戶從一些線上服務(wù)升級(jí)。比如用戶用的是E或者G比較老的版本,現(xiàn)在就可以無(wú)故障升級(jí)。從Swift糾刪碼(EC)高層架構(gòu)來(lái)看,最后實(shí)現(xiàn)就是一個(gè)混合存儲(chǔ)方案,同時(shí)支持多副本和Erasure coding。比方當(dāng)是三副本的時(shí)候就要存三副本,當(dāng)是Erasure code時(shí)候就要去存Erasure code,同時(shí)在這里還定義了Erasure coding interface,這也是另外一個(gè)英特爾和Box合作的一個(gè)開(kāi)源項(xiàng)目。并且在Swift中對(duì)此也有類似一些修改,主要是增加支持Erasure code plugin的相關(guān)模塊。
最主要的修改是引入了多個(gè)對(duì)象Ring來(lái)支撐多種存儲(chǔ)方案,也就是多副本和Erasure coding并存。在Erasure coding的Ring中,重用現(xiàn)有的副本存放位置算法,可以保證各個(gè)數(shù)據(jù)塊與代碼塊盡可能分開(kāi)存放。這樣可以建立多種存儲(chǔ)策略的基礎(chǔ)?梢韵胂笞罱K得到一個(gè)成品,就是說(shuō)有些objects是用Erasure code存儲(chǔ)的,有些則是多副本的形式存放。
其次是關(guān)于Erasure Code庫(kù)的接口,英特爾和Box合作定義了云存儲(chǔ)中編解碼需要的接口,可以支持多種編解碼形勢(shì)。英特爾又加入后臺(tái)進(jìn)程來(lái)保證完整性。后臺(tái)有一個(gè)審計(jì)員在不斷進(jìn)行MD5校驗(yàn),如果數(shù)據(jù)已經(jīng)被損壞了則直接進(jìn)行隔離。同時(shí)會(huì)有一個(gè)reconstructor來(lái)進(jìn)行數(shù)據(jù)恢復(fù),當(dāng)發(fā)現(xiàn)有數(shù)據(jù)片丟失,需要從還存在的數(shù)據(jù)片中讀取數(shù)據(jù)并嘗試恢復(fù),并將恢復(fù)得數(shù)據(jù)寫(xiě)回到硬盤上去。大概所需要做的修改就是這樣幾個(gè)部分。
當(dāng)EC加入Swift以后,讀寫(xiě)流程會(huì)有一些變化。當(dāng)寫(xiě)入數(shù)據(jù)時(shí),其會(huì)被切片,一部分?jǐn)?shù)據(jù)加一部分較驗(yàn),這些塊通過(guò)Ring分散到后端的存儲(chǔ)節(jié)點(diǎn)上。然后當(dāng)去讀的時(shí)候,首先去找原始數(shù)據(jù)切片,如果全部都在,則合并數(shù)據(jù)并返回給Client;如果發(fā)現(xiàn)有數(shù)據(jù)片丟失的情況,需要通過(guò)校驗(yàn)碼恢復(fù)原始數(shù)據(jù)片,再把重新拼起來(lái)。
總結(jié)來(lái)說(shuō),對(duì)象存儲(chǔ)是云計(jì)算及大數(shù)據(jù)的關(guān)鍵技術(shù)。糾刪碼(Erasure code)技術(shù)可以有效降低在分布式存儲(chǔ)的成本支出。同時(shí),Swift作為OpenStack核心項(xiàng)目得到越來(lái)越多的重視。英特爾也在同開(kāi)源社區(qū)通力合作幫助OpenStack Swift糾刪碼的更好實(shí)現(xiàn)。(阿明)
公司簡(jiǎn)介 | 媒體優(yōu)勢(shì) | 廣告服務(wù) | 客戶寄語(yǔ) | DOIT歷程 | 誠(chéng)聘英才 | 聯(lián)系我們 | 會(huì)員注冊(cè) | 訂閱中心
Copyright © 2013 DOIT Media, All rights Reserved. 北京楚科信息技術(shù)有限公司 版權(quán)所有.