讀古今文學網 > OpenStack系統架構設計實戰 > 3.2 Cinder API >

3.2 Cinder API

Cinder API服務提供了RESTful API接口的統一卷管理接口,其主要功能是接受客戶端發來的HTTP請求,然後進行用戶身份認證和消息分發。Cinder API本質上其實是一個WSGI App,啟動Cinder API服務相當於啟動一個名為osapi_volume的WSGI服務去監聽Client的HTTP請求。在代碼實現上,主要使用了幾種技術:WSGI服務器、WSGI App、Paste Deploy和路由器。WSGI服務器具體工作流程可以參見WSGI App的相關原理及說明。

Cinder API的目錄結構如圖3-2所示。

圖3-2 Cinder API的目錄結構

OpenStack定義了兩種類型的Cinder資源,包括核心資源(Core Resoure)和擴展資源(Extension Resoure)。其中在contrib目錄中放置的是所有的擴展資源和資源擴展文件,Cinder中的擴展資源包括extension、os-host、os-quota-set、encryption、backup、cgsnapshot、consistencygroup、encryption、os-availability-zone、extra_spec、os-volume-manage、qos-spec、os-quota-class-set、os-volume-transfer、os-service、scheduler-stats。

而核心資源及其API路由器分為V1及V2兩個版本,分別放在V1和V2兩個目錄下,其中API路由器(目錄中的router.py)負責把HTTP請求分發到其管理的核心資源中去;V1的核心資源則包括卷(Volume)、卷類型(Volume Type)、快照(Snapshot)的操作管理,比如創建和刪除一個卷,或為某個卷做一個快照等;V2的核心資源增加了Qos、limit及備份的操作管理(H版本以後)。

middleware目錄中存放的是WSGI服務的中間件文件。

Cinder API服務處理客戶的HTTP請求的過程如下:

1)在Cinder的BIN目錄中調用cinder-api的腳本文件,啟動一個osapi_volume的WSGI服務。

2)osapi_volume的WSGI服務進程在收到HTTP請求後,首先將HTTP請求封裝成WSGI請求。

3)Middleware濾波器(如果可用的話)處理HTTP請求頭,主要是進行用戶鑒權等。

4)API路由器生成HTTP請求的響應子過程。具體依次進行:RoutesMiddleware產生路由信息,資源的request body反序列化,消息派發給資源控制器,資源控制器具體執行,結果的序列化等。

5)個別middleware還要處理一下響應,包括routesmiddleware。

6)將最終的響應發還給客戶端。