讀古今文學網 > OpenStack系統架構設計實戰 > 1.2.1 OpenStack設計原理和體系結構 >

1.2.1 OpenStack設計原理和體系結構

在介紹OpenStack體系結構之前,需要先瞭解一下OpenStack的設計原則。

·可擴展性和伸縮性是設計OpenStack的主要目標。

·任何影響可擴展性和伸縮性的特性必須是可選的。

·一切應該是異步的(如果做不到異步,可參考第2條)。

·所有必需的組件必須可水平擴展。

·始終使用無共享架構或者分片架構(如果不能實現,可參考第2條)。

·一切都是分佈式的(尤其應該將業務邏輯與業務狀態放在一起)。

·接收最終一致性,並在適當條件下使用。

·測試一切(我們需要測試已經提交的代碼,如果用戶需要,我們將會幫助用戶測試)。

OpenStack是由一系列具有RESTful接口的Web服務實現的,是一系列組件服務的集合。如圖1-6所示是一個標準的OpenStack架構。這是比較典型的架構,但不代表這是OpenStack的唯一架構,我們可以選取自己需要的組件項目,來搭建適合自己的雲計算平台。

圖1-6 OpenStack架構

OpenStack項目並不是單一的服務,其含有子組件,子組件內由模塊來實現各自的功能。通過消息隊列和數據庫,各個組件可以相互調用,互相通信。這樣的消息傳遞方式解耦了組件、項目間的依賴關係,所以才能靈活地滿足用戶實際環境的需要,組合出適合用戶的架構。每個項目都有各自的特性,大而全的架構並非適合每一個用戶,如Glance在最早的A、B版本中並沒有實際出現應用,Nova可以脫離鏡像服務獨立運行。當用戶的雲計算規模大到需要管理多種鏡像時,才需要像Glance這樣的組件。OpenStack的成長是在生產環境中不斷被檢驗,然後再將需求反饋給社區,由社區來實現的一個過程。可以說,OpenStack並非脫離實際的理想化開源社區項目,而是與生產實際緊密結合的,是可以複製應用的雲計算方案。

OpenStack覆蓋了網絡、虛擬化、操作系統、服務器等各個方面。它是一個正在開發中的雲計算平台項目,根據成熟及重要程度的不同,它被分解成核心項目、孵化項目,以及支持項目和相關項目。每個項目都有自己的委員會和項目技術主管,而且每個項目都不是一成不變的,孵化項目可以根據發展的成熟度和重要性轉變為核心項目。下面列出了十幾個核心項目(即OpenStack服務)截止到K版本。

(1)計算(Compute):Nova

一套控制器,用於為單個用戶或使用群組管理虛擬機實例的整個生命週期,根據用戶需求來提供虛擬服務。負責虛擬機的創建、開機、關機、掛起、暫停、調整、遷移、重啟、銷毀等操作,配置CPU、內存等信息規格。在K版本中,Nova做了以下優化:

1)標準化了conductor、compute與scheduler的接口,為之後的接口分離做好準備,對於部分直接訪問Nova數據庫的濾波器進行了優化,不再允許直接訪問。

2)對scheduler做了一些優化,如scheduler對於每一個請求都會重新進行filter/weigher,為了優化這個問題,將filter/weighter的初始化從handler移到scheduler,這樣,每次請求的時候都可以重新使用了。

3)更好地支持NFV功能,在NUMA(Non Uniform Memory Architecture)架構下,每個處理器都會訪問「本地」的內存池,從而在CPU和存儲之間有更小的延遲和更大的帶寬。支持基於NUMA的調度的實現,可以將vCPU綁定在物理CPU上;並支持超大頁。

4)用stackforge的EC1-API轉換服務替代EC1-API的功能。

(2)對像存儲(Object Storage):Swift

一套用於在大規模可擴展系統中通過內置冗余及高容錯機制實現對像存儲的系統,允許進行存儲或者檢索文件。可為Glance提供鏡像存儲,為Cinder提供卷備份服務。糾刪碼的加入應該是K版本中Swift最大的亮點,但是糾刪碼作為beta版本發佈,並不推薦應用於生產環境。

(3)鏡像服務(Image Service):Glance

一套虛擬機鏡像查找及檢索系統,支持多種虛擬機鏡像格式(AKI、AMI、ARI、ISO、QCOW2、Raw、VDI、VHD、VMDK),有創建鏡像、上傳鏡像、刪除鏡像、編輯鏡像基本信息的功能。在K版本中,Glance開始提供自動進行鏡像格式轉化功能,例如,Ceph是使用RAW格式的,假如我們上傳的是QCOW2,創建虛擬機時,就會經歷一番上傳下載的過程,速度異常緩慢。而且RAW格式通常都是原始大小,上傳速度非常慢,完全可以通過上傳小鏡像將其自動轉換為指定格式。

