Glance源码结构分析

Glance源码结构分析一 Glance 源码目录结构 root localhostgla tree L2 api ref source etc glance api conf glance api paste ini glance cache conf glance glare conf g

一 Glance源码目录结构
[root@localhost glance]# tree -L 2 . ├── api-ref │ └── source ├── etc │ ├── glance-api.conf │ ├── glance-api-paste.ini │ ├── glance-cache.conf │ ├── glance-glare.conf │ ├── glance-glare-paste.ini │ ├── glance-manage.conf │ ├── glance-registry.conf │ ├── glance-registry-paste.ini │ ├── glance-scrubber.conf │ ├── glance-swift.conf.sample │ ├── metadefs │ ├── oslo-config-generator │ ├── ovf-metadata.json.sample │ ├── policy.json │ ├── property-protections-policies.conf.sample │ ├── property-protections-roles.conf.sample │ └── schema-image.json ├── glance │ ├── api │ ├── async │ ├── cmd │ ├── common │ ├── context.py │ ├── contrib │ ├── db │ ├── domain │ ├── gateway.py │ ├── glare │ ├── hacking │ ├── i18n.py │ ├── i18n.pyc │ ├── image_cache │ ├── __init__.py │ ├── locale │ ├── location.py │ ├── notifier.py │ ├── opts.py │ ├── quota │ ├── registry │ ├── schema.py │ ├── scrubber.py │ ├── tests │ ├── version.py │ └── version.pyc ├── glance.egg-info │ ├── dependency_links.txt │ ├── entry_points.txt │ ├── not-zip-safe │ ├── pbr.json │ ├── PKG-INFO │ ├── requires.txt │ ├── SOURCES.txt │ └── top_level.txt ├── HACKING.rst ├── LICENSE ├── MANIFEST.in ├── pylintrc ├── rally-jobs │ ├── extra │ ├── glance.yaml │ ├── plugins │ └── README.rst ├── README.rst ├── releasenotes │ ├── notes │ └── source ├── requirements.txt ├── setup.cfg ├── setup.py ├── test-requirements.txt ├── tools │ └── test-setup.sh └── tox.ini
二 源码结构分析
Glance的核心代码位于glance目录。
glance/cmd:所有服务以及工具的执行脚本。
glance/api:Glance API
glance/registry:glance-registry服务具体实现。
glance-api可以为镜像建立本地缓存,实现API服务节点的数量扩展,提供多个API节点为同一个镜像提供服务的效率,如果只有一个API节点,缓存机制并没有意义。本地的Image Cache是镜像文件的完全复制,这种复制缓存机制对用户来说是透明的,用户并不知道得到的镜像文件是来自存储后台还是本地缓存。
glance/image_cache:镜像缓存实现。
可以通过配置文件/etc/glance/glance-cache.conf指定Cache文件存放的路径、本地能够用于Cache的存储空间等信息。
image_cache_dir = /opt/stack/data/glance/cache/
image_cache_max_size =
针对import、export、clone等镜像操作,Glance统一引入了Task的概念,从而方便管理,Task是针对镜像的异步操作,glance/async即是部分实现。
Glance采用了责任链的设计模式实现用户请求的处理流程。在责任链模式里,各个对象通过前一个对象对后一个对象引用而连接起来形成一条链,请求在这个链上传递,直到链上的某一个对象决定处理此请求。发起请求的用户或客户端并不知道链上的哪一个对象最终处理这个请求,从而使系统可以在不影响客户端的情况下动态重新组织链和分配责任。glance/domain目录与glance/gateway.py文件即是相关的一些实现,glance.domain模块定义了一些基类或接口,比如ImageFactory、Repo等,而glance.gateway.Gateway模块则是实现了责任链的建立。
Rally是一个性能测试的项目,glance/rally-jobs目录是一些用于Rally的文件或插件。



