OpenStack最新版本Folsom架構解析
兩年前OpenStack基于NASA的Nova項目和Rackspace的Swift項目合并得以建立,而今OpenStack已經成為云計算領域的一顆新星,繼2012年四月發布Essex版本之后,在今年九月底OpenStack第6版Folsom正式發布,本文簡要分析了OpenStack Folsom的架構。
OpenStack***的組件
OpenStack目前有7個核心組件:Compute(計算), Object Storage(對象存儲), Identity(身份認證), Dashboard(儀表盤), Block Storage(塊存儲), Network(網絡) and Image Service(鏡像服務) 。下面將依次進行解釋:
Object Storage(代號為“Swift”) 允許進行存儲或者檢索文件。目前已經有幾好家公司開始提供基于Swift商業存儲服務,這些公司包括KT,Rackspace公司(Swift項目的發源地)和Internap,而且很多大公司內部也使用Swift來存儲數據。
Image Service(代號為“Glance”) 是一個虛擬機鏡像的存儲、查詢和檢索系統,它提供了一個虛擬磁盤映像的目錄和存儲庫,這些磁盤映像常常廣泛應用于OpenStack Compute之中,而且這種服務在技術上是屬于可選的,任何規模的云都適用于它。
Compute(代號為“Nova”) 根據需求提供虛擬服務。Rackspace公司和HP提供商業計算服務正是建立在Nova之上,Mercado Libre和NASA(Nova項目的起源地)內部也是使用的Nova。
Dashboard(代號為“Horizon”) 為所有OpenStack的服務提供了一個模塊化的web-based用戶界面。使用這個Web GUI,可以在云上完成大多數的操作,如啟動實例,分配IP地址,設置訪問控制等。
Identity(代號為“Keystone”) 為所有的OpenStack服務提供身份驗證和授權。它還提供了一個在特定OpenStack云服務上的服務目錄。
Network(代號為“Quantum”) 在接口設備之間提供“網絡連接作為一種服務”,而這些接口設備主要靠其他的OpenStack服務進行管理(最有可能是Nova)。該服務允許用戶創建自己的網絡,然后連接接口。Quantum提供一個可插拔的體系架構,它能支持很多流行的網絡供應商和技術,Quantum是Folsom版本中的新項目。
Block Storage(代號為“Cinder”) 提供穩定的數據塊存儲服務。這個項目的很多代碼最初是來自于Nova之中(就是the nova-volume service)。但是請注意,這是塊存儲(或者volumes),而不是類似于NFS或者CIFS文件系統,Cinder在Folsom中也是一個全新的項目。除了這些核心項目之外,也有一些“孵化”項目,未來可能會考慮列入到OpenStack的核心項目之中。#p#
對比AWS的服務
雖然所有的OpenStack服務都具有自己的特色,但是很多人還是希望能看到它與AWS相似的部分,而且Amazon一直也是OpenStack的重要對手。
Nova在概念上類似于AWS中的EC2服務,不過事實上,它擁有很多種方法可以實現對EC2 API的兼容性。
Swift在概念上類似于S3服務,不過swift具有很強的擴展性、冗余和持久性。
Glance提供了很多與Amazon AMI catalog相似的功能。
Cinder提供類似于EBS塊存儲服務。
概念架構
OpenStack項目成立的目的是“提供一個大規模的可擴展的云操作系統”。要做到這一點,每一個組成服務的設計都要精心考慮,這樣才能打造一個完整的IaaS平臺。從概念上,我們可以描繪出各種服務之間的關系:

Dashboard("Horizon") 提供了一個Web前端到OpenStack其他的服務的界面
Compute("Nova") 存儲和檢索虛擬磁盤(images)和Image上相關的元數據(Glance)
Network("Quantum") 提供虛擬網絡
Block Storage("Cinder") 提供存儲。
Image("Glance") 在對象存儲(Swift)上能夠完成虛擬磁盤文件的存儲
所有的服務進行身份驗證(Keystone)
這是一個程式化的簡化版的體系結構視圖,而且假定構建者使用所有的OpenStack服務進行最常見的配置操作,不過它也僅僅是顯示“操作員”看到的云——并沒有顯示出云用戶具體的使用過程,比如說用戶如何進行直接的對象存儲。#p#
邏輯架構
正如你能想象到的那樣,邏輯結構要比概念架構復雜得多的多(如圖所示)。正如任何面向服務的架構圖一樣,如果想說明所有可能的服務通信組合,圖就會迅速“亂成一團”。下面的圖,僅僅顯示了一個最常見的基于OpenStack的云架構。當然,隨著OpenStack支持技術種類的多樣化,它并不能代表唯一的架構圖。