(4)身份服務(Identity Service):Keystone

為OpenStack其他服務提供身份認證、服務規則和服務令牌的功能,管理命令、項目、用戶、組、角色。從J版本開始,Keystone增加了一個Keystone federation特性,有了這個特性,兩個或者更多的雲服務提供者就可以共享資源。在K版本中主要針對該功能進行了增強。

(5)網絡管理(Network):Neutron

提供雲計算的網絡虛擬化技術,為OpenStack其他服務提供網絡連接服務。為用戶提供接口,可以定義網絡、子網、路由器,配置DHCP、DNS、負載均衡、L3服務,網絡支持GRE、VLAN。插件架構支持許多主流的網絡廠家和技術,如OpenvSwitch。在K版本中,DVR支持OVS中的VLAN功能,新的V2版本的LBaas的API,同時支持一些高級服務(如L3、ML2、VPNaaS、LBaaS)的分離。

(6)塊存儲(Block Storage):Cinder

為運行實例提供穩定的數據塊存儲服務,它的插件驅動架構有利於塊設備的創建和管理,如創建卷、刪除卷,在實例上掛載和卸載卷。K版本中Cinder實現了服務邏輯代碼與數據庫結構之間的解耦,支持Rolling更新。在K版本中增加了一致性組(一致性組是指具備公共操作的卷,在邏輯上劃為一組)的功能:可以添加、刪除卷,從已經存在的快照創建新的組。

(7)UI界面(Dashboard):Horizon

Horizon OpenStack中各種服務的Web管理門戶,用於簡化用戶對服務的操作,例如:啟動實例、分配IP地址、配置訪問控制等。Horizon在K版本中除了增強了對新增模塊的支持,也從UE的角度帶來了很多新功能,其中支持嚮導式的創建虛擬機,現在還處於beta版本,如果想在Horizon裡激活,可以通過設置local_setting.py的配置實現;支持簡單的主題,可通過修改_variables.scss和_style.scss完成對主題顏色和簡單樣式的修改,但是格局不能改變。

(8)測量(Metering):Ceilometer

它像一個漏斗一樣,把OpenStack內部發生的幾乎所有的事件都收集起來,然後為計費和監控以及其他服務提供數據支撐。在K版本中,Ceilometer支持Ceph對像存儲監控,當對像存儲為Ceph而不是Swfit的時候,使用Polling機制,使用Ceph的Rados Gateway的API接口獲取數據。同時在K版本中支持更多的測量功能,包括Hyper-V、IPMI相關的。

(9)部署編排(Orchestration):Heat

提供了一種通過模板定義的協同部署方式,實現雲基礎設施軟件運行環境(計算、存儲和網絡資源)的自動化部署。自Havana版本集成到項目中後,在K版本中變化較少。

(10)數據庫服務(Database Service):Trove

為用戶在OpenStack的環境提供可擴展和可靠的關係和非關係數據庫引擎服務。自Icehouse版本集成到項目中後,在K版本中變化較少。

(11)大數據服務BDaaS(BigData-as-a-Service):Sahara

Sahara最初的基本定位是基於OpenStack提供簡單的Hadoop集群創建方式,不過隨著項目的不斷演進,Sahara所涵蓋的範疇也有所擴大。從服務層次的維度看,Sahara已經開始從利用OpenStack的IaaS能力,提供簡單的大數據工具集群創建和管理服務,擴展到提供分析即服務(Analytic-as-a-Service)層面的大數據業務應用能力。從承載的業務類型維度看,Sahara也很有可能會迅速突破單一的Hadoop工具範疇,拓展支持其他新興的大數據工具。

(12)裸機管理:Ironic

OpenStack在虛擬化管理部分已經很成熟了,通過Nova可以創建虛擬機、虛擬磁盤,管理電源狀態,快速通過鏡像啟動虛擬機。但是在裸機(物理機)的管理上一直沒有成熟的解決方案。在這樣的背景下Ironic誕生了,它可以解決物理機的添加、刪除,以及電源管理和安裝部署。Ironic最大的好處是提供了插件的機制,讓廠商可以開發自己的驅動器,這讓它支持幾乎所有的硬件。在K版本中,Ironic完成了大量的優化工作:iLO的優化;使用Config Drive替代Metadata服務;全盤鏡像支持,可以跳過raddisk和kernel,這樣就可以部署Windows的鏡像了;使用本地盤啟動替代PXE方式,可以通過設置Flavor的capabilities:boot_option實現。