Glance源码架构探秘(四)

Glance源码架构探秘(二) Glance源码架构探秘(一) Glance源码架构探秘(二) Glance源码架构探秘(三) Glance源码架构探秘(四) 上一章的最后,为大家介绍了Glance服务的对外启动接口/bin/glance-api,其中最用要的部分就是通过server = eventlet.wsgi.Server()生成了一个http server,并通过server.start()启动了 阅读详情

Glance源码架构探秘(一)

Glance源码架构探秘(二)

Glance源码架构探秘(三)

Glance源码架构探秘(四)


最近感情生活颇不顺利,耽搁了很长时间。今天抽出时间来给大家继续分享Glance源码架构探秘,详细阐述glance镜像操作部分。


前几章,我们花了很大的篇幅,讨论了Glance服务的WSGI框架部分,包括网络编程eventlet库,绿化的webserver,WSGI,URL的Routes分发,分析请求拼接响应及控制器controller的机构等。了解及掌握这些技术内幕,对于我们今后研究Nova的代码架构是十分有帮助的。

首先,我们先研究一下Glance的代码目录,我们一直以来还没有研究过目录,这对本章的理解十分重要

api —— API对外接口的包,glance服务的对外接口都在这里

    middleware —— 中间件

    V1 —— 第一版API

    V2 —— 第二版API

    authorization.py —— 提供用户验证管理的功能

    policy.py —— 提供policy管理的功能(policy不是本章的重点,可自行进行引申阅读)

common —— glance一些共用的模块

db —— 数据库操作模块

openstack —— openstack的一些共用模块

notifier —— 通知系统的模块(目前主要做log用)

store —— 后端存储管理模块

当用户的glance操作的请求通过WSGI,通过分发dispatch终于进入到控制器Controller之后,我们也最终要开始glance镜像的具体操作了。大家研读Controller内的代码会发现,不管什么操作,如上传镜像,修改镜像元数据等,开始都会有上述两条语句

image_factory = self.gateway.get_image_factory(req.context)
image_repo = self.gateway.get_repo(req.context)
会生成一个image_factory对象和一个image_repo对象,其中image_factory对应后端store进行镜像的存储等操作,image_repo对应glance的镜像数据库的管理等操作。

我们看一下gateway中的代码

class Gateway(object):
    def __init__(self, db_api=None, store_api=None, notifier=None,
                 policy_enforcer=None):
        self.db_api = db_api or glance.db.get_api()
        self.db_api.configure_db()
        self.store_api = store_api or glance.store
        self.notifier = notifier or glance.notifier.Notifier()
        self.policy = policy_enforcer or policy.Enforcer()

    def get_image_factory(self, context):
        image_factory = glance.domain.ImageFactory()
        policy_image_factory = policy.ImageFactoryProxy(
                image_factory, context, self.policy)
        authorized_image_factory = authorization.ImageFactoryProxy(
                policy_image_factory, context)
        return authorized_image_factory

    def get_repo(self, context):
        image_repo = glance.db.ImageRepo(context, self.db_api)
        store_image_repo = glance.store.ImageRepoProxy(
                context, self.store_api, image_repo)
        policy_image_repo = policy.ImageRepoProxy(
                context, self.policy, store_image_repo)
        notifier_image_repo = glance.notifier.ImageRepoProxy(
                policy_image_repo, self.notifier)
        authorized_image_repo = authorization.ImageRepoProxy(
                notifier_image_repo, context)
        return authorized_image_repo
下面是我画的所涉及到类的UML图


熟悉涉及模式的同学可以看出,这是一个经典的责任链模式(Chain of Responsibility)。责任链模式是一种对象的行为模式【GOF95】。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。

正如上面对于责任链模式的描述,我们进行一个操作比如add(),这个操作会在我们的ImageRepoProxy责任链上传递下去(authorization -> notifier -> policy -> store -> db),如果这个操作在链上某个类中有对应的同名方法,则调用这个方法然后传递下一级类,否则直接传递至下一级。通过这种方式,将验证,通知,policy,后端存储,数据库等操作有机的结合起来,代码结构也非常优美,便于理解。

OpenStack代码可以发现许多非常棒的设计模式的应用,大家不妨多多留心。

Openstack Glance源码架构解析 这段时间捣鼓了一下Glance源代码,还是有收获的,修改了部分代码实现了支持多个ceph存储后端的功能。这个功能是不是个伪需求都还待定,反正也就当磨练了。 关于支持多个ceph存储后端的功能,稍微说一下 需要实现的功能就是在命令中行上传镜像,通过指定集群将镜像上传到不同ceph集群中。在通过nova创建虚拟机的时候肯定也需要能够使用这些创建虚拟机,当然这在计算节点的nova配置中就能实现 阅读详情

相关推荐

OpenStack之Glance

OpenStack之Glance,即OpenStack的镜像服务

weixin_42795092的博客 1612

Docker---docker的一些基础操作

