openstack源码分析一

一直以来从事云行业的工作,但是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方法就是提供给各个服务启动调用的入口函数,这里的代码根据脚本名称解析服务名称,然后初始化各个变量,最终拉起服务。

详情请看下期。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值