一、概述
云計(jì)算(cloudcomputing),是分布式計(jì)算技術(shù)的一種。云計(jì)算透過網(wǎng)絡(luò)連接,將一切隱沒在云端,普通用戶不在關(guān)心數(shù)據(jù)存在哪里,不在關(guān)心數(shù)據(jù)的安全,不在關(guān)心應(yīng)用程序是否需要升級(jí),不在關(guān)心計(jì)算機(jī)病毒,這一切工作都由云計(jì)算中心負(fù)責(zé)解決,普通用戶要做的就是選擇自己喜愛的云服務(wù)商并購買自己需要的服務(wù)。云計(jì)算使普通用戶有了享受高性能計(jì)算的機(jī)會(huì),云計(jì)算中心幾乎可能提供無限制的計(jì)算能力。
Google提出的云計(jì)算強(qiáng)調(diào)的是云的重要性,因?yàn)镚oogle從來都沒有端,并且將GFS拋出作為誘餌欲占主動(dòng);微軟則強(qiáng)調(diào)“云”加“端”才是云計(jì)算,因?yàn)槲④浀囊暣耙恢笔?ldquo;端”的霸主;VMware則認(rèn)為虛擬化是云計(jì)算的核心技術(shù);Sun公司則重提多年前他們說的老話“網(wǎng)絡(luò)就是計(jì)算機(jī)”;Adobe則通過Flex占領(lǐng)用戶的眼球,使FlashPlayer進(jìn)軍云計(jì)算;另外大量的服務(wù)器托管公司則將服務(wù)器的租用稱為云計(jì)算。云存儲(chǔ)是在云計(jì)算概念上延伸和發(fā)展出來的一個(gè)新的概念,是云存儲(chǔ)重要的存儲(chǔ)資源。它通過集群計(jì)算、網(wǎng)格計(jì)算和分布式計(jì)算等功能,透過網(wǎng)絡(luò),將不同類型的存儲(chǔ)設(shè)備通過軟件協(xié)同工作,對(duì)網(wǎng)絡(luò)用戶提供數(shù)據(jù)存儲(chǔ)和訪問功能。
二、云存儲(chǔ)結(jié)構(gòu)
云存儲(chǔ)將云系統(tǒng)的存儲(chǔ)資源進(jìn)行統(tǒng)一整合管理,提供存儲(chǔ)虛擬化功能,為用戶提供一個(gè)統(tǒng)一的存儲(chǔ)空間,具有集中存儲(chǔ)、分布式擴(kuò)展、安全認(rèn)證、數(shù)據(jù)加密等方面的優(yōu)點(diǎn)。在云狀存儲(chǔ)系統(tǒng)中,所有存儲(chǔ)資源對(duì)使用者都是透明的,使用者不必知道存儲(chǔ)設(shè)備的型號(hào)、接口和傳輸協(xié)議,也不必建立龐大的獨(dú)立的數(shù)據(jù)備份系統(tǒng)和應(yīng)急容災(zāi)系統(tǒng),這些狀態(tài)監(jiān)控、維護(hù)、備份和應(yīng)急容災(zāi)在云存儲(chǔ)系統(tǒng)中都能夠自動(dòng)完成,已經(jīng)作為云的很自然的一部分。云存儲(chǔ)的結(jié)構(gòu)如圖1所示。云存儲(chǔ)結(jié)構(gòu)模型由4層組成。
1.存儲(chǔ)層
云存儲(chǔ)設(shè)備可以是光纖通道存儲(chǔ)設(shè)備,也可以是NAS或者iSCSI等網(wǎng)絡(luò)存儲(chǔ)設(shè)備。在云中,存儲(chǔ)設(shè)備數(shù)量龐大,通常會(huì)分布在不同的地方,通過廣域網(wǎng)、互聯(lián)網(wǎng)或者專用的光纖網(wǎng)絡(luò)連接。通常需要提供一個(gè)統(tǒng)一的存儲(chǔ)設(shè)備管理系統(tǒng),實(shí)現(xiàn)物理存儲(chǔ)設(shè)備的邏輯化和虛擬化管理。
2.基礎(chǔ)管理層
基礎(chǔ)管理層是云存儲(chǔ)核心的部分。該層通過集群存儲(chǔ)、分布式存儲(chǔ)和網(wǎng)格存儲(chǔ)等技術(shù),實(shí)現(xiàn)眾多存儲(chǔ)設(shè)備之間的協(xié)同工作,對(duì)外提供統(tǒng)一的存儲(chǔ)訪問服務(wù)。
3.應(yīng)用接口層
是由眾多的第三方軟硬件廠商提供的插件層。運(yùn)營單位可以根據(jù)實(shí)際業(yè)務(wù)需要,利用應(yīng)用接口快速開發(fā)滿足需求的應(yīng)用程序,如云存儲(chǔ)的視頻監(jiān)控應(yīng)用、視頻點(diǎn)播應(yīng)用、網(wǎng)絡(luò)存儲(chǔ)的硬盤、遠(yuǎn)程數(shù)據(jù)備份應(yīng)用等。
4.訪問層
訪問層提供給用戶統(tǒng)一的訪問登錄接口。用戶只有登錄后,才可以使用云存儲(chǔ)服務(wù)。不同的云存儲(chǔ)系統(tǒng)提供的訪問類型和訪問手段不同,安全需求也會(huì)千差萬別。用戶可以根據(jù)自己的需求選擇相應(yīng)的服務(wù)。
三、云存儲(chǔ)平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)
(一)設(shè)計(jì)方案論證比較
GoogleGFSGoogle的數(shù)據(jù)存儲(chǔ)與管理技術(shù)具有以下特點(diǎn):基于大規(guī)模(幾千到上萬節(jié)點(diǎn))通用PC構(gòu)建集群;集群節(jié)點(diǎn)同時(shí)提供存儲(chǔ)與計(jì)算服務(wù);基于不可靠硬件環(huán)境實(shí)現(xiàn)了高可靠的集群軟件系統(tǒng);用于處理與生成海量數(shù)據(jù)集的分布式計(jì)算模型高度抽象,在數(shù)據(jù)密集型業(yè)務(wù)中應(yīng)用廣泛;數(shù)據(jù)管理系統(tǒng)不支持完整的關(guān)系模型,結(jié)構(gòu)簡(jiǎn)單而輕量。
Hadoop實(shí)現(xiàn)了一個(gè)分布式文件系統(tǒng),簡(jiǎn)稱HDFS。用戶可以在不了解分布式底層細(xì)節(jié)的情況下,開發(fā)分布式程序。充分利用集群的威力高速運(yùn)算和存儲(chǔ)。HDFS有著高容錯(cuò)性的特點(diǎn),并且設(shè)計(jì)用來部署在低廉的硬件上。而且它提供高傳輸率來訪問應(yīng)用程序的數(shù)據(jù),適合那些有著超大數(shù)據(jù)集的應(yīng)用程序。HDFS采用master/slave架構(gòu)。一個(gè)Namenod以及一定數(shù)目的Datanode組成一個(gè)HDFS集群。在集群中,每一個(gè)節(jié)點(diǎn)包含一個(gè)Datanode。一個(gè)文件則分割成一個(gè)或多個(gè)block,由Datanode集合提供存儲(chǔ)block。HDFS采用java語言開發(fā),這給運(yùn)存儲(chǔ)的部署帶來很大的方便。
Dynamo是亞馬遜的key-value模式的存儲(chǔ)平臺(tái),可用性和擴(kuò)展性都很好,性能也不錯(cuò):讀寫訪問中99.9%的響應(yīng)時(shí)間都在300ms 內(nèi)。Dynamo的可擴(kuò)展性和可用性采用的都比較成熟的技術(shù),數(shù)據(jù)分區(qū)采用改進(jìn)的一致性哈希(consistenthashing)方式進(jìn)行復(fù)制,利用數(shù)據(jù)對(duì)象的版本化實(shí)現(xiàn)一致性。復(fù)制時(shí)因?yàn)楦庐a(chǎn)生的一致性問題的維護(hù)采取NRW機(jī)制以及去中心化的復(fù)制同步協(xié)議。 Dynamo是完全去中心化的系統(tǒng),人工管理工作很小。Dynamo按分布式系統(tǒng)常用的哈希算法切分?jǐn)?shù)據(jù),分放在不同的node上。Read操作時(shí),也是根據(jù)key的哈希值尋找對(duì)應(yīng)的node。Dynamo使用了ConsistentHashing算法,node對(duì)應(yīng)的不再是一個(gè)確定的hash值,而是一個(gè)hash值范圍,key的hash值落在這個(gè)范圍內(nèi),則順時(shí)針沿ring找,碰到的第一個(gè)node即為所需。Dynamo對(duì) ConsistentHashing算法的改進(jìn)在于:它放在環(huán)上作為一個(gè)node的是一組機(jī)器(而不是memcached把一臺(tái)機(jī)器作為node),這一組機(jī)器是通過同步機(jī)制保證數(shù)據(jù)一致的。如果一個(gè)ring內(nèi)的訪問量大了,則可以在兩個(gè)node間加入一個(gè)新node以緩解壓力,這時(shí)會(huì)影響到其后繼 node的hash范圍,需要調(diào)整數(shù)據(jù)。假設(shè)一個(gè)ring中原本只有node2、node3、node4,在加入新的node1之后,原先從node2查詢的部分key將改為從node1查詢,node1和node2中的數(shù)據(jù)就需要調(diào)整,主要是node1從node2中提取出屬于它的數(shù)據(jù),這樣做需要選取性能壓力不高的時(shí)候。Dynamo的一個(gè)node中一臺(tái)機(jī)器建有一個(gè)MerkleTree,當(dāng)兩臺(tái)機(jī)器不一致時(shí),通過這個(gè)tree結(jié)構(gòu),可以快速定位不一致的Object來恢復(fù)數(shù)據(jù)。MerkleTree又叫HashTree,它把key分成幾個(gè)range,每個(gè)range算出一個(gè)hash值,作為葉子,再一層層合并計(jì)算上去,這樣,從root開始比較hash值,就可以快速找到哪幾段range中的hash值變化了。
SAN系統(tǒng)是在存儲(chǔ)端構(gòu)建存儲(chǔ)的網(wǎng)絡(luò),將多個(gè)存儲(chǔ)設(shè)備構(gòu)成一個(gè)存儲(chǔ)區(qū)域網(wǎng)絡(luò)。前端的主機(jī)可以通過網(wǎng)絡(luò)的方式訪問后端的存儲(chǔ)設(shè)備。而且,由于提供了塊設(shè)備的訪問方式,與前端操作系統(tǒng)無關(guān)。在SAN連接方式上,可以有多種選擇。一種選擇是使用光纖網(wǎng)絡(luò),能夠操作快速的光纖磁盤。另外一種選擇是使用以太網(wǎng),采取iSCSI協(xié)議,能夠運(yùn)行在普通的局域網(wǎng)環(huán)境下。
由于存儲(chǔ)區(qū)域網(wǎng)絡(luò)中的磁盤設(shè)備并沒有與某一臺(tái)主機(jī)綁定在一起,而是采用了非常靈活的結(jié)構(gòu),因此對(duì)于主機(jī)來說可以訪問多個(gè)磁盤設(shè)備,從而能夠獲得性能的提升。SAN系統(tǒng)與分布式文件系統(tǒng)例如GoogleFileSystem并不是相互對(duì)立的系統(tǒng),而是在構(gòu)建集群系統(tǒng)的時(shí)候可供選擇的兩種方案。其中,在選擇SAN系統(tǒng)的時(shí)候,為了應(yīng)用程序的讀寫,還需要為應(yīng)用程序提供上層的語義接口,此時(shí)就需要在SAN之上構(gòu)建文件系統(tǒng)。而 GoogleFileSystem正好是一個(gè)分布式的文件系統(tǒng),因此能夠建立在SAN系統(tǒng)之上??傮w來說,SAN與分布式文件系統(tǒng)都可以提供類似的功能。
(二)使用hadoop實(shí)現(xiàn)私有云存儲(chǔ)
Hadoop作為Google的開源實(shí)現(xiàn),其具有以下幾個(gè)優(yōu)點(diǎn)??蓴U(kuò)展,不論是存儲(chǔ)的可擴(kuò)展還是計(jì)算的可擴(kuò)展都是Hadoop的設(shè)計(jì)根本。經(jīng)濟(jì),框架可以運(yùn)行在任何普通的PC上??煽浚植际轿募到y(tǒng)的備份恢復(fù)機(jī)制以及MapReduce的任務(wù)監(jiān)控保證了分布式處理的可靠性。高效:分布式文件系統(tǒng)的高效數(shù)據(jù)交互實(shí)現(xiàn)以及MapReduce結(jié)合LocalData處理的模式,為高效處理海量的信息作了基礎(chǔ)準(zhǔn)備。HDFS采用java語言開發(fā),因此很少存在兼容性問題。Hadoop這些特點(diǎn)適合于企業(yè)實(shí)現(xiàn)私有云平臺(tái)。
所設(shè)計(jì)的云存儲(chǔ)系統(tǒng)的體系結(jié)構(gòu)由web客戶端、Web操作系統(tǒng)、云存儲(chǔ)服務(wù)器、云存儲(chǔ)中心五個(gè)部分構(gòu)成。其結(jié)構(gòu)如圖2所示。
1.客戶端
客戶端機(jī)群是云存儲(chǔ)系統(tǒng)的前臺(tái)系統(tǒng),客戶端機(jī)器上只需要安裝瀏覽器就能夠滿足用戶訪問需求。用戶通過瀏覽器訪問云存儲(chǔ)系統(tǒng),其他的服務(wù)都由云存儲(chǔ)系統(tǒng)在后臺(tái)自動(dòng)。
2.Web操作系統(tǒng)
這里的web操作系統(tǒng)采用了eysOS。EyeOS負(fù)責(zé)接收客戶的訪問請(qǐng)求,對(duì)客戶的訪問請(qǐng)求實(shí)施合法性驗(yàn)證。EyeOS中提供了大量的應(yīng)用,允許用戶根據(jù)自己的喜好下載和使用這些應(yīng)用,實(shí)現(xiàn)系統(tǒng)的個(gè)性化配置,真正達(dá)到“一次配置,到處使用”。eysOS同時(shí)提供用戶文件的存取接口,通過該接口可以將文件存儲(chǔ)到Hadoop云端,同時(shí)可以通過它對(duì)文件進(jìn)行各種操作。
3.云存儲(chǔ)服務(wù)器
云存儲(chǔ)服務(wù)器由大量的集群“云端服務(wù)器”構(gòu)成,同時(shí)為Hadoop提供管理節(jié)點(diǎn)(NameNode),負(fù)責(zé)管理文件系統(tǒng)名稱空間和控制外部客戶機(jī)的訪問。當(dāng)然用戶的數(shù)據(jù)也都是存儲(chǔ)在這里的。
4.云存儲(chǔ)中心
云存儲(chǔ)中心由眾多的服務(wù)器構(gòu)成Hadoop的數(shù)據(jù)節(jié)點(diǎn)(DataNodes),負(fù)責(zé)保存文件數(shù)據(jù),實(shí)現(xiàn)文件的分布式存儲(chǔ)、負(fù)載平衡以及文件的容錯(cuò)控制。
其實(shí)施過程主要包括:
1.新建系統(tǒng)Hadoop用戶
Hadoop要求所有機(jī)器上hadoop的部署目錄結(jié)構(gòu)要相同,并且都有一個(gè)相同的用戶名的帳戶,所以需要每臺(tái)機(jī)器建一個(gè)同名的用戶。在這4臺(tái)機(jī)器上建hadoop用戶并加入到root組,密碼:hadoop,默認(rèn)路徑/home/hadoop/。
2.SSH設(shè)置
Hadoop需要namenode到datanode的無密碼SSH,所以需要設(shè)置namenode到其他3臺(tái)datanode的無密碼公鑰認(rèn)證方式的SSH。設(shè)置完成后,測(cè)試一下namenode到各個(gè)節(jié)點(diǎn)的SSH鏈接,包括到本機(jī),如果不需要輸入密碼就可以SSH登錄,說明設(shè)置成功了。
3.安裝JDK
到sun網(wǎng)站下載JDK安裝包,并在每臺(tái)機(jī)器的root用戶下面安裝。安裝軟件會(huì)將JDK自動(dòng)安裝到/usr/java /jdk1.6.0_26目錄下。安裝完成后再設(shè)置JDK的環(huán)境變量。考慮到JDK可能會(huì)有其他系統(tǒng)用戶也會(huì)用到,建議將環(huán)境變量直接設(shè)置在/etc /profile中。
4.Hadoop集群配置
用hadoop用戶登錄namenode,在namenode上下載hadoop-0.20.2.tar.gz,將其解壓到/home /hadoop/目錄下,然后在hadoop下創(chuàng)建tmp文件夾并把Hadoop的安裝路徑添加到/etc/profile中修改/etc /profile文件(配置java環(huán)境變量的文件),設(shè)置HADOOP_HOME和PATH的路徑,并使其有效。另外在datanode上也需要如 namenode一樣修改配置HADOOP_HOME和PATH。
編輯Hadoop配置文件。hadoop配置文件在conf目錄下,包括:hadoop-env.sh:配置JAVA_HOME路徑;core-site.xml:配置Common組件的屬性;hdfs-site.xml:配置HDFS組件的屬性;mapred-site.xml:配置map-reduce組件的屬性;配置masters文件,加入namenode的ip地址;配置slaves文件,加入所有datanode的ip地址等。四、私有云中文件讀寫流程
讀文件的流程:讀一個(gè)文件用戶首先需要從Hadoop的數(shù)據(jù)節(jié)點(diǎn)把文件下載到本地,然后再由相應(yīng)的軟件打開顯示給用戶。讀文件過程如下:
(1)通過瀏覽器,用戶訪問運(yùn)存儲(chǔ)的Web操作系統(tǒng),雙擊想要訪問的文件圖標(biāo),使得eyeOS向Hadoop管理節(jié)點(diǎn)發(fā)出獲取文件請(qǐng)求。
(2)管理節(jié)點(diǎn)查找要訪問的文件信息,透過數(shù)據(jù)節(jié)點(diǎn)把文件內(nèi)容發(fā)送到客戶端。
(3)客戶端下載數(shù)據(jù)節(jié)點(diǎn)傳過來的文件塊,并自動(dòng)將這些塊合并成一個(gè)文件。
(4)在Web操作系統(tǒng)中,自動(dòng)啟動(dòng)該文件關(guān)聯(lián)的應(yīng)用程序,顯示文件內(nèi)容。
寫文件的流程:用戶對(duì)文件進(jìn)行修改,并提交保存請(qǐng)求,WEB操作系統(tǒng)會(huì)將用戶修改后的文件自動(dòng)上傳到云中。另外,用戶也可以自主選擇上傳文件到云存儲(chǔ)系統(tǒng)。(1)用戶使用瀏覽器客戶端,訪問運(yùn)存儲(chǔ)的web操作系統(tǒng),自動(dòng)啟動(dòng)相關(guān)聯(lián)的程序修改并保存想要訪問的文件,使得eyeOS向Hadoop節(jié)點(diǎn)發(fā)出上傳文件請(qǐng)求。(2)管理節(jié)點(diǎn)接收到文件上傳請(qǐng)求,自動(dòng)計(jì)算文件大小,查找系統(tǒng)數(shù)據(jù)節(jié)點(diǎn)存儲(chǔ)狀況,分配存儲(chǔ)空間。(3)客戶端上傳文件塊到各個(gè)數(shù)據(jù)節(jié)點(diǎn),完成文件的修改存儲(chǔ)。
五、結(jié)論
歸根到底,云存儲(chǔ)是分布式存儲(chǔ)技術(shù)的發(fā)展和延續(xù)。透過廣域網(wǎng),云存儲(chǔ)實(shí)現(xiàn)比傳統(tǒng)的分布式存儲(chǔ)更透明、更快速、更可靠的遠(yuǎn)程存儲(chǔ)訪問技術(shù)。
本文實(shí)現(xiàn)了構(gòu)建私有云存儲(chǔ)平臺(tái)上云存儲(chǔ)的管理與應(yīng)用,以hadoop開源平臺(tái)實(shí)現(xiàn)了一個(gè)以Web操作系統(tǒng)為云存儲(chǔ)接口的云存儲(chǔ)系統(tǒng)。下一步將繼續(xù)對(duì)系統(tǒng)進(jìn)行逆向測(cè)試、壓力測(cè)試、兼容性測(cè)試等實(shí)用性方面的測(cè)試。以及進(jìn)一步優(yōu)化的工作。