首页 » OpenStack系统架构设计实战 » OpenStack系统架构设计实战全文在线阅读

《OpenStack系统架构设计实战》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)将最终的响应发还给客户端。