文章目录一:做镜像下载加速二:镜像常规操作2.1:搜索镜像2.2:下载镜像2.3:查看已有镜像2.4:查看镜像详细信息2.5:镜像存放位置2.6:为镜像添加新的标签2.7:删除标签2.8:删除镜像2.9:导出镜像(保存镜像)到相应目录2.10:导入镜像三:容器常规操作3.1:创建容器3.2:查看容器状态3.3:启动容器3.4:登录容器3.5:停止容器3.6:启动容器并执行命令(执行完自动退出)3.7:启动容器并执行命令(持续在后台运行)3.8:导出容器3.9:导入容器(会生成镜像,而不会创建容器)3.10:

大E了的博客 1008

Yolov5实现道路裂缝检测

Yolov5实现道路裂缝检测 参考代码链接 Github代码链接 基于Pytorch的Yolov5道路裂缝检测程序运行说明。大家可以结合我的说明和原文说明使用,有问题欢迎询问。 文章目录Yolov5实现道路裂缝检测环境要求测试训练自己的数据集1.创建dataset.yaml文件2.创建标签文件3.组织文件路径4.选择模型5.开始训练 环境要求 Python 3.8或之后的版本 还要安装requirements.txt文件中所有依赖包,包括1.7及以上版本的torch $ pip install -r req

qq_26751379的博客 2万+

Glance体系结构

由于Glance并不负责实际的存储,只是完成一些镜像管理的工作,因此它的功能比较单一,包含的主要组件也相对比较少,下图为Glance的体系结构。Glance主要由glance-api与glance-registry两个服务组成。glance-api是进入Glance的入口,负责接收用户的Restful请求, 通过后台的Swift、Amazon S3等存储系统完成镜像的存储与获取。Glance的St...

实践求真知 3550

Ubuntu下Charm-Crypto安装

经过一下午的努力终于是把Charm-Crypto给安上了,经过查询资料,大致有三种方案(两坑一可行)。 适用于我的电脑的是Ubuntu 18.04版本。 第一种方案是根据连接https://pypi.org/project/charm-crypto/的教程进行安装,但是该方案的优势在于下载快速,缺陷在于Ubuntu系统仅仅更新到13+版本。 第二种就是网络博客上的介绍,内容与第一种较类似,但是有16+,18+成功的例子,缺点就是bug太多,我大部分时间都耗在了这上边,而且还没有成功。 第三中是github上

Mr.Yi的博客 2284

COMSOL电磁仿真-网格剖分-边界层

介绍COMSOL在低频电磁场中边界层网格的剖分方法。

奇妙水果的技术博客,欢迎交流技术~ 4481

openstack——Glance镜像服务

openstack——Glance一、Glance镜像服务1.镜像2.镜像服务3.Images API的版本4.镜像格式 一、Glance镜像服务 在早期的openstack版本中,Glance中有管理镜像的功能,并不具备镜像存储功能。现在,Glance已经发展称为集镜像上传、检索、管理和存储等等多种功能的open stack核心服务。 1.镜像 镜像的英文为image,又译为映象,通常是指一系列文件或一个磁盘驱动器的精确副本。镜像文件其实和ZIP压缩包类似,它将特定的一系列文件按照一定的格式制作成单

DLZ的博客 1217

RT-Thread stm32h7使用串口DMA

stm32h7在rtthread中无法使用串口DMA,通过更改驱动代码使其支持串口DMA

qq_35141454的博客 2286

Glance源码深入解读

OpenStack是目前主流的开源云计算平台,它通过解耦的架构分别提供了计算、快存储、镜像、网络、认证等服务,其中镜像服务是六大核心组件之一。Glance实现了OpenStack平台的Image service,为云平台提供镜像上传、下载和管理等功能,通过对Glance源码的深入解读,让我们更深层次得认识这个简单而又复杂的镜像服务。 Glance项目全部由Python编写,读者需要掌握Pyt

zhuangshu_feng'‘每天进步一点点 3244

ansys命令流力磁耦合仿真

文章目录前言一、力磁耦合仿真流程二、静力学仿真三、力磁耦合模型构建四、静磁学仿真总结 前言 一、力磁耦合仿真流程 力磁耦合有限元仿真流程中,首先进行静力学仿真,经过前处理模块、分析计算模块和后处理模块提取三维模型单元应力,然后根据力磁耦合方程中,通过matlab将单元应力导入到磁导率与应力的关系式中,得到单元的相对磁导率。最后采用载荷传递耦合方式,进行静磁学模拟仿真,分析计算得到该载荷下试件的磁场分布。,如下图所示为力磁耦合仿真流程图: 二、静力学仿真 下图为中心预制条形缺陷的Q235钢板试..

wsfwsf128的博客 2661

威纶通触摸屏与S7-1200以太网通信的具体方法和步骤(非常详细)

威纶通触摸屏与S7-1200以太网通信的具体方法和步骤(非常详细)

Robot_PLC_HMI_Automation 1万+

Glance源码架构探秘(一)

Glance源码架构探秘(一) Glance源码架构探秘(二) Glance源码架构探秘(三) Glance源码架构探秘(四) 前言 从本章开始,将会陆续为大家分享有关OpenStack各组件模块代码架构的探秘。首先从OpenStack的镜像管理模块Glance开始,原因是Glance只负责镜像的上传,下载等管理,功能对比Nova模块来说相对比较少,便于代码结构的分析。还

