劉毅文,黃顯寧,文坤輝,米春橋
(懷化學(xué)院 計(jì)算機(jī)科學(xué)與工程學(xué)院,湖南 懷化 418000)
隨著計(jì)算機(jī)硬件的不斷升級(jí)和云計(jì)算技術(shù)的飛速發(fā)展,云存儲(chǔ)從云計(jì)算延伸出來,迅速發(fā)展為一種新型的網(wǎng)絡(luò)存儲(chǔ)技術(shù)。當(dāng)云計(jì)算和處理的核心是存儲(chǔ)和管理大量數(shù)據(jù)時(shí),需要在云計(jì)算系統(tǒng)中配置大量的存儲(chǔ)設(shè)備,然后將云計(jì)算系統(tǒng)轉(zhuǎn)換為云存儲(chǔ)系統(tǒng)。因此,云存儲(chǔ)是一個(gè)數(shù)據(jù)存儲(chǔ)和管理為核心的云計(jì)算系統(tǒng),通過集群應(yīng)用程序中網(wǎng)絡(luò)技術(shù)或分布式文件系統(tǒng)等功能,使得網(wǎng)絡(luò)中許多不同類型的存儲(chǔ)設(shè)備通過應(yīng)用軟件一起工作[1],系統(tǒng)統(tǒng)一向外提供數(shù)據(jù)存儲(chǔ)和業(yè)務(wù)訪問功能。簡(jiǎn)而言之,云存儲(chǔ)是一種新興的解決方案,可以將存儲(chǔ)資源放到云中供人們?cè)L問。用戶可以隨時(shí)隨地連接到云,通過任何網(wǎng)絡(luò)設(shè)備訪問數(shù)據(jù)[2]。
隨著云存儲(chǔ)的應(yīng)用越來越多,云存儲(chǔ)產(chǎn)品和服務(wù)在市場(chǎng)上不斷成熟,以滿足新的數(shù)據(jù)存儲(chǔ)需求。與此同時(shí),云存儲(chǔ)系統(tǒng)是視頻云的基礎(chǔ),也是大數(shù)據(jù)解決方案的第一步。在將存儲(chǔ)從硬件轉(zhuǎn)換為服務(wù)后,云計(jì)算還提供了復(fù)雜的管理和調(diào)度功能[3],使云存儲(chǔ)服務(wù)智能化,并將包含大數(shù)據(jù)分析的數(shù)據(jù)生態(tài)整合在一起,以更緊密地響應(yīng)用戶的各種需求。對(duì)于企業(yè)來說,要擴(kuò)大云存儲(chǔ)的市場(chǎng)份額,企業(yè)的快速發(fā)展可以提供機(jī)會(huì)。
文中重點(diǎn)討論輕量級(jí)云存儲(chǔ)環(huán)境部署場(chǎng)景,將當(dāng)前標(biāo)準(zhǔn)云存儲(chǔ)系統(tǒng)的最小規(guī)模(通常需要2個(gè)元數(shù)據(jù)服務(wù)器和6個(gè)數(shù)據(jù)節(jié)點(diǎn))縮減到2個(gè)標(biāo)準(zhǔn)服務(wù)器。使用虛擬容器技術(shù)Docker、云存儲(chǔ)元數(shù)據(jù)節(jié)點(diǎn)服務(wù)器(MDS)、數(shù)據(jù)節(jié)點(diǎn)(DN)做Docker映像,部署在標(biāo)準(zhǔn)服務(wù)器上。當(dāng)用戶使用它時(shí),MDS和DN鏡像容器直接從標(biāo)準(zhǔn)映像啟動(dòng),以提供云存儲(chǔ)服務(wù)。
目前,不同用戶對(duì)云計(jì)算有不同的定義,即網(wǎng)格計(jì)算、并行計(jì)算、網(wǎng)絡(luò)磁盤、超級(jí)服務(wù)器或像AlphaGo這樣的高科技。然而,從學(xué)術(shù)研究人員的角度來看,云計(jì)算是一種新的商業(yè)模式,它將IT基礎(chǔ)設(shè)施利用率轉(zhuǎn)化為銷售和服務(wù)。
云計(jì)算在不同的歷史時(shí)期扮演著不同的角色。在20世紀(jì)末,云計(jì)算成為一種新的概念和新技術(shù)。當(dāng)時(shí),“云計(jì)算”一詞并不存在于計(jì)算機(jī)領(lǐng)域,然而,學(xué)者們一直在研究的網(wǎng)格計(jì)算[4]和并行計(jì)算實(shí)際上是云計(jì)算的早期原型。在21世紀(jì)初,云計(jì)算更具有代表性,但只有大型IT基礎(chǔ)設(shè)施的大公司(谷歌、IBM)才能擁有。2006年,亞馬遜第一次以服務(wù)的方式出售對(duì)象存儲(chǔ)服務(wù),云計(jì)算從少數(shù)公司的能力發(fā)展為大眾服務(wù)[5]。
云計(jì)算的主要目標(biāo)是應(yīng)用云端的計(jì)算、存儲(chǔ)等資源優(yōu)勢(shì),突破終端的資源限制,為用戶提供更加豐富的應(yīng)用以及更好的用戶體驗(yàn)。其定義一般可以概括為終端通過無線網(wǎng)絡(luò),以按需、易擴(kuò)展的方式從云端獲得所需的基礎(chǔ)設(shè)施、平臺(tái)、軟件等資源或信息服務(wù)的使用與交付模式[6]。云計(jì)算技術(shù)的發(fā)展實(shí)質(zhì)上是組件間的耦合越來越小,越來越孤立,資源的粒度越來越小,從專有到普通的過程。
(1)物理機(jī)時(shí)代的隔離方式—機(jī)架。
當(dāng)用戶需要服務(wù)時(shí),購(gòu)買物理機(jī)器。當(dāng)需要更多的服務(wù)時(shí),一個(gè)機(jī)架需要裝載更多的物理機(jī)器。因此,在物理機(jī)器時(shí)代的隔離是機(jī)器級(jí)的隔離[7]。這種方式會(huì)凸現(xiàn)兩個(gè)問題:資源粒度過粗,設(shè)備利用率不高;無法便捷地利用軟件統(tǒng)一控制協(xié)調(diào)。
(2)操作系統(tǒng)的隔離方式—虛擬機(jī)。
隨著虛擬化的發(fā)展,操作系統(tǒng)級(jí)的隔離隨之出現(xiàn),這通常被稱為虛擬機(jī)(VM)。每一個(gè)操作系統(tǒng)都由許多個(gè)虛擬操作系統(tǒng)組成,每個(gè)操作系統(tǒng)都是虛擬服務(wù)器[8],同時(shí)共享硬件資源。由于單個(gè)物理機(jī)器可以創(chuàng)建許多虛擬機(jī),因此資源粒度越小,利用率越高。與此同時(shí),它帶來了一個(gè)非常明顯的優(yōu)勢(shì),可以很容易地由軟件創(chuàng)建、重新啟動(dòng)、摧毀虛擬機(jī)。當(dāng)在數(shù)據(jù)中心生成大量的虛擬機(jī),并將生成的虛擬機(jī)放在特定的管理、監(jiān)視、安全和網(wǎng)絡(luò)設(shè)施中進(jìn)行輔助時(shí),它就變成了云,即所說的IaaS[9]。
(3)應(yīng)用層面的隔離方式—PaaS。
Docker的出現(xiàn)為PaaS平臺(tái)的實(shí)現(xiàn)提供了一條全新的途徑,也使為開發(fā)者提供更簡(jiǎn)潔的服務(wù)成為了可能。基于Docker容器,開發(fā)人員不再需要花費(fèi)大量精力來處理各種開發(fā)、測(cè)試和生產(chǎn)環(huán)境之間的差異,而直接將應(yīng)用環(huán)境遷移到PaaS平臺(tái)的運(yùn)行環(huán)境,不必?fù)?dān)心各種依賴和配置問題。傳統(tǒng)的PaaS是一個(gè)應(yīng)用程序級(jí)別的隔離,在應(yīng)用程序和應(yīng)用程序之前是獨(dú)立的,共享相同的運(yùn)行時(shí)環(huán)境。與此同時(shí),由于更加細(xì)化的資源粒度,使得同樣的PaaS平臺(tái)可以同時(shí)運(yùn)行更多的應(yīng)用程序。但PaaS平臺(tái)也存在問題,由于平臺(tái)與其運(yùn)行環(huán)境息息相關(guān),因此必須為每個(gè)平臺(tái)定制代碼,這對(duì)它的通用而言是一個(gè)極大的阻礙[10]。
(4)進(jìn)程層面的隔離方式—容器。
因?yàn)閼?yīng)用程序和執(zhí)行環(huán)境是相關(guān)的,所以應(yīng)用程序和執(zhí)行環(huán)境可以打包在一起,因此應(yīng)用容器技術(shù)解決PaaS平臺(tái)的應(yīng)用程序必須依賴于其執(zhí)行環(huán)境的問題。容器是一個(gè)應(yīng)用程序,它的一系列操作環(huán)境依賴于封裝在盒子里的一個(gè)“盒子”里,以共享相同的操作系統(tǒng)內(nèi)核,使用操作系統(tǒng)內(nèi)核的一些特性來實(shí)現(xiàn)資源隔離,容器技術(shù)是一個(gè)過程級(jí)隔離。容器技術(shù)不僅解決了環(huán)境依賴的問題,而且使隔離的粒度進(jìn)一步細(xì)化、容器生成和銷毀更快(第二級(jí))。Docker作為輕量級(jí)虛擬化技術(shù)的代表,是LXC技術(shù)的擴(kuò)展,被認(rèn)為是虛擬化領(lǐng)域的一次革新。
因此,縱觀整個(gè)云計(jì)算技術(shù)開發(fā)過程,最重要的主線之一是越來越深入、更細(xì)致的資源粒度,管理越來越方便。如果云計(jì)算的未來是一種公共資源,那么它所驅(qū)動(dòng)的業(yè)務(wù)無疑具有一個(gè)更細(xì)粒度和更可度量的計(jì)算單元特性的通用執(zhí)行環(huán)境。
云計(jì)算總體分為三層,即IaaS、PaaS、SaaS。
IaaS:Infrastructure-as-a-service,基礎(chǔ)設(shè)施即服務(wù),主要為用戶提供通過互聯(lián)網(wǎng)獲得完善的計(jì)算機(jī)基礎(chǔ)設(shè)施服務(wù)。
PaaS:Platform-as-a-servers,平臺(tái)即服務(wù),主要為用戶提供可以訪問的完整或部分的應(yīng)用程序開發(fā)。
SaaS:Software-as-a-service,軟件即服務(wù),主要為用戶提供完整的可直接使用的應(yīng)用程序。
Docker是一種基于lxcbased的高級(jí)容器引擎開放源碼的PaaS提供商dotCloud。源代碼托管在Github上,基于go語(yǔ)言,并遵循Apache 2.0協(xié)議開源。Docker以Linux容器(LXC)技術(shù)為基礎(chǔ),主要功能是通過實(shí)現(xiàn)對(duì)LXC的進(jìn)一步封裝,使得對(duì)容器的操作變得更加簡(jiǎn)便,并且讓用戶不再需要關(guān)心容器的管理[11-13]。
與基于Xen、KVM虛擬機(jī)相比,其優(yōu)勢(shì)在于以下兩點(diǎn):
(1)啟動(dòng)速度快。虛擬機(jī)無法做到秒級(jí)啟動(dòng)是因?yàn)槭芟抻诓僮飨到y(tǒng)的啟動(dòng)時(shí)間。但Docker完美地避開了這一問題。Docker通過利用宿主機(jī)的系統(tǒng)內(nèi)核,在幾秒鐘內(nèi)創(chuàng)建大量容器,實(shí)現(xiàn)了秒級(jí)啟動(dòng)。由于虛擬機(jī)與Docker的啟動(dòng)速度是在數(shù)量級(jí)上的差距,實(shí)現(xiàn)更輕量級(jí)的虛擬化,方便快速部署。
(2)資源利用率高,性能開銷小。虛擬化會(huì)比容器消耗更多的資源,Docker除去占用的系統(tǒng)資源,剩余資源的99%都將提供給用戶使用,極大地提高了資源利用率。
最小的云存儲(chǔ)系統(tǒng)架構(gòu)由兩個(gè)標(biāo)準(zhǔn)的x86服務(wù)器和一個(gè)千兆交換機(jī)組成。市場(chǎng)標(biāo)準(zhǔn)的x86服務(wù)器不僅滿足了云存儲(chǔ)磁盤的需要,而且還作為一個(gè)運(yùn)行主機(jī)的Docker服務(wù)運(yùn)行主機(jī),以下簡(jiǎn)稱為市場(chǎng)位x86服務(wù)器。系統(tǒng)架構(gòu)如圖1所示。
圖1 最小的云存儲(chǔ)系統(tǒng)宏觀架構(gòu)
為了在發(fā)生單點(diǎn)故障后,系統(tǒng)仍能繼續(xù)提供服務(wù),該系統(tǒng)采用2臺(tái)宿主機(jī)。當(dāng)系統(tǒng)出現(xiàn)單點(diǎn)故障時(shí),一定會(huì)出現(xiàn)數(shù)據(jù)丟失的情況,所以還需要對(duì)雙宿主機(jī)最小系統(tǒng)的數(shù)據(jù)節(jié)點(diǎn)查找方式進(jìn)行改進(jìn)。單點(diǎn)故障發(fā)生時(shí)數(shù)據(jù)有冗余,系統(tǒng)保證另一臺(tái)宿主機(jī)中數(shù)據(jù)的完整性,也同時(shí)為該節(jié)點(diǎn)繼續(xù)提供完整的存儲(chǔ)服務(wù)。
每臺(tái)宿主機(jī)上,分別啟動(dòng)一個(gè)元數(shù)據(jù)服務(wù)器容器(meta data server,MDS)和一個(gè)數(shù)據(jù)節(jié)點(diǎn)(data node,DN)容器,形成由2個(gè)MDS容器和2個(gè)DN容器組成的云存儲(chǔ)系統(tǒng),2臺(tái)MDS之間的心跳通過交換機(jī)完成,簡(jiǎn)化了安裝部署。
容器部署采用橋接的網(wǎng)絡(luò)模式(所謂橋接模式,即宿主機(jī)內(nèi)部存在一個(gè)虛擬二層交換機(jī),能夠?qū)⑷萜髦械奶摂M網(wǎng)口和宿主機(jī)的網(wǎng)口在局域網(wǎng)中被平等地對(duì)待),使容器中的虛擬網(wǎng)口擁有了獨(dú)立的IP地址,在網(wǎng)絡(luò)中的行為等同于一臺(tái)虛擬服務(wù)器[14]。橋接網(wǎng)絡(luò)模式拓?fù)淙鐖D2所示。
圖2 單節(jié)點(diǎn)結(jié)構(gòu)與網(wǎng)絡(luò)橋接方案
在宿主機(jī)系統(tǒng)啟動(dòng)時(shí),其默認(rèn)帶有的8個(gè)千兆網(wǎng)口,會(huì)按照策略進(jìn)行綁定的動(dòng)作,可按照2,2,4的方式綁定成3個(gè)bonding口。這3個(gè)bonding口會(huì)分別掛在3個(gè)虛擬的橋接口下面,作為虛擬網(wǎng)橋的對(duì)外出口。
在主機(jī)中,MDS和DN被部署在一個(gè)Docker鏡像模式的容器中。當(dāng)系統(tǒng)第一次啟動(dòng)時(shí),MDS和DN容器會(huì)自動(dòng)開始等待用戶配置初始化參數(shù)(如IP地址)。未配置的MDS通常有一個(gè)默認(rèn)的出廠IP。
MDS容器在啟動(dòng)時(shí),會(huì)創(chuàng)建2個(gè)虛擬口,這2個(gè)虛擬口都掛在宿主機(jī)第1個(gè)bonding口bond0下面,即MDS將bond0作為對(duì)外出口。MDS容器中,MDS可使用bonding口作為其心跳和業(yè)務(wù)網(wǎng)口,故將其虛擬的eth0和eth1兩個(gè)網(wǎng)口分別綁定為bond0和bond1口,作為其心跳口和業(yè)務(wù)口。當(dāng)然亦可直接指定eth0和eth1。
宿主機(jī)中的DN容器在啟動(dòng)時(shí),會(huì)創(chuàng)建2個(gè)虛擬口,這2個(gè)口分別掛在宿主機(jī)的第2個(gè)bonding口bond1和第3個(gè)bonding口bond2下面,即DN容器會(huì)用到6個(gè)物理口做成的2個(gè)bonding口作為對(duì)外通訊的接口。
DN容器存在2個(gè)虛擬網(wǎng)口,分別是在外部綁定了2個(gè)網(wǎng)口的eth0和4個(gè)網(wǎng)口的eth1,其中eth1給DN進(jìn)程使用,用于DN的主要業(yè)務(wù),即云存儲(chǔ)的數(shù)據(jù)節(jié)點(diǎn)業(yè)務(wù);eth0可供其他服務(wù)使用,如監(jiān)控中的數(shù)據(jù)流與指令流的傳輸?shù)?,用于提供云存?chǔ)的直存服務(wù)(CDS)。
3.3.1 測(cè)試環(huán)境
·2臺(tái)宿主機(jī)分別提供1個(gè)MDS容器。2個(gè)MDS容器分為主備,并且同時(shí)處于工作狀態(tài)。
·系統(tǒng)的元數(shù)據(jù)信息保存于宿主機(jī)內(nèi)部的Intel128G SSD中。
·SSD掛載方式:開啟“nobarrier”標(biāo)識(shí)。
·每臺(tái)宿主機(jī)配備24塊機(jī)械硬盤,配備千兆存儲(chǔ)網(wǎng)口,通過視頻模擬器同時(shí)輸入400路2 Mbps視頻,每個(gè)視頻按512 MB文件寫入。
存儲(chǔ)節(jié)點(diǎn)采用Erasure code冗余備份機(jī)制,采用1+1,4+1,8+2節(jié)點(diǎn)間冗余容錯(cuò)策略,也就是說損失任意1或2個(gè)節(jié)點(diǎn),客戶端不會(huì)有感知,服務(wù)不會(huì)停止,數(shù)據(jù)不會(huì)丟失。按照1+1,4+1,8+2寫入情況下主備宿主CPU,磁盤利用率,寫入帶寬。
3.3.2 測(cè)試結(jié)果
三種機(jī)制磁盤性能比較如表1所示。
表1 三種機(jī)制磁盤性能比較
在1+1機(jī)制下寫入帶寬和磁盤利用率均最高,基本滿足了用戶對(duì)磁盤寫入的需求。磁盤讀取速度通常高于寫入速度,文中不再贅述。
1+1、4+1、8+2三種機(jī)制寫入情況下MDS中mysqld服務(wù)占用CPU百分比如圖3所示。
圖3 mysqld占用CPU百分比
1+1、4+1、8+2三種機(jī)制寫入情況下DN占用CPU百分比如圖4所示。
文中介紹了一種基于Docker容器技術(shù)的輕量級(jí)云存儲(chǔ)系統(tǒng)架構(gòu),提出在系統(tǒng)中出現(xiàn)虛擬化環(huán)境下的網(wǎng)絡(luò)通信改進(jìn)策略。系統(tǒng)性能測(cè)試結(jié)果表明,該系統(tǒng)
可以很好地滿足一般用戶對(duì)低成本、高效、數(shù)據(jù)可靠的云環(huán)境需求。
圖4 DN占用CPU百分比