一直以来从事云行业的工作,但是openstack做的不是很多,openstack是业界标杆性的开源产品,作为云计算的工程人员,不了解openstack是不行的,接下来我打算分不同期讲解自己关于openstack架构以及源码的解析,主要还是源码解读,如有错误及时指出,欢迎大家的共同讨论。
我会从openstack最开始的代码发布分析一期,作为和最新的openstack的架构的对比,加深对openstack的理解。希望通过学习和分享,对openstack有个深入的理解,以下所有openstack简称os。
openstack最开始开源的时候,从github上看是2011年前后,我这里从2011年开始说起。2010-10-21的时候,openstack的第一个版本开始开源,它的命名很有特色,以英文字母为顺序,然后有特定的对应单词命名,第一个版本叫Austin,那个时候就只有两个组件:nova和swift,最新的os包含的组件已经今非昔比,非常的多,非常的复杂。
我们先来看nova组件:
nova
nova是os当中一个计算引擎,而且开始就被赋予了一个交叉型能力的云计算处理控制器,支持亚马逊ec2和存储S3服务。最开始的nova代码目录树如下:

我们分别看看他们都是干什么的:
1.bin目录
目录树如下:

bin目录下的文件主要是nova各个服务启动的python脚本,从上图可以看出,主要有nova-api服务,nova-compute服务,nova-console服务,nova-network服务,nova-scheduler服务,nova-volume卷服务等。每个服务的基本代码结构如下:
这里我们以nova-compute举例,nova-api服务稍微有所不同:
"""Starter script for Nova Compute."""
import eventlet
eventlet.monkey_patch()
import gettext
import os
import sys
# If ../nova/__init__.py exists, add ../ to Python search path, so that
# it will override what happens to be installed in /usr/(local/)lib/python...
possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
os.pardir,
os.pardir))
if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
sys.path.insert(0, possible_topdir)
gettext.install('nova', unicode=1)
from nova import service
from nova import utils
if __name__ == '__main__':
utils.default_flagfile()
service.serve()
service.wait()
我们可以看到,每个服务都是导入了service模块以及util模块,service模块里serve方法会负责创建对应脚本启动的服务,并启动服务,然后wait就是一个无线循环,定期调用greenthread.sleep(5)让出cpu控制权限,给其他任务进行调度执行。
那么, service模块是个什么面目呢?
创建服务时,service模块就在nova顶级代码目录下,是一个通用的服务创建销毁启停模块,模块代码里主要由一个Servce类,以及serve方法和wait方法组成,如下:

两个方法:

我们可以看到,serve方法就是提供给各个服务启动调用的入口函数,这里的代码根据脚本名称解析服务名称,然后初始化各个变量,最终拉起服务。
详情请看下期。
1486

被折叠的 条评论
为什么被折叠?