該圖與上述的概念架構圖是一致的:
最終用戶可以通過一個公共的Web界面(Horizon)進行交互或者通過其API直接訪問每一項服務
所有的服務進行身份驗證都是通過一個共同的來源(通過Keystone)
個人服務通過他們公共的API進行交互(除了那些擁有特別權限的地方才需要管理員的命令)
下面的章節中,將會深入到每個服務的架構之中進行說明。
Dashboard
Horizon是一個模塊化的Django Web應用程序,它為終端用戶和系統管理員提供界面來管理OpenStack服務。

和大多數Web應用程序一樣,該體系架構是也是非常簡單:
Horizon通常使用Apache上的mod_wsgi進行部署。代碼本身被分離成可復用的python模塊,通過邏輯(使用不同的OpenStack API進行交互)和presentation(對不同的站點很容易實現定制)實現。
一個數據庫,不過因為它主要依賴于其他的數據服務,所以本身存儲的數據非常少。
從網絡架構的角度來看,這項服務需要客戶的訪問而且要能夠跟每項服務公共的API進行交互。如果您希望使用的管理員功能(即其他的服務),也需要連接到他們的Admin API端點(這不是客戶能隨意訪問的)。
Compute
Nova是OpenStack中最復雜的分布式組件,它通過大量的進程合作,將最終用戶的API請求發送到正在運行的虛擬機之上。以下是這些進程的列表及其功能的描述:
nova-api:接受和響應最終用戶Compute API的請求。它支持OpenStack Compute API,Amazon EC2 API和一個特殊的Admin API。它還引發多數業務流程的活動(如運行一個實例),并實施一些政策(主要是配額檢查)。
nova-compute:主要是一個人工守護進程,它可以通過虛擬機管理程序的API(XenAPI for XenServer/XCP, libvirt for KVM or QEMU, VMwareAPI for VMware等)來創建和終止虛擬機實例。雖然通過該進程做的事情是相當的復雜,但是它的基礎原理卻是非常的簡單:接收隊列中的動作,然后執行一系列的系統命令(如啟動KVM實例),同時更新數據庫中的狀態。
nova-volume:給虛擬機分配額外持久化的存儲,管理持久卷到計算實例的創建,連接和分離。一個新的OpenStack項目,Cinder,將最終替代nova-volume功能。在發布的Folsom版本中,nova-volume和Block Storage service(塊存儲服務)有類似的功能。
nova-network:該人工守護進程與nova-compute和nova-volume非常相似。它接受隊列中的網絡任務,然后執行任務操縱網絡(如設立橋接接口或更改iptables規則)。不過該項功能被移植到Quantum之中,已經成為一個獨立的OpenStack服務。
nova-schedule:從概念上說是OpenStack Nova中最簡單的一段代碼:從隊列上得到一個虛擬機實例請求并且決定它應該在哪里運行(特別是它應該運行在哪臺計算服務器主機之上)
queue:提供了一個守護進程之間傳遞消息的中央樞紐。當前由RabbitMQ實現,理論上可以是Python的ampqlib支持的任何AMPQ消息隊列。新的Folsom版本支持Zero MQ。
SQL database:存儲云基礎設施的編譯時和運行時的狀態。這包括可用的實例類型,在使用中的實例,可用的網絡和項目。從理論上講,OpenStack Nova可以支持任何SQL-Alchemy支持的數據庫,但是目前被廣泛使用的數據庫僅僅有sqlite3(只適用于測試和開發工作),MySQL和PostgreSQL。
Nova還提供控制臺的服務,讓最終用戶通過代理服務器訪問他們的虛擬實例的控制臺。這涉及到多個守護進程(nova-console,nova-vncproxy和nova-consoleauth)。