三 setup.cfg
依照惯例,分析具体实现之前,我们首先看看setup.cfg文件
[entry_points] console_scripts = glance-api = glance.cmd.api:main glance-cache-prefetcher = glance.cmd.cache_prefetcher:main glance-cache-pruner = glance.cmd.cache_pruner:main glance-cache-manage = glance.cmd.cache_manage:main glance-cache-cleaner = glance.cmd.cache_cleaner:main glance-control = glance.cmd.control:main glance-manage = glance.cmd.manage:main glance-registry = glance.cmd.registry:main glance-replicator = glance.cmd.replicator:main glance-scrubber = glance.cmd.scrubber:main glance-glare = glance.cmd.glare:main
“entry_points”中的命名空间”console_scripts”里,涵盖了Glance所提供的所有服务以及工具,其中的每一个项都是一个可执行的脚本,这些脚本在部署时被安装,它们同时也是Glance各项工作的入口。
  • glance-cache-*:四个对Image Cache进行管理的工具。比如glance-cache-pruner用于执行一些周期性的任务,glance-cache-cleaner可以清理Cache文件释放空间。
  • glance-manage:用于Glance数据库的管理。
  • glance-replicator:实现镜像复制功能。
  • glance-scrubber:用于清理已经删除的Image
  • glance-control:Glance提供了glance-api、glance-registry两个WSGI Server,以及一个glance-scrubber后台服务进程,这里的glance-control工具即是用于控制这三个服务的进程,包括start、stop、restart等。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218715.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午11:38
下一篇 2026年3月17日 下午11:38


相关推荐

  • 模电笔记(按知识点整理版)

    模电笔记(按知识点整理版) 这是个人整理的一份个人模电学习笔记,文档中所有未标明的链接均为CSDN电子版笔记,对应章节的网课学习教程会在对应章节进行附录。模拟电子线路 这是一门很离谱的学科,因此即使是绪论我们也不能放过,以此来有助于我们更好地去了解这门学科究竟是什么以及应该怎么学习。一、基础知识 绪论与学习方法 常用半导体及其器件关键词:本征半导体PN结P型半导体与N型半导体基础知识对应网课: 绪论二、常用器件 对于模拟电路的学习归根结底就是对于器件的学习。坦白来讲就是玩管子。所有的管子我们都可以

    2022年6月20日
    39
  • Qt学习—qt编写定时关机程序

    Qt学习—qt编写定时关机程序编写了一个简单的定时关机程序,软件界面如下。顺便记录一下所用的控件的一些简单的使用方法。程序中用到的控件主要是QLCDNumber(数码管控件)以及QSpinBox()(滚动框控件)。通过system()调用系统的关机命令。需要包含头文件stdlib.h。此外涉及到数码管以及滚动框显示数字时,前缀“0”的显示和消隐的问题。以下是代码。首先是main.cpp#include

    2022年7月22日
    31
  • java集合介绍_java代码分析框架

    java集合介绍_java代码分析框架概述HashMap是Map接口下一个线程不安全的,基于哈希表的实现类。由于他解决哈希冲突的方式是分离链表法,也就是拉链法,因此他的数据结构是数组+链表,在JDK8以后,当哈希冲突严重时,H

    2022年8月16日
    10
  • vue中watch监听对象的变化_远程监听器用法

    vue中watch监听对象的变化_远程监听器用法官方解释:一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。Vue实例将会在实例化时调用watch,遍历watch对象的每一个属性。示例:滴哟<template> <el-cardclass=”box-card”><el-inputv-model=”name”style=”width:30%;”></el-input></el-card></template.

    2025年7月5日
    8
  • win10多合一原版系统_win10简体中文64位16299.15多合一版本

    win10多合一原版系统_win10简体中文64位16299.15多合一版本镜像有点大估计压缩后也会超过4G,所以不会上传多合一版本介绍:包含以下版本windows10homewindows10homesinglelanguagewindows10homechinawindows10prowindows10educationwindows10enterprisewindows10s注意全部是64位的哈!!微云:http://url.cn/…

    2022年6月17日
    59
  • Spring Data JPA插入

    Spring Data JPA插入save 方法是面向业务的 每次插入都需要验证当前数据是否为新数据 Transactiona SextendsT Ssave Sentity if this entityInform isNew entity this em persist entity SextendsT

    2025年8月25日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号