熠耀之森 7007

Headless Browser 反检测:如何在自动化测试和爬虫中模拟真实用户环境和指纹,以规避检测?

这是最基本的操作,你需要将 Headless Browser 的 User-Agent 修改成一个真实的 User-Agent。我是你们的老朋友,代码界的段子手,今天咱们来聊聊一个让爬虫工程师和自动化测试工程师头疼,但又不得不面对的问题:Headless Browser 的反检测。Headless Browser 的反检测是一个持续对抗的过程,网站的反爬虫机制会不断升级,你需要不断地学习新的反检测技巧。以上只是一些基本的反检测手段,如果你的目标网站的反爬虫机制比较高级,那么你需要使用更高级的技巧。

weixin_41455464的博客 1657

Glance源码架构探秘(三)

Glance源码架构探秘(一) Glance源码架构探秘(二) Glance源码架构探秘(三) Glance源码架构探秘(四) 上一章我们分析了OpenStack中如何用eventlet库创建一个“绿化”的协程式web server,以及WSGI相关概念及在Python中的参考实现,本章我们将具体地讲解WSGI程序内部的框架。 其实,简单的说,Glance及其他OpenS

熠耀之森 4622

innovus:sroute 双层follow pin的做法

根据std cellpower pin的层次可以分成两种情况。

m0_61544122的博客 2731

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Glance源码架构探秘

http://blog.youkuaiyun.com/networm3/article/details/8651324 Glance只负责镜像的上传,下载等管理。 Glance项目提供虚拟机镜像的查找,注册和重现,使用RESTful接口接受虚拟机镜像管理的查询请求。 从F版开始使用的API V2,相对于V1版大大简化了流程,将glance-api与glance-registry合并在了一

ztejiagn的专栏 2113

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Glance源码结构分析

一 Glance源码目录结构[root@localhost glance]# tree -L 2 . ├── api-ref │ └── source ├── etc │ ├── glance-api.conf │ ├── glance-api-paste.ini │ ├── glance-cache.conf │ ├── glance-glare.conf │ ├── g...

实践求真知 1196

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Openstack liberty Glance上传镜像源码分析

该文同时发布在[ceph中国社区],署名为Thomas 在Openstack中创建云主机,首先得有镜像,而Glance模块提供镜像服务功能,包括:镜像的发现、检索及存储等,主要包括:glance-api和glance-registery两个服务,分别负责镜像的存储和元数据管理。下面基于源码,分析下镜像的上传过程。上传镜像先通过glance CLI上传镜像,来直观的了解下镜像上传的过程:# glanc

梦幻之巅 1万+

Glance源码架构深度解析:Swift与Go混合开发Quick Look插件的设计之道

Glance 是一款 All-in-one 的 macOS Quick Look 插件,能让 Finder、Spotlight 与 Quick Look 直接预览 macOS 原生不支持的多种文件格式。本文深度解析 Glance 源码架构,带你读懂它如何以 Swift 与 Go 混合开发的巧妙设计,把语法高亮、Markdown 渲染、压缩包浏览等能力统一装进一个轻量插件中。无论你是想学习 macO

gitblog_00773的博客 1030

Glance源码

Glance项目全部由Python编写,读者需要掌握Python语法和wsgi、evenlet、webob、paste等类库,生产环境的镜像一般存在分布式存储中因此还会涉及部分Ceph基础知识。 作用与用法 深入学习一个项目前,我们要了解这个项目的作用和使用方法。Glance提供了镜像上传和下载功能,也就是说管理员可以通过Glance来上传镜像,而普通用户可以通过Glance下

zhuangshu_feng'‘每天进步一点点 937

从源码构建安装Glance:Makefile、pluginkit注册与qlmanage排障教程

Glance 是一款开源的 macOS All-in-one Quick Look 插件,让你按空格键就能快速预览 Markdown、Jupyter Notebook、压缩包、TSV 表格和几十种源代码文件。不过,由于安装包未签名公证,直接安装常会遇到「无法打开」或「预览不生效」的尴尬。这份从源码构建安装 Glance 的完整教程,将带你走通 Makefile 构建、pluginkit 注册与 q

gitblog_00232的博客 374

Glance支持的100+文件格式全盘点:从源码高亮到Jupyter笔记本一网打尽

macOS用户每天都在和各种文件打交道,但系统自带的Quick Look只能预览图片、PDF等少数格式。今天要介绍的 **Glance**,是一款开源的macOS Quick Look全能预览插件,它一举补齐了系统短板——源码高亮、Markdown渲染、压缩包浏览、Jupyter笔记本和TSV表格都能按一下空格直接预览,**支持的100+文件格式**几乎覆盖了开发者的日常工作流。不需要打开任何应用

gitblog_00650的博客 649
上一篇: Linux下如何知道文件被那个进程写
下一篇: C/C++ Hash表
Ethan_熠森张
博客等级 码龄18年 124粉丝 51原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值