首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > 云计算 >

Glance源码架构探秘(1)

2013-03-12 
Glance源码架构探秘(一)前言从本章开始,将会陆续为大家分享有关OpenStack各组件模块代码架构的探秘。首先从

Glance源码架构探秘(一)

前言

从本章开始,将会陆续为大家分享有关OpenStack各组件模块代码架构的探秘。首先从OpenStack的镜像管理模块Glance开始,原因是Glance只负责镜像的上传,下载等管理,功能对比Nova模块来说相对比较少,便于代码结构的分析。还是那句话,Stacker们,大家多交流,我看到留言会回复的~


Glance项目提供虚拟机镜像的查找,注册和重现,使用RESTful接口接受虚拟机镜像管理的查询请求。

Glance源码架构探秘(1)

程辉博客中glance架构图


在程辉的一篇博客中,有Glance的架构介绍,其中有上面的图。作者将Glance-API和Glance-Registry解释为调用关系是不正确的。这两个服务是独立运行的服务,在sbin目录下,看过glance部署文章的同学知道,glance部署的最后一步就是启动glance-api和glance-registry这两个服务。这两个服务作为WSGI,会分别响应来自用户的RESTful请求,而不是图上所暗示的glance-api响应请求,然后调用glance-registry进行image元数据在数据库的注册。

Glance对外服务的入口主要有2个

1、Glance-API:主要负责接收响应镜像管理命令的Restful请求,分析消息请求信息并分发其所带的命令(如新增,删除,更新等)。默认绑定端口是9292。

2、Glance-Registry:主要负责接收响应镜像元数据命令的Restful请求。分析消息请求信息并分发其所带的命令(如获取元数据,更新元数据等)。默认绑定的端口是9191。

在/etc/glance目录下有两个文件glance-api-paste.ini和glance-registry-paste.ini,两个入口服务启动后,会用配置文件分析模块读取这两个文件,执行其文件中标注的需要执行的WSGIapp和middleware。简述paste文件中的概念:

app:实际处理REST API请求的python类。
filter:一种装饰器,为app提供一层封装,在app处理请求之前会先调用filter的对象。
pipeline:所对应的对象是对filter和app的的封装,他将多个filter和某个app绑在一起,在app处理请求之前要先通过pipline指定的在app之前的filter的处理。


在glance-registry中有

"""Glance API Server"""import gettextimport osimport sys# If ../glance/__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, 'glance', '__init__.py')):    sys.path.insert(0, possible_topdir)gettext.install('glance', unicode=1)from glance.common import configfrom glance.common import wsgifrom glance.common import exceptionfrom glance.openstack.common import logimport glance.storedef fail(returncode, e):    sys.stderr.write("ERROR: %s\n" % e)    sys.exit(returncode)if __name__ == '__main__':    try:        config.parse_args()        log.setup('glance')        glance.store.create_stores()        glance.store.verify_default_store()        server = wsgi.Server()        server.start(config.load_paste_app(), default_port=9292)        server.wait()    except exception.WorkerCreationFailure, e:        fail(2, e)    except RuntimeError, e:        fail(1, e)
首先程序会调用glance.store.create_stores,注册与后端存储(swift、s3、filesystem等)相关的控制模块,并校验默认存储方式。

紧接着启动一个Http Server,openstack的WSGI SERVER用到了eventlet这个绿色线程的组件,这个我们后面一章会介绍到。

通过config.load_paste_app()方法,会从上面提到的glance-api-paste.ini配置文件中读取要启动的WSGI app,并在server中启动,并让server线程等待接收http rest查询响应。

下一章将为大家分析openstack所有服务共同用到的WSGI Server组件eventlet和Restful查询请求的分发器Routes组件。




热点排行