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