網(wǎng)絡(luò)存儲(chǔ)技術(shù)結(jié)課報(bào)告.doc_第1頁(yè)
網(wǎng)絡(luò)存儲(chǔ)技術(shù)結(jié)課報(bào)告.doc_第2頁(yè)
網(wǎng)絡(luò)存儲(chǔ)技術(shù)結(jié)課報(bào)告.doc_第3頁(yè)
網(wǎng)絡(luò)存儲(chǔ)技術(shù)結(jié)課報(bào)告.doc_第4頁(yè)
網(wǎng)絡(luò)存儲(chǔ)技術(shù)結(jié)課報(bào)告.doc_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第1章 從淘寶網(wǎng)技術(shù)發(fā)展淺談其成功與經(jīng)驗(yàn)教訓(xùn)11.1 引言11.2 淘寶網(wǎng)淺談11.2.1 個(gè)人網(wǎng)站11.2.2 Java時(shí)代31.2.3 創(chuàng)造技術(shù)31.2.4 分布式時(shí)代41.2.5 中間件51.2.6 Session框架51.2.7 開(kāi)放平臺(tái)61.3 總結(jié)6第2章 大型云存儲(chǔ)中心設(shè)計(jì)72.1 引言72.2 云存儲(chǔ)中心設(shè)計(jì)72.2.1 Hadoop平臺(tái) Hadoop分布式文件系統(tǒng) MapReduce編程 Hbase分布式數(shù)據(jù)庫(kù)102.2.2 文件系統(tǒng)的設(shè)計(jì)122.2.3文件塊存儲(chǔ)策略及副本策略設(shè)計(jì)132.2.4 文件塊更新算法設(shè)計(jì)142.2.5事務(wù)故障恢復(fù)系統(tǒng)設(shè)計(jì)172.2.6 目錄存儲(chǔ)與負(fù)載均衡設(shè)計(jì)172.3 總結(jié)18參考文獻(xiàn)1818第1章 從淘寶網(wǎng)技術(shù)發(fā)展淺談其成功與經(jīng)驗(yàn)教訓(xùn)1.1 引言 至2011年年底,淘寶網(wǎng)擁有全國(guó)最大的Hadoop分布式計(jì)算集群之一,日新增數(shù)據(jù)50TB,有40PB海量數(shù)據(jù)存儲(chǔ),分布在全國(guó)各地80多個(gè)節(jié)點(diǎn)的CDN網(wǎng)絡(luò),支撐的流量超過(guò)800Gbps。淘寶的搜索引擎能夠?qū)?shù)十億的商品數(shù)據(jù)進(jìn)行實(shí)時(shí)搜索,另外,還擁有自主研發(fā)的文件存儲(chǔ)系統(tǒng)和緩存系統(tǒng),以及Java中間件和消息中間件系統(tǒng),這一切組成了一個(gè)龐大的電子商務(wù)操作系統(tǒng)。從商業(yè)數(shù)據(jù)上看,mazon的財(cái)報(bào)顯示2011年完成了大約 480億美元的交易額,eBay的2011年財(cái)報(bào)顯示全年完成了大約600億美元的交易額(不包括其獨(dú)立的汽車(chē)交易平臺(tái))。無(wú)論從交易額、商品數(shù)量還是從同比增速等指標(biāo)上看,淘寶網(wǎng)均遠(yuǎn)超于此,是目前全球最大的電子商務(wù)平臺(tái)。如今淘寶網(wǎng)的流量已經(jīng)是全球排名第12、國(guó)內(nèi)排名第3)。淘寶網(wǎng)的系統(tǒng)也從使用一臺(tái)服務(wù)器,到采用萬(wàn)臺(tái)以上的服務(wù)器。淘寶網(wǎng)在整個(gè)發(fā)展過(guò)程中,經(jīng)歷了許多主動(dòng)和被動(dòng)的技術(shù)變革,筆者將根據(jù)這些淺談淘寶系統(tǒng)的成功及經(jīng)驗(yàn)教訓(xùn)。1.2 淘寶網(wǎng)淺談 本節(jié)中,筆者將淘寶的技術(shù)發(fā)展分為個(gè)人網(wǎng)站、Java時(shí)代、創(chuàng)造技術(shù)、分布式時(shí)代、中間件、Session框架、開(kāi)放平臺(tái)等七個(gè)階段,并就每個(gè)階段展開(kāi)分析,淺談淘寶系統(tǒng)的成功與經(jīng)驗(yàn)教訓(xùn)。1.2.1 個(gè)人網(wǎng)站2003年4月7日,馬云在杭州成立了淘寶網(wǎng),這個(gè)創(chuàng)業(yè)團(tuán)隊(duì)的成員:三個(gè)開(kāi)發(fā)工程師、一個(gè)UED工程師、三個(gè)運(yùn)營(yíng)工程師、一個(gè)經(jīng)理,以及馬云和他的秘書(shū)。他們買(mǎi)了這樣一個(gè)架構(gòu)的網(wǎng)站:LAMP(Linux+Apache+MySQL+PHP),這個(gè)直到現(xiàn)在還是一個(gè)很常用的網(wǎng)站架構(gòu)模型,其優(yōu)點(diǎn)是:無(wú)須編譯,發(fā)布快速,PHP語(yǔ)言功能強(qiáng)大,能做從頁(yè)面渲染到數(shù)據(jù)訪(fǎng)問(wèn)所有的事情,而且用到的技術(shù)都是開(kāi)源、免費(fèi)的。他們對(duì)這個(gè)網(wǎng)站進(jìn)行了很多本地化的修改,其中最有技術(shù)含量的是對(duì)數(shù)據(jù)庫(kù)進(jìn)行了一個(gè)修改,原來(lái)是從一個(gè)數(shù)據(jù)庫(kù)進(jìn)行所有的讀寫(xiě)操作,現(xiàn)在把它拆分成一個(gè)主庫(kù)、兩個(gè)從庫(kù),并且讀寫(xiě)分離。這么做的好處有幾點(diǎn):存儲(chǔ)容量增加了,有了備份,使得安全性增加了,讀寫(xiě)分離使得讀寫(xiě)效率得以提升。在接下來(lái)的大半年時(shí)間里,這個(gè)網(wǎng)站迅速顯示出了它的生機(jī)。隨著用戶(hù)需求和流量的不斷增長(zhǎng),系統(tǒng)做了很多日常改進(jìn),服務(wù)器由最初的一臺(tái)變成了三臺(tái),一臺(tái)負(fù)責(zé)發(fā)送Email、一臺(tái)負(fù)責(zé)運(yùn)行數(shù)據(jù)庫(kù)、一臺(tái)負(fù)責(zé)運(yùn)行WebApp。一段時(shí)間之后,商品搜索的功能占用數(shù)據(jù)庫(kù)資源太大了,2003年7月,又把阿里巴巴中文站的搜索引擎iSearch搬了過(guò)來(lái)。隨著訪(fǎng)問(wèn)量和數(shù)據(jù)量的飛速上漲,問(wèn)題很快就出來(lái)了,第一個(gè)問(wèn)題出現(xiàn)在數(shù)據(jù)庫(kù)上。MySQL當(dāng)時(shí)是第4版的,淘寶用的是默認(rèn)的存儲(chǔ)引擎MyISAM,這種存儲(chǔ)引擎在寫(xiě)數(shù)據(jù)的時(shí)候會(huì)把表鎖住。當(dāng)Master同步數(shù)據(jù)到Slave的時(shí)候,會(huì)引起Slave寫(xiě),這樣在Slave的讀操作都要等待。還有一點(diǎn)是會(huì)發(fā)生Slave上的主鍵沖突,經(jīng)常會(huì)導(dǎo)致同步停止,這樣,發(fā)布的一些東西明明已經(jīng)成功了,但就是查詢(xún)不到。另外,當(dāng)年的MySQL不比如今的MySQL,在數(shù)據(jù)的容量和安全性方面也有很多先天的不足,于是把MySQL換成Oracle就成了順理成章的事情。數(shù)據(jù)一開(kāi)始是放在本地的,淘寶對(duì)Oracle做調(diào)優(yōu)的工作,也對(duì)SQL進(jìn)行調(diào)優(yōu)。后來(lái)數(shù)據(jù)量變大后,本地存儲(chǔ)無(wú)法滿(mǎn)足了,就買(mǎi)了NAS,NetApp的NAS作為數(shù)據(jù)庫(kù)的存儲(chǔ)設(shè)備,加上Oracle RAC來(lái)實(shí)現(xiàn)負(fù)載均衡。在把數(shù)據(jù)的連接放在SQL Relay之后,這個(gè)代理服務(wù)經(jīng)常會(huì)死鎖,如同之前的MySQL死鎖一樣。雖然做了很多修改,但當(dāng)時(shí)那個(gè)版本內(nèi)部處理的邏輯不對(duì),問(wèn)題很多,最快的解決辦法就是“重啟”它的服務(wù)。 在2003年10月,淘寶網(wǎng)上線(xiàn)了一個(gè)功能,叫做“安全交易”,賣(mài)家如果選擇支持這種功能,買(mǎi)家就會(huì)把錢(qián)交給淘寶網(wǎng),等他收到貨之后,淘寶網(wǎng)再把錢(qián)給賣(mài)家,這就是現(xiàn)在的“支付寶”。 一年之后,幾乎所有的賣(mài)家都選擇擔(dān)保交易,到后來(lái)干脆所有的交易都必須走擔(dān)保交易。在2012年支付寶的年會(huì)上,支付寶公布2011年的交易筆數(shù)已經(jīng)是PayPal的兩倍。1.2.2 Java時(shí)代在上一節(jié),我們談到淘寶SQL Relay的問(wèn)題始終沒(méi)有得到解決,而數(shù)據(jù)庫(kù)必須要用Oracle,淘寶便決定更換開(kāi)發(fā)語(yǔ)言。把一個(gè)龐大的網(wǎng)站的開(kāi)發(fā)語(yǔ)言換掉,無(wú)異于脫胎換骨?,F(xiàn)在擺在他們面前的問(wèn)題是用什么辦法把一個(gè)龐大的網(wǎng)站從PHP語(yǔ)言遷移到Java,而且要求在遷移的過(guò)程中,不停止服務(wù),原來(lái)系統(tǒng)的bugfix和功能改進(jìn)不受影響。項(xiàng)目組的大致方案是給業(yè)務(wù)分模塊,一個(gè)模塊一個(gè)模塊地漸進(jìn)式替換。阿里巴巴18個(gè)創(chuàng)始人之一的架構(gòu)師周悅虹,在Jakarta Turbine的基礎(chǔ)上做了很多擴(kuò)展,打造了一個(gè)阿里巴巴自己用的MVC框架WebX,這個(gè)框架易于擴(kuò)展,方便組件化開(kāi)發(fā),它的頁(yè)面模板支持JSP和Velocity等,持久層支持ibatis和hibernate等,控制層可以用EJB和Spring。于是淘寶選擇了這個(gè)強(qiáng)大的框架。淘寶MVC框架是阿里的WebX,控制層是EJB,持久層是ibatis?!爸Ц秾殹币彩怯猛瑯拥募軜?gòu)做出來(lái)的網(wǎng)站。隨著數(shù)據(jù)量的上漲,數(shù)據(jù)的存儲(chǔ)方面就不得不考慮使用小型機(jī),然后Oracle就運(yùn)行在了小型機(jī)上,存儲(chǔ)方面,從EMC低端CX存儲(chǔ)到Sun oem hds高端存儲(chǔ),再到EMC dmx高端存儲(chǔ),然后淘寶的架構(gòu)師們便開(kāi)始研究數(shù)據(jù)庫(kù)的擴(kuò)展性。一臺(tái)Oracle的處理能力是有上限的,它的連接池有數(shù)量限制,查詢(xún)速度與容量成反比。要突破這種極限,最簡(jiǎn)單的方式就是多用幾個(gè)Oracle數(shù)據(jù)庫(kù)。淘寶的做法是把用戶(hù)的信息按照ID來(lái)存放到兩個(gè)數(shù)據(jù)庫(kù)中,把商品的信息和賣(mài)家信息放在兩個(gè)對(duì)應(yīng)的數(shù)據(jù)庫(kù)中,把商品類(lèi)目等通用信息放在第三個(gè)庫(kù)中。數(shù)據(jù)量的增長(zhǎng)給數(shù)據(jù)存儲(chǔ)帶來(lái)了很大壓力,于是,淘寶的架構(gòu)師做了一個(gè)基于 Berkeley DB 的緩存系統(tǒng),把很多不太變動(dòng)的只讀信息放了進(jìn)去。 在這個(gè)穩(wěn)定的版本下,淘寶網(wǎng)的業(yè)務(wù)有了突飛猛進(jìn)的發(fā)展。1.2.3 創(chuàng)造技術(shù)淘寶網(wǎng)有很多文件需要存儲(chǔ),最主要的就是圖片、商品描述、交易快照,一個(gè)商品要包含幾張圖片和一長(zhǎng)串的描述信息,而每一張圖片都要生成幾張規(guī)格不同的縮略圖。圖片在交易系統(tǒng)中非常重要,淘寶網(wǎng)的商品照片,尤其是熱門(mén)商品圖片的訪(fǎng)問(wèn)流量是非常大的。從2006年開(kāi)始,淘寶決定自己開(kāi)發(fā)一套針對(duì)海量小文件存儲(chǔ)的文件系統(tǒng),用于解決自身圖片存儲(chǔ)的難題。這標(biāo)志著淘寶網(wǎng)從使用技術(shù)到了創(chuàng)造技術(shù)的階段。2007年,Google公布了GFS的設(shè)計(jì)論文,這給淘寶帶來(lái)了很多借鑒的思路,并隨后開(kāi)發(fā)出了適合淘寶使用的圖片存儲(chǔ)系統(tǒng)TFS。淘寶TFS文件系統(tǒng)在核心設(shè)計(jì)上最大的取巧在于,傳統(tǒng)的集群系統(tǒng)中元數(shù)據(jù)只有1份,通常由管理節(jié)點(diǎn)來(lái)管理,因而很容易成為瓶頸。而對(duì)于淘寶網(wǎng)的用戶(hù)來(lái)說(shuō),圖片文件究竟用什么名字來(lái)保存他們并不關(guān)心,因此,TFS在設(shè)計(jì)規(guī)劃上考慮在圖片的保存文件名上暗藏了 一些元數(shù)據(jù)信息,例如,圖片的大小、時(shí)間、訪(fǎng)問(wèn)頻次等信息,包括所在的邏輯塊號(hào)。 同時(shí)研發(fā)部對(duì)搜索引擎iSearch也進(jìn)行了一次升級(jí),之前的搜索引擎是把數(shù)據(jù)分到多臺(tái)機(jī)器上,但是每份數(shù)據(jù)只有一份,現(xiàn)在是每份數(shù)據(jù)變成多份,整個(gè)系統(tǒng)從一個(gè)單行的部署變成了矩陣,能夠支撐更大的訪(fǎng)問(wèn)量,并且做到很高的可用性。1.2.4 分布式時(shí)代在這之前的時(shí)間內(nèi),淘寶的商品分類(lèi)都是按照樹(shù)狀一級(jí)一級(jí)的節(jié)點(diǎn)來(lái)分的,隨著商品數(shù)量的增長(zhǎng),類(lèi)目也變得越來(lái)越深,且越來(lái)越復(fù)雜,這樣,買(mǎi)家如果要查找一件商品,就要逐級(jí)打開(kāi)類(lèi)目,找商品之前要弄清商品的分類(lèi)。為解決這個(gè)問(wèn)題,從系統(tǒng)的角度來(lái)看,淘寶建立了“屬性”這樣一個(gè)數(shù)據(jù)結(jié)構(gòu),由于除了類(lèi)目的子節(jié)點(diǎn)有屬性外,父節(jié)點(diǎn)也可能有屬性,于是類(lèi)目屬性合起來(lái)也是一個(gè)結(jié)構(gòu)化的數(shù)據(jù)對(duì)象。淘寶把它獨(dú)立出來(lái)作為一個(gè)服務(wù),叫做Catserver。跟類(lèi)目屬性密切關(guān)聯(lián)的商品搜索功能獨(dú)立出來(lái),叫做Hesper。Catserver和Hesper供淘寶的前后臺(tái)系統(tǒng)調(diào)用。有了類(lèi)目屬性,給運(yùn)營(yíng)工作帶來(lái)了很大的便利。Catserver還用于提供賣(mài)家授權(quán)、品牌服務(wù)、關(guān)鍵詞等相關(guān)的服務(wù))。類(lèi)目屬性的服務(wù)化是淘寶在系統(tǒng)服務(wù)化方面做的第一個(gè)探索。此時(shí),淘寶高管提出一切要以穩(wěn)定為中心,所有影響系統(tǒng)穩(wěn)定的因素都要解決掉。在這種要求下,淘寶這個(gè)復(fù)雜的系統(tǒng)進(jìn)行了肢解和重構(gòu),其中復(fù)用性最高的一個(gè)模塊用戶(hù)信息模塊開(kāi)始拆分出來(lái),并把交易這個(gè)核心業(yè)務(wù)模塊拆分出來(lái)。原來(lái)的淘寶交易除了跟商品管理耦合在一起,還在支付寶和淘寶之間轉(zhuǎn)換,跟支付寶耦合在一起。 類(lèi)目屬性、用戶(hù)中心、交易中心,隨著這些模塊的逐步拆分和服務(wù)化改造,淘寶的工程師在系統(tǒng)架構(gòu)方面也積累了不少經(jīng)驗(yàn)。2008年年底,淘寶所有的業(yè)務(wù)都進(jìn)行了模塊化。1.2.5 中間件服務(wù)的提供者啟動(dòng)時(shí)通過(guò)HSF框架向ConfigServer注冊(cè)服務(wù)信息,這樣ConfigServer上面就定義了所有可供調(diào)用的服務(wù);服務(wù)調(diào)用者啟動(dòng)的時(shí)候向ConfigServer注冊(cè)對(duì)哪些服務(wù)感興趣,當(dāng)服務(wù)提供者的信息變化時(shí),ConfigServer向相應(yīng)的感興趣的服務(wù)調(diào)用者推送新的服務(wù)信息列表;調(diào)用者在調(diào)用時(shí)則根據(jù)服務(wù)信息的列表直接訪(fǎng)問(wèn)相應(yīng)的服務(wù)提供者,而無(wú)須經(jīng)過(guò)ConfigServer。ConfigServer并不會(huì)把服務(wù)提供者的IP地址推送給服務(wù)的調(diào)用者,HSF框架會(huì)根據(jù)負(fù)載狀況來(lái)選擇具體的服務(wù)器,返回結(jié)果給調(diào)用者,這不僅統(tǒng)一了服務(wù)調(diào)用的方式,也實(shí)現(xiàn)了“軟負(fù)載均衡”。 在HSF的支持下,服務(wù)集群對(duì)調(diào)用者來(lái)說(shuō)是“統(tǒng)一”的,服務(wù)之間是“隔離”的,這保證了服務(wù)的擴(kuò)展性和應(yīng)用的統(tǒng)一性。再加上HSF本身能提供的“軟負(fù)載均衡”,服務(wù)層對(duì)應(yīng)用層來(lái)說(shuō)就是一片“私有云”了。 HSF旨在為淘寶的應(yīng)用提供一個(gè)分布式的服務(wù)框架,HSF從分布式應(yīng)用層面以及統(tǒng)一的發(fā)布/調(diào)用方式層面為大家提供支持,從而可以很容易地開(kāi)發(fā)分布式的應(yīng)用以及提供或使用公用功能模塊,而不用考慮分布式領(lǐng)域中的各種細(xì)節(jié)技術(shù)。1.2.6 Session框架Session在網(wǎng)絡(luò)應(yīng)用中稱(chēng)為“會(huì)話(huà)”,借助它可提供客戶(hù)端與服務(wù)系統(tǒng)之間必要的交互。因?yàn)镠TTP協(xié)議本身是無(wú)狀態(tài)的,所以經(jīng)常需要通過(guò)Session來(lái)解決服務(wù)端和瀏覽器的保持狀態(tài)的解決方案。Session中存儲(chǔ)的內(nèi)容包括用戶(hù)信息:昵稱(chēng)、用戶(hù)ID、登錄狀態(tài)等。解決集群Session共享的問(wèn)題,通常有兩種辦法:(1)硬件負(fù)載:將用戶(hù)請(qǐng)求分發(fā)到特定的服務(wù)器;(2)Session復(fù)制:將用戶(hù)的Session復(fù)制到集群內(nèi)所有的服務(wù)器。這兩種方法的弊端也很明顯:成本較高,性能差。當(dāng)訪(fǎng)問(wèn)量增大的時(shí)候,帶寬增大,而且隨著機(jī)器數(shù)量的增加,網(wǎng)絡(luò)負(fù)擔(dān)成指數(shù)級(jí)上升,不具備高度可擴(kuò)展性,性能隨著服務(wù)器數(shù)量的增加急劇下降,而且容易引起廣播風(fēng)暴。于是淘寶采用了集中式的緩存區(qū)的Session方式。致力于解決以下問(wèn)題:(1)Session的客戶(hù)端存儲(chǔ),將Session信息存儲(chǔ)到客戶(hù)端瀏覽器Cookie中。(2)實(shí)現(xiàn)服務(wù)端存儲(chǔ),減少Cookie使用,增強(qiáng)用戶(hù)信息的安全性,避免瀏覽器對(duì)Cookie數(shù)量和大小的限制。(3)Session配置統(tǒng)一管理起來(lái),集中管理服務(wù)端Session和客戶(hù)端Cookie的使用情況,對(duì)Cookie的使用做有效的監(jiān)管。(4)支持動(dòng)態(tài)更新,Session的配置動(dòng)態(tài)更新。1.2.7 開(kāi)放平臺(tái) 2006年年底:阿里巴巴提出了Workatalibaba的戰(zhàn)略,做一個(gè)支持二次開(kāi)發(fā)的工作平臺(tái),半開(kāi)放式地滿(mǎn)足各種賣(mài)家的長(zhǎng)尾管理需求。但經(jīng)過(guò)一年的平臺(tái)建設(shè),發(fā)現(xiàn)開(kāi)發(fā)者非常難利用平臺(tái)做二次開(kāi)發(fā),抱著嘗試的態(tài)度,與阿里軟件合作試水開(kāi)放平臺(tái)。2008年年底,平臺(tái)開(kāi)放淘寶服務(wù)30個(gè),每天調(diào)用量2000次,這一年開(kāi)放平臺(tái)的開(kāi)發(fā)者面向的客戶(hù)主要是阿里巴巴上的中小企業(yè)和淘寶C店賣(mài)家。開(kāi)放平臺(tái)建設(shè)初期要解決的就是三個(gè)問(wèn)題:服務(wù)路由、服務(wù)接口標(biāo)準(zhǔn)化、授權(quán)。此時(shí)兩個(gè)互聯(lián)網(wǎng)的新興技術(shù)Memcached和Hadoop開(kāi)始在開(kāi)放平臺(tái)中嘗試。到2009年年底,平臺(tái)開(kāi)放淘寶服務(wù)100多個(gè),每天調(diào)用量為4000次,這一年開(kāi)放平臺(tái)的開(kāi)發(fā)者面對(duì)的主要是淘寶C店賣(mài)家,賣(mài)家工具成為服務(wù)市場(chǎng)的主流,淘寶正式開(kāi)始自己的開(kāi)放之路。到2010年年底,平臺(tái)開(kāi)放淘寶服務(wù)300多個(gè),每天調(diào)用量為8億次,這一年淘寶正式開(kāi)始對(duì)外宣傳開(kāi)放。1.3 總結(jié)任何網(wǎng)站的發(fā)展都不是一蹴而就的,它在發(fā)展過(guò)程中會(huì)遇到各種各樣的問(wèn)題和業(yè)務(wù)帶來(lái)的壓力,正是這些問(wèn)題和壓力推動(dòng)著技術(shù)的進(jìn)步和發(fā)展,而技術(shù)的發(fā)展反過(guò)來(lái)又會(huì)促進(jìn)業(yè)務(wù)的更大提升。從個(gè)人網(wǎng)站到開(kāi)放平臺(tái),從MySQL到Oracle,從簡(jiǎn)單的買(mǎi)賣(mài)到第三方擔(dān)保交易,從PHP語(yǔ)言到Java語(yǔ)言,從使用技術(shù)到創(chuàng)造技術(shù)在不斷發(fā)展的過(guò)程中,淘寶遇到了很多問(wèn)題,而不斷地尋求解決方式,刻苦鉆研,不輕言放棄,最終使淘寶變得越來(lái)越成功。第2章 大型云存儲(chǔ)中心設(shè)計(jì)2.1 引言近年來(lái),隨著社交網(wǎng)絡(luò)、網(wǎng)絡(luò)新聞媒體和娛樂(lè)視頻等各種信息化服務(wù)的開(kāi)展產(chǎn)生了大量的數(shù)據(jù),使得數(shù)據(jù)存儲(chǔ)規(guī)模也呈現(xiàn)爆炸性增長(zhǎng)。云計(jì)算和物聯(lián)網(wǎng)的迅速發(fā)展,越來(lái)越多的個(gè)人和企業(yè)選擇將自己的業(yè)務(wù)遷移到大規(guī)模的數(shù)據(jù)中心,以此來(lái)降低本地的硬件成本和系統(tǒng)維護(hù)費(fèi)用。由于數(shù)據(jù)中心存儲(chǔ)的數(shù)據(jù)量十分龐大,管理系統(tǒng)的復(fù)雜性較高;從存儲(chǔ)設(shè)備級(jí)別上看,由于數(shù)據(jù)中心為了控制成本,大量采用廉價(jià)存儲(chǔ)設(shè)備,致使數(shù)據(jù)極易因硬件設(shè)備故障而丟失。這些都對(duì)海量數(shù)據(jù)存儲(chǔ)性能、可靠性等方面帶來(lái)了挑戰(zhàn)。云存儲(chǔ)是解決海量數(shù)據(jù)存儲(chǔ)的最有效手段。谷歌公司提出的MapReduce,作為一種新的編程模型,能有效地并行處理海量的數(shù)據(jù),其采用的文件系統(tǒng)和數(shù)據(jù)管理模式分別是GFS和BigTable。近些年,作為MapReduce的開(kāi)源實(shí)現(xiàn),Hadoop得到了企業(yè)和研究機(jī)構(gòu)的廣泛關(guān)注。本章基于Hadoop平臺(tái),提出了一種云存儲(chǔ)系統(tǒng)設(shè)計(jì),并分析了實(shí)現(xiàn)應(yīng)用系統(tǒng)需要實(shí)現(xiàn)的關(guān)鍵技術(shù)和管理技術(shù),并有針對(duì)性地提出海量數(shù)據(jù)存儲(chǔ)策略、網(wǎng)絡(luò)存儲(chǔ)架構(gòu)、可靠性保障策略和安全保障策略。2.2 云存儲(chǔ)中心設(shè)計(jì)2.2.1 Hadoop平臺(tái)Hadoop是一個(gè)由Apache基金會(huì)所開(kāi)發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu)。用戶(hù)可以在不了解分布式底層細(xì)節(jié)的情況下,開(kāi)發(fā)分布式程序。充分利用集群的威力進(jìn)行高速運(yùn)算和存儲(chǔ)。在Hadoop系統(tǒng)中,應(yīng)用程序可以并行運(yùn)行在由大規(guī)模廉價(jià)硬件構(gòu)成的分布式系統(tǒng)中。Hadoop在內(nèi)部實(shí)現(xiàn)了容錯(cuò)和擴(kuò)展機(jī)制,可以構(gòu)建成高可靠性和高擴(kuò)展性的分布式系統(tǒng)。Hadoop主要有三部分組成:HDFS(HadoopDistributed File System)、MapReduce分布式計(jì)算模型和Hbase(Hadoop Database)。Hadoop的結(jié)構(gòu)如圖1所示。圖 1 Hadoop結(jié)構(gòu)圖 根據(jù)本平臺(tái)功能設(shè)計(jì),存儲(chǔ)平臺(tái)最主要的部分是數(shù)據(jù)處理層,而在實(shí)現(xiàn)數(shù)據(jù)處理層時(shí),數(shù)據(jù)的并行加載存儲(chǔ)模塊成為了整個(gè)平臺(tái)實(shí)現(xiàn)的核心,Hadoop分布式技術(shù)為該平臺(tái)提供了數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)處理的模型及方法。使用Hadoop分布式文件系統(tǒng)存儲(chǔ)海量源數(shù)據(jù),通過(guò)MapReduce分布式計(jì)算模型來(lái)處理這些海量源數(shù)據(jù),然后采用Hbase分布式數(shù)據(jù)庫(kù)存儲(chǔ)處理后的海量數(shù)據(jù),以此來(lái)實(shí)現(xiàn)對(duì)海量海洋科學(xué)數(shù)據(jù)的存儲(chǔ)管理。 Hadoop分布式文件系統(tǒng) HDFS是分布式計(jì)算的存儲(chǔ)基礎(chǔ),布署在廉價(jià)的硬件設(shè)備上,是Hadoop的最底層。HDFS可以存儲(chǔ)TB級(jí)(甚至PB級(jí))的海量數(shù)據(jù),并為應(yīng)用程序提供高吞吐率的數(shù)據(jù)訪(fǎng)問(wèn)。HDFS采用Master/Slave的體系結(jié)構(gòu),集群中由一個(gè)NameNode和很多個(gè)Datanode組成。NameNode是主控服務(wù)器,管理文件系統(tǒng)元數(shù)據(jù)。它執(zhí)行文件系統(tǒng)的命名空間操作,比如打開(kāi)、關(guān)閉、重命名文件或目錄,還決定數(shù)據(jù)塊到Datanode的映射。Datanode存儲(chǔ)實(shí)際的數(shù)據(jù),負(fù)責(zé)處理客戶(hù)的讀寫(xiě)請(qǐng)求,依照NameNode的命令,執(zhí)行數(shù)據(jù)塊的創(chuàng)建、復(fù)制、刪除等工作。一個(gè)集群只有一個(gè)NameNode的設(shè)計(jì)大大簡(jiǎn)化了系統(tǒng)架構(gòu)。體系結(jié)構(gòu)如圖2所示:圖 2 HDFS體系結(jié)構(gòu)NameNode使用事務(wù)日志(EditLog)來(lái)記錄HDFS元數(shù)據(jù)的每次變化,使用映像文件(FsImage)存儲(chǔ)文件系統(tǒng)的命名空間,包括數(shù)據(jù)塊到文件的映射、文件的屬性等等。事務(wù)日志和映像文件是HDFS的核心數(shù)據(jù)結(jié)構(gòu)。NameNode啟動(dòng)時(shí),它將從磁盤(pán)中讀取映像文件和事務(wù)日志,把事務(wù)日志的事務(wù)都應(yīng)用到內(nèi)存中的映像文件上,然后將新的元數(shù)據(jù)刷新到本地磁盤(pán)新的映像文件中。HDFS還設(shè)計(jì)有特殊的Secondary NameNode節(jié)點(diǎn),輔助NameNode處理映像文件和事務(wù)日志。它會(huì)定期從NameNode上復(fù)制映像文件和事務(wù)日志到臨時(shí)目錄,合并生成新的映像文件后再重新上傳到NameNode,NameNode更新映像文件并清理事務(wù)日志,使得事務(wù)日志的大小始終控制在某個(gè)特定的限度下。 MapReduce編程 MapReduce就是“任務(wù)的分解與結(jié)果的匯總”。Map把任務(wù)分解成為多個(gè)任務(wù),Reduce把分解后多任務(wù)處理的結(jié)果匯總起來(lái),得到最終結(jié)果。把從HDFS中讀取的待處理的海量海洋科學(xué)數(shù)據(jù)分解成許多小數(shù)據(jù)集,每一個(gè)小數(shù)據(jù)集都并行處理,處理后存儲(chǔ)到分布式數(shù)據(jù)庫(kù)。歸納如下:數(shù)據(jù)集分割mapcombinereduce結(jié)果輸出。計(jì)算模型如圖3所示將海量海洋科學(xué)數(shù)據(jù)分割M個(gè)片段進(jìn)行并行Map操作,然后形成中間態(tài)鍵值對(duì),接著以k值進(jìn)行Group操作,形成新的元組,對(duì)這些元組分割成R個(gè)片段進(jìn)行并行的Reduce操作,最后輸出到分布式數(shù)據(jù)庫(kù)中保存起來(lái)。MapReduce計(jì)算模型的實(shí)現(xiàn)是由JobTracker和TaskTracker這兩類(lèi)服務(wù)調(diào)度的。JobTracker是主控服務(wù)器,只有一個(gè),負(fù)責(zé)調(diào)度和管理TaskTracker,把Map任務(wù)和Reduce任務(wù)分配給空閑的TaskTracker,并負(fù)責(zé)監(jiān)控任務(wù)的運(yùn)行情況;TaskTracker是從服務(wù),可以有多個(gè),負(fù)責(zé)執(zhí)行任務(wù)通常MapReduce和HDFS是運(yùn)行在一組相同的節(jié)點(diǎn)上的,即計(jì)算機(jī)點(diǎn)和存儲(chǔ)節(jié)點(diǎn)通常在一起,方便高效地調(diào)度任務(wù)。圖 3 MapReduce計(jì)算模型 Hbase分布式數(shù)據(jù)庫(kù)Hbase是一個(gè)功能強(qiáng)大的分布式數(shù)據(jù)存儲(chǔ)系統(tǒng),基于列存儲(chǔ)數(shù)據(jù)記錄。數(shù)據(jù)行有3種基本類(lèi)型定義:行關(guān)鍵字(Row Key),時(shí)間戳(Time Stamp)和列(Column)。每行包括一個(gè)可排序的行關(guān)鍵字,是數(shù)據(jù)行在表中的唯一標(biāo)示。一個(gè)可選的時(shí)間戳,每次數(shù)據(jù)操作都有一個(gè)相關(guān)聯(lián)的時(shí)間戳。某些列中可以有數(shù)據(jù)也可以沒(méi)有。列定義為:(:),通過(guò)這兩部分唯一指定一個(gè)數(shù)據(jù)的存儲(chǔ)列。海量的數(shù)據(jù)經(jīng)過(guò)MapReduce計(jì)算以后就可以按其K值作為行關(guān)鍵字進(jìn)行分布式存儲(chǔ),實(shí)現(xiàn)存儲(chǔ)和管理海量數(shù)據(jù)功能。 Hbase主要由主服務(wù)器、子表服務(wù)器和客戶(hù)端3部分組成。主服務(wù)器作為Hbase的中心,管理整個(gè)集群中的所有子表服務(wù)器,監(jiān)控每個(gè)子表服務(wù)器的運(yùn)行情況等。子表服務(wù)器接收來(lái)自主服務(wù)器的分配的子表、處理客戶(hù)端的讀寫(xiě)請(qǐng)求、緩沖區(qū)回收、壓縮和分割子表等功能。客戶(hù)端主要負(fù)責(zé)查找用戶(hù)子表所在的子表服務(wù)器地址信息。平臺(tái)還可以整合現(xiàn)有的關(guān)系型數(shù)據(jù)庫(kù),通過(guò)去異構(gòu)化處理共同提供海量數(shù)據(jù)存儲(chǔ)服務(wù)。圖 4 海量數(shù)據(jù)存儲(chǔ)和管理框架圖2.2.2 文件系統(tǒng)的設(shè)計(jì)節(jié)點(diǎn)主要分為兩部分:一種是數(shù)據(jù)節(jié)點(diǎn),另外一種是非數(shù)據(jù)結(jié)點(diǎn),其中系統(tǒng)中的主要成分都是數(shù)據(jù)節(jié)點(diǎn)(如圖5所示的DataNode節(jié)點(diǎn)),非數(shù)據(jù)節(jié)點(diǎn)主要指管理節(jié)點(diǎn)和監(jiān)控節(jié)點(diǎn)統(tǒng)一由Master節(jié)點(diǎn)表示,如圖5所示。1)Client節(jié)點(diǎn)。這個(gè)節(jié)點(diǎn)主要是指需要獲取海量分布式文件系統(tǒng)數(shù)據(jù)文件的應(yīng)用程序(訪(fǎng)問(wèn)客戶(hù)),可以是Web應(yīng)用業(yè)務(wù)服務(wù)器(如社交網(wǎng)絡(luò)、娛樂(lè)視頻、網(wǎng)絡(luò)虛擬銀行等),也可以是其他通過(guò)當(dāng)前海量數(shù)據(jù)存儲(chǔ)系統(tǒng)的訪(fǎng)問(wèn)接口進(jìn)行訪(fǎng)問(wèn)的其他主機(jī)和服務(wù)器。 2)DataNode節(jié)點(diǎn)。作為系統(tǒng)的主要構(gòu)成部分,DataNode節(jié)點(diǎn)負(fù)責(zé)了系統(tǒng)正常運(yùn)行的大部分任務(wù),其中包括:數(shù)據(jù)存儲(chǔ)、提供查詢(xún)和事務(wù)處理,并且在必要時(shí)根據(jù)系統(tǒng)的需求提供計(jì)算能力。其中所有Node節(jié)點(diǎn)之間的關(guān)系也不完全是相同的,可以根據(jù)地域劃分鄰居節(jié)點(diǎn)和非鄰居節(jié)點(diǎn),一般使得同一地域內(nèi)的節(jié)點(diǎn)都是鄰居節(jié)點(diǎn),基于這種設(shè)計(jì)主要考慮到系統(tǒng)規(guī)??赡軙?huì)隨著分布式數(shù)據(jù)應(yīng)用不斷增大,如果只有一層關(guān)系管理節(jié)點(diǎn),將會(huì)變得很困難,并且在實(shí)際使用中,同一地域的節(jié)點(diǎn)之間的通信單價(jià)和質(zhì)量都是比較好的,所以讓系統(tǒng)的管理分為3層,一個(gè)Master以每個(gè)組的關(guān)系看待節(jié)點(diǎn),而節(jié)點(diǎn)自己能夠區(qū)分是鄰居節(jié)點(diǎn)(同一組)還是遠(yuǎn)程節(jié)點(diǎn)(不同組的)。圖 5 云存儲(chǔ)系統(tǒng)結(jié)構(gòu)示意圖 3)Master節(jié)點(diǎn)。Master主要負(fù)責(zé)系統(tǒng)的整體狀態(tài)的監(jiān)控其中包括:整個(gè)系統(tǒng)的節(jié)點(diǎn)狀態(tài)、提供局部數(shù)據(jù)節(jié)點(diǎn)的查詢(xún)、保持文件塊的地址信息等。這里需要注意的是,根據(jù)系統(tǒng)負(fù)載能力的需求Master節(jié)點(diǎn)本身不一定是單個(gè)PC機(jī)器,也可能有幾臺(tái)機(jī)器組成一個(gè)集群共同提供服務(wù),這樣才能保證系統(tǒng)不會(huì)因?yàn)楣芾砉?jié)點(diǎn)的瓶頸而受到限制。2.2.3文件塊存儲(chǔ)策略及副本策略設(shè)計(jì)在文件塊存儲(chǔ)設(shè)計(jì)時(shí),規(guī)定每個(gè)文件塊都用一個(gè)主副本,即每次每個(gè)事務(wù)處理本文件塊的所有副本的更新都由主副本控制。每個(gè)文件塊除了本身包含的信息之外必須有以下控制信息塊:1)主副本所在節(jié)點(diǎn)編號(hào)。每個(gè)節(jié)點(diǎn)在加入系統(tǒng)時(shí)都從Master那里得到自己的唯一編號(hào)并且和自己的地址組成一個(gè)節(jié)點(diǎn)編號(hào)。2)副本個(gè)數(shù)。副本個(gè)數(shù)包括主副本和其他副本,如果為1說(shuō)明沒(méi)有其他副本,如果為0說(shuō)明此文件塊不存在。3)副本所在節(jié)點(diǎn)編號(hào)列表。保存所有節(jié)點(diǎn)編號(hào),在必要的時(shí)候可以根據(jù)這里的節(jié)點(diǎn)編號(hào)找到保存了副本的節(jié)點(diǎn)的地址和系統(tǒng)編號(hào)以進(jìn)行訪(fǎng)問(wèn)。在Master里面有一個(gè)根據(jù)系統(tǒng)的客戶(hù)信息生成的一個(gè)客戶(hù)編號(hào)的快照,并且有此快照構(gòu)成系統(tǒng)文件塊保存的地址信息的索引,在進(jìn)行全局查詢(xún)的時(shí)候,Maser就是根據(jù)這個(gè)快照表的信息進(jìn)行客戶(hù)信息定位的。然后根據(jù)算法把相應(yīng)的文件塊的地址返回到應(yīng)用服務(wù)器,讓它自行直接去訪(fǎng)問(wèn)相應(yīng)的節(jié)點(diǎn)。Master快照表結(jié)構(gòu)如表1。 表格 1 Master客戶(hù)編號(hào)快照表客戶(hù)編號(hào)文件塊編號(hào)客戶(hù)1文件塊a客戶(hù)2文件塊d客戶(hù)3文件塊a客戶(hù)4文件塊e Master快照表中多個(gè)客戶(hù)的信息有可能保存在同一文件塊中,文件塊出現(xiàn)重復(fù)是完全正常的。除了客戶(hù)快照表之外,Master還保存了另外一重要的表 文件塊副本表,這個(gè)表借用了Google的Big table的思想,主要包括文件塊編號(hào)表項(xiàng)和節(jié)點(diǎn)信息表項(xiàng),如表2所示。 表格 2 文件塊副本信息表文件塊編號(hào)節(jié)點(diǎn)信息文件塊d文件塊e文件塊a節(jié)點(diǎn)2|主副本|可用節(jié)點(diǎn)5|普通副本|可用節(jié)點(diǎn)8|普通副本|可用節(jié)點(diǎn)6|主副本|可用節(jié)點(diǎn)1|主副本|可用節(jié)點(diǎn)2|普通副本|可用節(jié)點(diǎn)3|普通副本|不可用2.2.4 文件塊更新算法設(shè)計(jì) 采用Google的Chubby提供進(jìn)行文件塊更新的鎖控制服務(wù),在進(jìn)行事務(wù)處理的時(shí)候經(jīng)常會(huì)遇到如下問(wèn)題:同一個(gè)事務(wù)中需要更新的信息不在一個(gè)文件塊中也不在一個(gè)節(jié)點(diǎn)中,在這個(gè)時(shí)候?yàn)榱吮WC事務(wù)順利地完成需要在多個(gè)涉及到信息更新的節(jié)點(diǎn)中選擇一個(gè)作為協(xié)調(diào)節(jié)點(diǎn),由它負(fù)責(zé)整個(gè)事務(wù)的更新流程和決定事務(wù)最后的成敗,即決定事務(wù)最后是成功提交還是失敗回滾。與傳統(tǒng)分布式的處理方式Paxos算法相比,Chubby服務(wù)機(jī)制主要解決以下幾個(gè)問(wèn)題。 1)開(kāi)發(fā)人員在開(kāi)發(fā)Service初期很少考慮到系統(tǒng)一致性的問(wèn)題,也不會(huì)使用Consensus Protocol,但隨著開(kāi)發(fā)進(jìn)行,問(wèn)題會(huì)變得越來(lái)越嚴(yán)重。Chubby服務(wù)中采用Lock Service可以解決一致性問(wèn)題,同時(shí)保持系統(tǒng)原有的程序架構(gòu)和通信機(jī)制不變。 2)系統(tǒng)中很多事件發(fā)生(比如Master地址信息)是需要告知其他用戶(hù)和服務(wù)器,Chubby使用一個(gè)基于文件系統(tǒng)的鎖服務(wù)可以將這些變動(dòng)寫(xiě)入文件中。因此,很多的開(kāi)發(fā)人員通過(guò)使用Chubby來(lái)保存Metadata和Configuration。 3)雖然基于鎖的開(kāi)發(fā)接口更容易被開(kāi)發(fā)人員所熟悉。但在Chubby系統(tǒng)中采用了建議性的鎖而沒(méi)有采用強(qiáng)制性的鎖,采用這種方式是為了方便系統(tǒng)組件之間的信息交互而不會(huì)被阻止訪(fǎng)問(wèn)。同時(shí),Chubby還采用了粗粒度(Coarse Grained)鎖服務(wù)而沒(méi)有采用細(xì)粒度(Fine Grained)鎖服務(wù),以提高系統(tǒng)性能。 4)Chubby選擇一個(gè)副本為協(xié)調(diào)者(Coordinator),協(xié)調(diào)者從客戶(hù)提交的值中選擇一個(gè),接受消息然后廣播給所有的副本,各副本選擇接受或拒接。協(xié)調(diào)者接收大多數(shù)副本的反饋后,認(rèn)為達(dá)到一致性,向個(gè)副本發(fā)Commit消息。Chubby的結(jié)構(gòu)圖如圖6所示。Chubby一般由5臺(tái)機(jī)器組成就足以提供上萬(wàn)臺(tái)機(jī)器的鎖服務(wù),5個(gè)服務(wù)器機(jī)器都是采用完全冗余策略來(lái)保證的,在Chubby內(nèi)部采用Consensus Protocol協(xié)議保證系統(tǒng)的一致性,在每次5臺(tái)機(jī)器內(nèi)部通過(guò)此協(xié)議選出Master并且在一定時(shí)間后更新Master,在每次數(shù)據(jù)更新的時(shí)候5臺(tái)機(jī)器在Master的控制下同步更新。Client和Chubby之間采用event進(jìn)行通信,并且為了降低通信頻率,Client在本地會(huì)保存1個(gè)和自己相關(guān)的Chubby文件的cache,cache有2個(gè)狀態(tài)(1個(gè)有效,1個(gè)無(wú)效)。當(dāng)文件在Chubby端發(fā)生更新的時(shí)候,Chubby通知Client文件無(wú)效,然后Client自己去更新文件。圖 6 Chubby系統(tǒng)結(jié)構(gòu)圖Client更新DataNode節(jié)點(diǎn)數(shù)據(jù)文件的算法設(shè)計(jì)如圖7所示。圖 7 Client更新DataNode節(jié)點(diǎn)數(shù)據(jù)時(shí)序圖 其中,在DataNode節(jié)點(diǎn)數(shù)據(jù)更新的第四步中,如果Pipeline數(shù)據(jù)流管道中的某一個(gè)DataNode節(jié)點(diǎn)寫(xiě)操作失敗,那么算法將進(jìn)行如下操作。 1)關(guān)閉Pipeline數(shù)據(jù)流,然后將ack queue中的packets添加到data queue的前面以免發(fā)生packets數(shù)據(jù)包的丟失現(xiàn)象; 2)升級(jí)在正常的DataNode節(jié)點(diǎn)上的保存的block的ID版本,使得發(fā)生故障的DataNode節(jié)點(diǎn)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論