后端服务框架
介绍云平台后端服务所用的框架和相关库的使用方法,建议先阅读 开发手册/服务组件介绍 了解各个服务大概的功能。
后端服务框架
keystone, region, glance 等后端服务,都是用的同一套后端服务框架,这个框架是我们自己定义实现的,核心模块如下:

-
REST API: 负责解析客户端发送的 CRUD http 请求,将不同的请求对应到 Model Dispatcher 模块。
-
Model Dispatcher: 将客户端的请求分发到对应资源的业务操作。
-
Model: 定义云平台各种资源,会进行数据库读写相关操作,如果具体业务需要进行耗时操作,会通过 Task 机制来执行耗时任务。
-
Task: 后台处理异步耗时任务的模块,会通过更新 Model 的状态来更新任务的执行结果。
Cloudpods 代码结构
- build: 打包rpm脚本
- cmd: 可执行binary入口程序
- pkg: 库
- appsrv: 通用http服务框架
- cloudcommon: 云平台服务框架,基于appsrv扩展
- cloudcommon/options: 通用options
- cloudcommon/app: 通用服务初始化代码
- cloudcommon/db: Model dispatcher和Models的基础实现
- cloudcommon/db/lockman: 锁实现
- cloudcommon/db/taskman: 异步任务框架
认证部分

- 客户端向服务发起请求前,需要从keystone获得token
- 客户端通过携带用户名密码调用keystone的/v3/auth/tokens接口获得token
- 客户端向服务发起的每次API请求都会在HTTP头携带该token,比如: X-Auth-Token: {token}
- 后端服务向keystone验证该token,获得用户的身份信息,执行后续API的流程
- 每个服务都有一个keystone注册的服务用户账号(user/password),并且以admin角色加入system项目
- 服务启动后,会向keystone发起认证,获得admin token
- 用户通过API访问服务时,将在header携带token
- 使用这个admin token访问keystone的token验证接口,验证这个token,获得用户的身份信息
Model Dispatcher
把 REST API 和 Manager/Model 的方法进行一一映射
| REST API 请求 | API 功能 | 对应对 象 | 框架方法 | 说明 |
|---|---|---|---|---|
| GET /$resources | 列表 | Manager | ListItemFilter | 过滤 |
| - | Manager | FetchCustomizeColumns | 获得扩展字段的信息 | |
| GET /<resources>/<property> | 获得该类资源特定属性 | Manager | GetProperty<Property> | 获得该类资源的特定属性 |
| GET /<resources>/<res_id> | 获得某个资源详情 | Model | FetchCustomizeColumns | 获取扩展字段的信息 |
| GET /<resources>/<res_id>/<spec> | 获得某个资源特定属性 | Model | GetDetails<Spec> | 获取某个资源的特定属性 |
| POST /<resources> | 新建资源 | Manager | ValidateCreateData | 校验和处理创建的数据 |
| - | Model | CustomizeCreate | 自定义的创建操作 | |
| - | Model | PostCreate | 创建后的hook | |
| - | Manager | OnCreateComplete | 创建完成的hook | |
| POST /<resources>/<action> | 对该类资源执行操作 | Manager | Perform<Action> | 对该类资源执行特定操作 |
| POST /<resources>/<res_id>/<action> | 对某个资源执行操作 | Model | Perform<Action> | 对某个资源执行特定操作 |
| PUT /<resources>/<res_id> | 更新某个资源的属性 | Model | ValidateUpdateData | 校验和处理更新操作的数据 |
| - | Model | PreUpdate | 自定义的创建操作 | |
| - | Model | PostUpdate |