劉毅文,黃顯寧,文坤輝,米春橋
(懷化學院 計算機科學與工程學院,湖南 懷化 418000)
隨著計算機硬件的不斷升級和云計算技術的飛速發展,云存儲從云計算延伸出來,迅速發展為一種新型的網絡存儲技術。當云計算和處理的核心是存儲和管理大量數據時,需要在云計算系統中配置大量的存儲設備,然后將云計算系統轉換為云存儲系統。因此,云存儲是一個數據存儲和管理為核心的云計算系統,通過集群應用程序中網絡技術或分布式文件系統等功能,使得網絡中許多不同類型的存儲設備通過應用軟件一起工作[1],系統統一向外提供數據存儲和業務訪問功能。簡而言之,云存儲是一種新興的解決方案,可以將存儲資源放到云中供人們訪問。用戶可以隨時隨地連接到云,通過任何網絡設備訪問數據[2]。
隨著云存儲的應用越來越多,云存儲產品和服務在市場上不斷成熟,以滿足新的數據存儲需求。與此同時,云存儲系統是視頻云的基礎,也是大數據解決方案的第一步。在將存儲從硬件轉換為服務后,云計算還提供了復雜的管理和調度功能[3],使云存儲服務智能化,并將包含大數據分析的數據生態整合在一起,以更緊密地響應用戶的各種需求。對于企業來說,要擴大云存儲的市場份額,企業的快速發展可以提供機會。
文中重點討論輕量級云存儲環境部署場景,將當前標準云存儲系統的最小規模(通常需要2個元數據服務器和6個數據節點)縮減到2個標準服務器。使用虛擬容器技術Docker、云存儲元數據節點服務器(MDS)、數據節點(DN)做Docker映像,部署在標準服務器上。當用戶使用它時,MDS和DN鏡像容器直接從標準映像啟動,以提供云存儲服務。
目前,不同用戶對云計算有不同的定義,即網格計算、并行計算、網絡磁盤、超級服務器或像AlphaGo這樣的高科技。然而,從學術研究人員的角度來看,云計算是一種新的商業模式,它將IT基礎設施利用率轉化為銷售和服務。
云計算在不同的歷史時期扮演著不同的角色。在20世紀末,云計算成為一種新的概念和新技術。當時,“云計算”一詞并不存在于計算機領域,然而,學者們一直在研究的網格計算[4]和并行計算實際上是云計算的早期原型。在21世紀初,云計算更具有代表性,但只有大型IT基礎設施的大公司(谷歌、IBM)才能擁有。2006年,亞馬遜第一次以服務的方式出售對象存儲服務,云計算從少數公司的能力發展為大眾服務[5]。
云計算的主要目標是應用云端的計算、存儲等資源優勢,突破終端的資源限制,為用戶提供更加豐富的應用以及更好的用戶體驗。其定義一般可以概括為終端通過無線網絡,以按需、易擴展的方式從云端獲得所需的基礎設施、平臺、軟件等資源或信息服務的使用與交付模式[6]。云計算技術的發展實質上是組件間的耦合越來越小,越來越孤立,資源的粒度越來越小,從專有到普通的過程。
(1)物理機時代的隔離方式—機架。
當用戶需要服務時,購買物理機器。當需要更多的服務時,一個機架需要裝載更多的物理機器。因此,在物理機器時代的隔離是機器級的隔離[7]。這種方式會凸現兩個問題:資源粒度過粗,設備利用率不高;無法便捷地利用軟件統一控制協調。
(2)操作系統的隔離方式—虛擬機。
隨著虛擬化的發展,操作系統級的隔離隨之出現,這通常被稱為虛擬機(VM)。每一個操作系統都由許多個虛擬操作系統組成,每個操作系統都是虛擬服務器[8],同時共享硬件資源。由于單個物理機器可以創建許多虛擬機,因此資源粒度越小,利用率越高。與此同時,它帶來了一個非常明顯的優勢,可以很容易地由軟件創建、重新啟動、摧毀虛擬機。當在數據中心生成大量的虛擬機,并將生成的虛擬機放在特定的管理、監視、安全和網絡設施中進行輔助時,它就變成了云,即所說的IaaS[9]。
(3)應用層面的隔離方式—PaaS。
Docker的出現為PaaS平臺的實現提供了一條全新的途徑,也使為開發者提供更簡潔的服務成為了可能。基于Docker容器,開發人員不再需要花費大量精力來處理各種開發、測試和生產環境之間的差異,而直接將應用環境遷移到PaaS平臺的運行環境,不必擔心各種依賴和配置問題。傳統的PaaS是一個應用程序級別的隔離,在應用程序和應用程序之前是獨立的,共享相同的運行時環境。與此同時,由于更加細化的資源粒度,使得同樣的PaaS平臺可以同時運行更多的應用程序。但PaaS平臺也存在問題,由于平臺與其運行環境息息相關,因此必須為每個平臺定制代碼,這對它的通用而言是一個極大的阻礙[10]。
(4)進程層面的隔離方式—容器。
因為應用程序和執行環境是相關的,所以應用程序和執行環境可以打包在一起,因此應用容器技術解決PaaS平臺的應用程序必須依賴于其執行環境的問題。容器是一個應用程序,它的一系列操作環境依賴于封裝在盒子里的一個“盒子”里,以共享相同的操作系統內核,使用操作系統內核的一些特性來實現資源隔離,容器技術是一個過程級隔離。容器技術不僅解決了環境依賴的問題,而且使隔離的粒度進一步細化、容器生成和銷毀更快(第二級)。Docker作為輕量級虛擬化技術的代表,是LXC技術的擴展,被認為是虛擬化領域的一次革新。
因此,縱觀整個云計算技術開發過程,最重要的主線之一是越來越深入、更細致的資源粒度,管理越來越方便。如果云計算的未來是一種公共資源,那么它所驅動的業務無疑具有一個更細粒度和更可度量的計算單元特性的通用執行環境。
云計算總體分為三層,即IaaS、PaaS、SaaS。
IaaS:Infrastructure-as-a-service,基礎設施即服務,主要為用戶提供通過互聯網獲得完善的計算機基礎設施服務。
PaaS:Platform-as-a-servers,平臺即服務,主要為用戶提供可以訪問的完整或部分的應用程序開發。
SaaS:Software-as-a-service,軟件即服務,主要為用戶提供完整的可直接使用的應用程序。
Docker是一種基于lxcbased的高級容器引擎開放源碼的PaaS提供商dotCloud。源代碼托管在Github上,基于go語言,并遵循Apache 2.0協議開源。Docker以Linux容器(LXC)技術為基礎,主要功能是通過實現對LXC的進一步封裝,使得對容器的操作變得更加簡便,并且讓用戶不再需要關心容器的管理[11-13]。
與基于Xen、KVM虛擬機相比,其優勢在于以下兩點:
(1)啟動速度快。虛擬機無法做到秒級啟動是因為受限于操作系統的啟動時間。但Docker完美地避開了這一問題。Docker通過利用宿主機的系統內核,在幾秒鐘內創建大量容器,實現了秒級啟動。由于虛擬機與Docker的啟動速度是在數量級上的差距,實現更輕量級的虛擬化,方便快速部署。
(2)資源利用率高,性能開銷小。虛擬化會比容器消耗更多的資源,Docker除去占用的系統資源,剩余資源的99%都將提供給用戶使用,極大地提高了資源利用率。
最小的云存儲系統架構由兩個標準的x86服務器和一個千兆交換機組成。市場標準的x86服務器不僅滿足了云存儲磁盤的需要,而且還作為一個運行主機的Docker服務運行主機,以下簡稱為市場位x86服務器。系統架構如圖1所示。

