openstack通用库学习
本人入职新手,初学openstack,希望记录一些笔记给刚入门的同学提供帮助。
##通用库
openstack 通用库Oslo 孵化库 Oslo-incubator
oslo.config 库用于解析命令行和配置文件的配置选项,cfg.CONF是oslo.config定义的一个全局对象实例。oslo.config支持的配置选项类型有oslo.config.cfg.StrOpt、oslo.config.cfg.BoolOpt、oslo.config.cfg.IntOpt、oslo.config.cfg.FloatOpt、oslo.config.cfg.ListOpt、oslo.config.cfg.DictOpt、oslo.config.cfg.MultiStrOpt等。
cfg.CONF.register_opts(OPTS)
oslo.db是针对SQLAlchemy访问的抽象。获取SQLAlchemy的engine和session对象实例,engine对象是共享的,也是线程安全的可以等效称一组数据库连接,而session不是线程安全的,不应该被共享使用。
oslo.messaging 是为openstack各个项目使用RPC和事件通知提供统一的接口。为了支持不同的RPC后端实现,oslo.messaging对Transport(传输层),Target,Service,RPC
client,Notifier,Notification Listener对象进行了统一。Transport 主要实现了RPC底层的通信以及事件循环、多线程等功能。在不同的场景下构造Target需要不同的参数。
一个RPC 服务器可以暴露多个endpoint,每个endpoit包含一组方法, 这组方法是可以被客户端通过某种Transport对象远程调用的。创建Sever对象时,需要指定Transport,Taget和一组endpoint。
通过RPC Client,可以远程调用RPC Server上的方法。远程调用时,需要提供一个字典对象来指明调用的上下文,调用方法的名字和传递给调用方法的参数(用字典表示)。有cast和call两种远程调用方式。通过cast方式远程调用,请求发送后就直接返回了:通过call方式远程调用,需要等响应从服务器返回。
TaskFlow,通过这个库可以容易的控制的执行,包括task、flow和engine。先定义task,task用拥有执行(execute)和回滚(revert)功能的最小单位。然后建立一个线性流flow并在其中加入几个task对象,flow用来关联各个task并且规范几个task之间的执行与回滚顺序,Taskflow中的流支持linear_flow.Flow线性流 ,unordered_flow.Flow无序流,graph_flow.Flow图流。
oslo.policy 用于控制用户权限,能够执行什么样的操作,openstack中每一个项目都有一个policy.json,通过配置这个文件夹实现对用户的权限管理。
oslo.rootwrap 可以让openstack服务以root的身份执行shell命令
oslo.test提供单元测试的基础框架
RESTful与WSGI
RESTful API 提高客户端服务器的独立性与松耦合性,加强服务器的可伸缩性和简化服务器的开发。能满足客户端服务器的独立性,用户状态保存在客户端,客户端发送请求时必须包含所有数据,包括用户状态。有统一的接口规范,可以降低客户端服务器的耦合性,使得编码更加简单。
WSGI(web of service gateway interface)是python定义的web服务器与web应用或者web框架通用的接口标准。其最主要的部分是其应用程序,如果应用程序修改了其相应的WSGI服务也就改变了,可以通过配置文件配置WSGI服务的应用程序,而PasteDeploy就是专门定制WSGI服务的开发包。可以利用PastDepaloy定制特定的WSGI服务。
Openstack大部分组件的的WSGI服务配置保存在api-paste.ini中。PasteDeploy的主要部件有app 应用程序,filter过滤器 pipeline管道composite复合体。App是WGSI的核心部分,实现其主要逻辑,filter一般用于一些准备性工作如验证用户身份等,pipeline包含若干个filter与1个app,可以定制复杂的WSGI服务,composite可以分支选择,如可以根据不同的url调用不同的应用程序。
参考文献:《openstack开源云-王者归来》