OpenStack g版 Glance 源码分析

Glance实现的功能主要有镜像管理,和缓存管理,和一些辅助的工具。我在前边的文章中对他的缓存机制有一个简单的介绍,这里就主要介绍一下他的其他功能。

存储管理的核心代码主要在glance-master/ glance/store下,glance实现了多种方式的数据后台存储,如文件系统方式,http方式swift方式,s3方式,gridfs方式,rbd方式。对于某种方式的实现他们主要是继承和实现base.py的Store基类,和location.py中的location基类。这些代码大家可以自己去看,代码中有详细的注释。我在这里解释一下几个概念schemes:模式,glance中的不同存储类型的,镜像资源的位置属性是通过url的形式。如时s3形式的存储描述"s3://<ACCESS_KEY>:<SECRET_KEY>@<S3_URL>/<BUCKET>/<OBJ>",文件系统的描述file:///var/lib/glance/images/12809466-fffd-4bdf-9227-c3c05c28a2c5。其中开头的s3: ,file:就是所谓的schemes,一种存储类型可能对应不止一种schemes。  变量SCHEME_TO_CLS_MAP存储

scheme_map[scheme] = {

'store_class': store_cls,# 对应scheme 的store类

'location_class': loc_cls,#对应scheme的location类

}

类型的信息,来实现相关的注册,来方便其他程序的调用。如在启动bin中的glance-api时执行了glance.store.create_stores(), glance.store.verify_default_store()方法就是为了实现上述的注册,和相关验证。

Glance提供了两个web api服务一个是glance-api,一个是glance-registry。glance-registry其中很大的作用是充当内部api的作用,被glance-api,缓存服务等对外的api所调用。其中 glance-registry中定义了一个v2版的api,该api主要实现rpc的功能,就是直接通过web的方式来调用glance中的函数。glance-api中也出现了一个v2版的api,这个api最主要的特点是对img增加了一个tags信息的描述,通过tags增强对img的信息的描述和表达。Glance为了实现v2,增加了很多的代码,这些代码用了一种比较特殊的通过各种代理方法代理,再通过多层继承来实现相关功能,代码结构相对复杂,比较难看懂,这种处理方式可能是使程序更加容易扩展吧,我对此的理解也不是很深,希望有更好理解的朋友共同探讨一下。

其中glance中有一个glance-replicator工具,主要目的是为了方便多glance数据中心的管理,实现镜像之间拷贝比较等功能。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/1a39975efa2879aece1ac3d17c8d5c1c.html