IaaS開源云平臺的分析與比較
作為云計算的一種重要形式,IaaS服務有各種開源和商業(yè)云平臺方案。本文立足于使用開源IaaS云平臺來開發(fā)公有云和私有云管理平臺的角度,介紹和比較了Eucalyptus、OpenNebula、CloudStack和OpenStack等開源IaaS云平臺。
從AWS看成功云平臺的特點
AWS是當前最成功的云計算平臺,其系統(tǒng)架構***的特點就是通過Web Service接口開放數(shù)據(jù)和功能,一切以服務為***位;并通過SOA的架構使系統(tǒng)達到松耦合。
AWS 提供的Web Service棧,由訪問層(API、管理控制臺和各種命令行等),通用服務層(身份認證、監(jiān)控、部署和自動化等),PaaS層服務(并行處理、內(nèi)容傳輸 和消息服務等),IaaS層服務(計算EC2、存儲S3/EBS、網(wǎng)絡服務VPC/ELB等以及數(shù)據(jù)庫服務)幾部分組成。用戶應用使用IaaS基礎IT資 源,將PaaS和通用服務作為應用架構中的組件來構建自己的服務。綜合來看,AWS生態(tài)環(huán)境中系統(tǒng)架構的核心思想為SOA、分層和服務組合。
私有云的需求
除了AWS這類公有云平臺,私有云和混合云也是IaaS的重要形式。企業(yè)對于私有云平臺通常會有以下幾個需求。
- 計算虛擬技術的多樣選擇(KVM、XEN、ESX、ESXi、Hyper-V和XenServer等)。
- 存儲技術/設備的多樣支持(NAS、IP-SAN和FC-SAN等)。
- 網(wǎng)絡技術/設備的多種支持(交換機、路由器和防火墻等)。
- 多種API的支持。
前三個需求要求IaaS平臺能屏蔽底層的具體技術/設備的差別對外呈現(xiàn)基本一致的能力與接口。這一般要采用抽象框架加插件的設計來實現(xiàn)。另外,基于計算虛擬化、網(wǎng)絡和存儲等技術自成體系的原因,整個架構設計中須考慮將計算虛擬化、網(wǎng)絡和存儲獨立成三個子系統(tǒng)或服務。
因此,云平臺至少應包含三層:API或接入層提供各種不同API或訪問方式,核心虛擬化管理層整合底層服務來對外提供IaaS服務,計算/存儲/網(wǎng)絡服務層屏蔽技術差異。
技術團隊開發(fā)需求
小型技術團隊精英化,每個人都能夠參與整體設計。大型團隊則為金字塔結構,只有少數(shù)人能夠參與整體設計,多數(shù)人員因能力和職責的原因只能接觸到單個功能或模塊。
為滿足這兩種團隊的要求,云平臺的整體軟件架構必須做到松耦合,通過組合組件、模塊和服務來構成整個系統(tǒng);同時需要組件、模塊和服務功能內(nèi)聚以便于小團隊獨立維護,方便獨立的設計、開發(fā)和演進。
另外,云平臺需要考慮提供基礎共享組件在各個服務中重用。典型的可重用組件為數(shù)據(jù)庫ORM、消息通信、服務端基礎框架、配置管理系統(tǒng)、日志系統(tǒng)和錯誤定位系 統(tǒng)等。很多大型團隊會整合這些基礎共享服務,通過領域描述語言自動化生成基礎框架代碼,使開發(fā)人員可以專注于具體的服務實現(xiàn)和關鍵技術研究。
云平臺的介紹和比較
下面從系統(tǒng)架構要分層、組件化,采用SOA以達到系統(tǒng)松耦合;組件服務使用框架插件化設計;開發(fā)平臺化等方面來比較4個開源IaaS云平臺。
Eucalyptus
Eucalyptus 是最早試圖克隆AWS的開源IaaS云平臺,整體架構如圖1的左半部分所示。Eucalyptus由云控制器(CLC)、Walrus、集群控制器 (CC)、存儲控制器(SC)和節(jié)點控制器(NC)組成,它們相互協(xié)作共同提供所需的云服務。組件間使用支持WS-Security的SOAP消息實現(xiàn)安 全的通信。Eucalyptus對外提供兼容AWS的SOAP和Query接口,不提供其他API.
圖1 Eucalyptus系統(tǒng)架構和CLC邏輯架構
從分層的角度來看,Eucalyptus缺乏API層設計, CLC是全局資源管理層,集群服務(CC和SC)為底層資源管理層。CLC、CC和NC三層結構不是軟件架構層面的分層,只能看作一種為了管理較大規(guī)模集群的工程化方法。
從組件服務角度看,每個集群中將計算和存儲服務設計為獨立服務,網(wǎng)絡仍為與計算服務的一部分。盡管Eucalyptus在代碼實現(xiàn)上是將網(wǎng)絡部分獨立出來的,但整體上并未按照獨立的服務來設計,整體設計解耦不夠。
CLC 是Eucalyptus的核心,包括虛擬機控制、存儲卷管理、網(wǎng)絡資源(Address)管理、鏡像管理、快照管理、Keypair管理和元數(shù)據(jù)管理等服 務模塊。開源ESB Mule將所有的服務編排起來,通過Eucalyptus服務對外統(tǒng)一提供EC2和EBS服務,如圖1的右半部分所示。由此可以看 到,Eucalyptus在SOA層面上做得較好。但ESB技術門檻高,對設計開發(fā)人員要求較高。同時因為Eucalyptus只在很少的地方支持插件 (如多Hypervisor支持的插件),所以整體上對抽象框架和插件的設計做得不多。
從開發(fā)平臺的角度來看,Eucalyptus的主要 開發(fā)語言為Java和C;CLC采用開源ESB Mule為核心編排服務,架構較新穎;但CC和NC采用Apache +CGI的軟件架構,基于Axis/C來實現(xiàn)Web Service.整體來看,Eucalyptus還沒有開發(fā)平臺化的趨勢。
OpenNebula
OpenNebula是Reservoir項目的一部分,是2005年歐洲研究學會發(fā)起的虛擬基礎設備和云端運算計劃的虛擬化管理層的開源實現(xiàn)。OpenNebula的核心部分是Front End,即ONE.其架構如圖2所示。
OpenNebula明顯分為三層,即接口層、核心層和驅(qū)動層。接口層提供了原生的XML-RPC接口,同時實現(xiàn)了EC2、OCCI和OpenNebula Cloud API(OCA)等多種API,為用戶提供了多種選擇。
核心層的OpenNebula core提供統(tǒng)一的Hook插件管理、Request請求管理、VM生命周期管理、Hypervisor管理、網(wǎng)絡資源管理和存儲資源管理等核心功能。core配合Scheduler對外提供計算和存儲網(wǎng)絡資源管理服務。
***層是由各種Driver構成的驅(qū)動層與虛擬化軟件(KVM、XEN)和物理基礎設施交互。需要說明的是,圖2中的驅(qū)動層沒有畫出DataStore、 NetworkManager等多個驅(qū)動。一些前端模塊如監(jiān)控、用戶界面(Sunstone Portal和Self Service Portal)也未在圖2中畫出。很明顯,OpenNebula在分層和框架加插件設計這兩點做得很好。
圖2 OpenNebula系統(tǒng)架構
在OpenNebula中,計算、存儲和網(wǎng)絡部分是ONE中獨立的模塊,資源調(diào)度也被分離出來通過requirement和matcher支持多種可選的策略和資源額度管理,也支持調(diào)度引擎Haizer來提供lease(租約)的高級資源調(diào)度能力。
顯然,OpenNebula沒有采用SOA的設計,沒有將計算、存儲和網(wǎng)絡設計為獨立組件,解耦做得還不夠。值得注意的是,OpenNebula用 Libvirt所提供的接口遠程調(diào)用計算節(jié)點上的虛擬化控制命令。這種Agentless的設計在系統(tǒng)安裝部署階段會減少很多軟件安裝配置工作,是一個設 計亮點。
從開發(fā)平臺的角度來看,OpenNebula采用C++實現(xiàn)核心ONE,使用Ruby開發(fā)的各種Driver來實現(xiàn)具體的功能。整體系統(tǒng)只有一個核心部件,故在開發(fā)平臺上做得很少。
CloudStack
CloudStack是Cloud.com開發(fā)的開源IaaS軟件,被Citrix收購后貢獻給Apache基金會。它已為全球多個公有云提供IaaS平臺技術,如英國電信(BT)、日本電報電話公司(NTT)和韓國電信(KT)等。
圖 3中的左半部分為CloudStack的總體架構,可以看到其包括Dashboard/CLI層、CLoudStack API、核心引擎層和計算/網(wǎng)絡/存儲控制器層,是典型的分層架構。具體來看,CloudStack提供原生自定義API, 也通過cloud bridge支持AWS兼容API.
圖3 CloudStack系統(tǒng)架構和Management Server架構
與OpenNebula類似,CloudStack本身也未采用SOA的設計,同樣沒有將計算/存儲/網(wǎng)絡部分從核心引擎中分離出來,因此在松耦合和組件設計上需要進一步加強。
從開發(fā)平臺來看,ClousStack使用Java開發(fā)API、Management Server和Agent等部分,運行時部署為Tomcat的Serverlet.另外,還大量使用Python開發(fā)與網(wǎng)絡和系統(tǒng)管理相關的部分。值得注 意的是,CloudStack代碼中包括一套獨立的Java代碼庫,涵蓋通信、數(shù)據(jù)管理、 事件管理、任務管理和插件管理等部分,基本形成了開發(fā)平臺。
OpenStack
OpenStack是開源IaaS云平臺的新兵,只有2年時間,卻擁有***的社區(qū)和生態(tài)環(huán)境,吸引了大量的公司和開發(fā)者圍繞其進行云計算開發(fā)。圖4為***發(fā)布的Essex的邏輯架構圖。
圖4 OpenStack Essex邏輯架構
OpenStack 整體架構分3層,最上層為應用程序和管理Portal(Horizon)、 API等接入層;核心層包括計算服務(Nova)、存儲服務(包括對象存儲服務Swift和塊存儲服務cinder)和網(wǎng)絡服務(Quantum);第3 層為共享服務,現(xiàn)在為賬戶權限管理服務(keystone)和鏡像服務(Glance)。其中Quantum和cinder是***加入核心服務中的 OpenStack孵化項目。
在Essex及以前版本,存儲EBS(Elastic Block Service,彈性塊存儲服務)和Nova-Volume耦合在一起,網(wǎng)絡服務也與Nova-Network綁定。在正在開發(fā)的Folsom版本 中,EBS和Network從Nova中獨立為新的服務(cinder和Quantum)。Nova通過API來調(diào)用新的cinder和Quantum服 務。我們可以看到,OpenStack在SOA和服務化組件解耦上是做得***的。
Nova包含API Server(含CloudController)、Nova-Scheduler、Nova-Compute、Nova-Volume和Nova- Network等幾部分,所有組件通過RabbitMQ來通信,使用數(shù)據(jù)庫來保存數(shù)據(jù)。同時Nova中大量采用了框架與插件的設計,如Scheduler 支持插件開發(fā)新的調(diào)度算法,Compute部分支持通過插件使用不同的Hypervisor,Network和Volume部分也通過插件支持不同廠商的 技術和設備。cinder和Quantum等服務也采取了與Nova類似的整體架構和插件設計。
從開發(fā)平臺的角度來看,OpenStack 做得也很好。首先,OpenStack所有服務均采用Python開發(fā);其次,所有服務采用類似的軟件架構和內(nèi)部實行技術,如服務端程序使用WSGI,數(shù) 據(jù)庫ORM使用SQLAlchemy,配置文件解析和日志等也采用相同的組件?;贠penStack有很好的開發(fā)平臺,我們看到開發(fā)人員可以很容易參與 多個組件的開發(fā)。
綜合比較
前面分別介紹了各IaaS開源云平臺在分層、SOA、組件化、解耦及開發(fā)平臺等方面的情況。
從表1的對比中可以看出,所有的開源IaaS云平臺在分層上做得都比較好;在SOA/組件化/解耦這點上來看,OpenStack和Eucalyptus有 優(yōu)勢;在框架和插件設計上,除Eucalyptus較差外,其他平臺均有很好的設計--OpenStack的開發(fā)平臺做得***,CloudStack次 之。綜合來看,目前OpenStack的設計是***的,Eucalyptus和CloudStack次之。
表1 IaaS開源云平臺比較
實際需求設計比較
讓我們用一個真實需求來看4個開源IaaS平臺在開發(fā)支持上的表現(xiàn)。此需求來自私有云場景,云平臺需要對不同用戶的資源請求(如VM和公網(wǎng)IP等)按優(yōu)先級排序后進行處理,并提供任務的管理功能,如統(tǒng)計各狀態(tài)的任務數(shù)量等。
需求的設計有兩個關鍵點:一為如何對任務進行統(tǒng)一調(diào)度管理,二為任務狀態(tài)轉(zhuǎn)變信息的收集。
任務的統(tǒng)一調(diào)度管理方案分別為:OpenNebula和OpenStack都提供獨立的Scheduler組件并支持擴展Scheduler的插件機 制;CloudStack有Job Manager但不提供擴展,需修改Job Manager核心代碼;Eucalyptus內(nèi)部流程主要由Mule總線來驅(qū)動,需修改核心流程代碼增加新的模塊。比較來看,OpenStack和 OpenNebula的實現(xiàn)方式對現(xiàn)有系統(tǒng)影響最小。
對于任務狀態(tài)轉(zhuǎn)變信息,由于信息遍布在系統(tǒng)多個地方,***的設計是通過消息發(fā)送狀態(tài)變 化給負責任務管理/統(tǒng)計的模塊統(tǒng)一處理。在這一點上采用Message Bus的OpenStack和采用Mule的Eucalyptus有明顯優(yōu)勢。綜合來看,OpenStack為二次開發(fā)提供了很好的支持。
技術之外
上述比較主要是在設計方面,OpenStack優(yōu)勢顯著。但從其他方面來看:
Eucalyptus由于出現(xiàn)最早,同時與AWS簽訂相關API兼容協(xié)議,在面向AWS生態(tài)環(huán)境的私有云市場處于領先地位;
CloudStack在經(jīng)過大量商業(yè)客戶公有云的部署后,其功能已趨于穩(wěn)定成熟,成為Apache開源項目后,其松耦合設計也已排上日程,設計上大有迎頭趕上的趨勢;
OpenStack現(xiàn)狀是功能不夠完整且商業(yè)支持不夠,另其轉(zhuǎn)為基金會運作后能否保持現(xiàn)在的發(fā)展趨勢也是大家非常關注的。在實際的云平臺選擇過程中,大家要從自身的角度出發(fā)綜合考慮功能和系統(tǒng)的架構與設計、未來發(fā)展等。