圖1 最小的云存儲系統宏觀架構
為了在發生單點故障后,系統仍能繼續提供服務,該系統采用2臺宿主機。當系統出現單點故障時,一定會出現數據丟失的情況,所以還需要對雙宿主機最小系統的數據節點查找方式進行改進。單點故障發生時數據有冗余,系統保證另一臺宿主機中數據的完整性,也同時為該節點繼續提供完整的存儲服務。
每臺宿主機上,分別啟動一個元數據服務器容器(meta data server,MDS)和一個數據節點(data node,DN)容器,形成由2個MDS容器和2個DN容器組成的云存儲系統,2臺MDS之間的心跳通過交換機完成,簡化了安裝部署。
容器部署采用橋接的網絡模式(所謂橋接模式,即宿主機內部存在一個虛擬二層交換機,能夠將容器中的虛擬網口和宿主機的網口在局域網中被平等地對待),使容器中的虛擬網口擁有了獨立的IP地址,在網絡中的行為等同于一臺虛擬服務器[14]。橋接網絡模式拓撲如圖2所示。

圖2 單節點結構與網絡橋接方案
在宿主機系統啟動時,其默認帶有的8個千兆網口,會按照策略進行綁定的動作,可按照2,2,4的方式綁定成3個bonding口。這3個bonding口會分別掛在3個虛擬的橋接口下面,作為虛擬網橋的對外出口。
在主機中,MDS和DN被部署在一個Docker鏡像模式的容器中。當系統第一次啟動時,MDS和DN容器會自動開始等待用戶配置初始化參數(如IP地址)。未配置的MDS通常有一個默認的出廠IP。
MDS容器在啟動時,會創建2個虛擬口,這2個虛擬口都掛在宿主機第1個bonding口bond0下面,即MDS將bond0作為對外出口。MDS容器中,MDS可使用bonding口作為其心跳和業務網口,故將其虛擬的eth0和eth1兩個網口分別綁定為bond0和bond1口,作為其心跳口和業務口。當然亦可直接指定eth0和eth1。
宿主機中的DN容器在啟動時,會創建2個虛擬口,這2個口分別掛在宿主機的第2個bonding口bond1和第3個bonding口bond2下面,即DN容器會用到6個物理口做成的2個bonding口作為對外通訊的接口。
DN容器存在2個虛擬網口,分別是在外部綁定了2個網口的eth0和4個網口的eth1,其中eth1給DN進程使用,用于DN的主要業務,即云存儲的數據節點業務;eth0可供其他服務使用,如監控中的數據流與指令流的傳輸等,用于提供云存儲的直存服務(CDS)。
3.3.1 測試環境
·2臺宿主機分別提供1個MDS容器。2個MDS容器分為主備,并且同時處于工作狀態。
·系統的元數據信息保存于宿主機內部的Intel128G SSD中。
·SSD掛載方式:開啟“nobarrier”標識。
·每臺宿主機配備24塊機械硬盤,配備千兆存儲網口,通過視頻模擬器同時輸入400路2 Mbps視頻,每個視頻按512 MB文件寫入。
存儲節點采用Erasure code冗余備份機制,采用1+1,4+1,8+2節點間冗余容錯策略,也就是說損失任意1或2個節點,客戶端不會有感知,服務不會停止,數據不會丟失。按照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容器技術的輕量級云存儲系統架構,提出在系統中出現虛擬化環境下的網絡通信改進策略。系統性能測試結果表明,該系統
可以很好地滿足一般用戶對低成本、高效、數據可靠的云環境需求。

圖4 DN占用CPU百分比