common library in nova (1)

 

本文转载至www.x9byod.com

 

nova中把通用的功能模块放在openstack/common下,实现了很多基本的常用功能,比如log,time,包引用等等;这个模块与其它模块高度独立,因此可以被很容易的被各个模块,甚至其它工程复用。这里介绍openstack比较常用和重要的几个模块:

  • db

nova数据库默认采用的后台是sqlalchemy,common/db实现了抽象的DBAPI类,所有对数据库的操作都通过DBAPI来代理。DBAPI只是一个简单的wrapper,真正的实现由它的初始话参数backend_mapping来决定。nova里采用的默认值为“{‘sqlalchemy’: ‘nova.db.sqlalchemy.api’}”,也就是说,db的后台实现在目录nova/db/sqlalchemy下。nova.db.sqlalchemy.api中实现了所有对数据库操作函数的封装,任何一个对数据库状态有修改的函数,都可以在这里找到对应的数据库更新函数。数据库的表定义在nova.db.sqlalchemy.models中。

  • log

nova的log可以认为是对python标准库里logging函数的封装和增强。它根据配置文件,对输出的内容,级别,格式以及输出目的进行控制。同时,配合gettextutils模块,log还支持多语言的数据

  • gettextutils

是对gettext工具的封装,用来提供多语言的输出。典型用法也是通过_(“index message id”)来提供不同语言的输出。gettextutils提供两种模式,如果用普通模式(非lasy),会调用gettext模块中translation的ugettext直接翻译输出。如果用lazy模式,_会返回一个Message对象,只有在访问Message对象的str或者unicode方法时,才会从po文件里查找对应的翻译内容。

  • service

简单说就是把函数或者可执行程序放在后台执行。服务有launch函数启动,有两种启动方式:一是直接在thread里执行,另一个是创建子进程执行。nova中service的实现在nova.service中,由cmd下的all.py来启动对应的服务。启动过程首先创建service或者wsgi_service,wsgi_service由对应的manager启动,service除了manager外,还实现了rpc的接口,用来相应远程命令的实现。nova-compute’, ‘nova-network’, ‘nova-scheduler’都属于Service,’ec2′属于wsgi_service。

  • periodic_task

nova在运行时需要很多定时任务,例如检查vm状态,更新节点信息等等。periodic_task是用来简化nova中定时任务的处理,通过periodic_task我们不必为每一个任务写一个单独的定时器进行调度。periodic_task的核心是一个decorator,一个metaclass,一个定时任务的基类。
periodic_task.periodic_task是decorator,它为函数设置必要的属性(例如定时间隔,执行时间等),保存在函数的属性中(函数也是对象);PeriodicTasks是定时任务的基类,它的run_periodic_tasks函数会在定时器到达时,检查并执行所有需要被执行的成员函数。而_PeriodicTasksMeta作为PeriodicTasks的metaclass,在生成PeriodicTasks类时,会把所有需要定时执行的成员函数(PeriodicTasks中被periodic_task decorated的成员函数)保存到数组_periodic_tasks中。而run_periodic_tasks函数就是在这个数组中进行检查的。

 

待续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值