从 volume  创建流程看 cinder-* 子服务如何协同工作
 
对于 Cinder 学习来说,Volume 创建是一个非常好的场景,涉及各个 cinder-* 子服务,下面是流程图
 
 
1、客户(可以使OpenStack 最终用户,也可以是其他程序)向 API (cinder-api)发送请求:帮我创建一个volume
 
2、API对请求做一些必要的处理后,向Messaging(RabbitMQ)发送了一条消息:让Scheduler创建一个volume
 
3、Scheduler (cinder-scheduler) 从Messaging 获取到 API 发给他的请求,然后执行调度算法,从若干个存储节点中选出节点A
 
4、Scheduler 向Messaging 发送了一条消息:让存储节点A 创建这个volume
 
5、存储节点A 的Volume(cinder-volume)从Messaging中获取到Scheduler发给他的消息,然后通过driver在volume provider上创建volume
 
上面是创建volume最核心的几个步骤,当然也省略了很多细节,我们会在后面详细讨论。
 
Cinder 的设计思想
 
Cinder 延续了Nova 以及其他组件的设计思想
 
API前端服务
 
    cinder-api 作为 Cinder 组件对外的唯一窗口,向用户暴露Cinder能够提供的功能,当客户需要执行volume相关的操作,能且只能向 cinder-api发送REST请求。这里的客户包括终端用户、命令行和OpenStack其他组件。
 
设计API前端服务的好处在于:
 
    1、对外提供统一的接口,隐藏实现细节
    2、API提供REST 标准调度服务,便于第三方系统集成
    3、可以通过运行多个API服务实例轻松实现API的高可用,比如运行多个cinder-api进程
 
Scheduler 调度服务
 
    Cinder 可以有多个存储节点,当需要创建volume时,cinder-scheduler会根据存储节点的属性和资源使用情况选择一个最合适的节点来创建volume。
 
调度服务就好比是一个开发团队中的项目经理,当接到新的开发任务时,项目经理会根据任务的难度、当前每个队员的工作负荷、队员的技能水平等因素,将任务分配给最合适的开发人员。
 
Worker 工作服务
 
调度服务只管分配任务,真正执行任务的是Worker 工作服务。
 
在Cinder中,这个Worker 就是cinder-volume了,这种Scheduler 和 Worker 之间只能上的划分使得OpenStack非常容易扩展:当存储资源不够时可以增加存储节点(增加Worker)。当客户的请求量太大调度不过来时,可以增加Scheduler。
 
Driver框架
 
OpenStack作为开发的 Infrastructure As A Service 云操作系统,支持业界各种优秀哦技术,这些技术可能是开源免费的,也可能是商业收费的。
 
这种开放的架构使得OpenStack保持技术上的先进性,具有很强的竞争力,同时又不会造成厂商的锁定(Lock-in)。那OpenStack的这种开放性体现在哪里呢?一个重要的方面就是采用基于Driver 的框架。
 
以Cinder 为例,存储节点支持多种 volume provider ,包括 LVM、NFS、Ceph、GlusterFS、以及EMC、IBM等商业存储系统。cinder-volume为这些volume provider 定义了统一的driver 接口,volume provider 只需要实现这些接口,就可以driver 的形式即插即用到OpenStack中,下面是 cinder driver 的架构示意图:
 
 
在 cinder-volume 的配置文件  /etc/cinder/cinder.conf 中,volume_driver 配置项设置该存储节点使用哪种 volume provider的driver。下面的示例表示使用的是LVM。
 
[stack@DevStack-Rocky-Controller-31 ~]$ cat /etc/cinder/cinder.conf | grep '_dri'
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
 
 

O046、掌握Cinder 的设计思想的更多相关文章

  1. 掌握 Cinder 的设计思想 - 每天5分钟玩转 OpenStack(46)

    上一节介绍了 Cinder 的架构,这节讨论 Cinder 个组件如何协同工作及其设计思想. 从 volume 创建流程看 cinder-* 子服务如何协同工作 对于 Cinder 学习来说,Volu ...

  2. 使用Unity3D的设计思想实现一个简单的C#赛车游戏场景

    最近看了看一个C#游戏开发的公开课,在该公开课中使用面向对象思想与Unity3D游戏开发思想结合的方式,对一个简单的赛车游戏场景进行了实现.原本在C#中很方便地就可以完成的一个小场景,使用Unity3 ...

  3. spring事务管理器设计思想(二)

    上文见<spring事务管理器设计思想(一)> 对于第二个问题,涉及到事务的传播级别,定义如下: PROPAGATION_REQUIRED-- 如果当前没有事务,就新建一个事务.这是最常见 ...

  4. javascript继承机制的设计思想(ryf)

    我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例" ...

  5. 09A-独立按键消抖实验01——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献   实验目的: 1.复习状态机的设计思想并以此为基础实现按键消抖 2.单bit异步信号同步化以及边沿检测 3.在激励文件中学会使用随机数发生函数$random 4.仿真模 ...

  6. 08-FPGA状态机设计实例——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献   实验目的:1.学习状态机的相关概念 2.理解一段式.两段式以及三段式状态机的区别以及优缺点 实验平台:芯航线FPGA核心板 实验原理: 状态机全称是有限状态机(fin ...

  7. FPGA重要设计思想

    FPGA重要设计思想   1.速度和面积互换原则.以面积换速度可以实现很高的数据吞吐率,其实串/并转换.就是一种以面积换速度的思想 2.乒乓操作. 3.串/并转换的思想. 高速数据处理的重要技巧之一. ...

  8. 模仿JavaAppArguments.java示例,编写一个程序,此程序从命令行接收多个数 字,求和之后输出结果,写出其的设计思想、程序流程图、源程序代码。

    一 设计思想 首先现在file中建立一个类,并把任务名和类名写上(注意类名的大写):第二步则是参数的输入,并且定义求和变量:第三步则是对参数数据类型的要求,要把字符类型转化为整数类型并输出(这也是本道 ...

  9. Businessworks的设计思想

    Businessworks的设计思想基于一下三篇ATA: <从Eclipse平台看交易平台化>,强调微内核和扩展机制实现 <Google Guice平台模块化开发的果汁>,讨论 ...

随机推荐

  1. 3299 Humidex

    Humidex Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 23219   Accepted: 8264 Descript ...

  2. JDBC与ODBC

     ODBC(Open Database Connectivity)是一组对数据库访问的标准API,这些API通过SQL来完成大部分任务,而且它本身也支持SQL语言,支持用户发来的SQL.ODBC定义了 ...

  3. 记录学习Linux过程

    第一步fdisk-l 出错 Permission denied? ubuntu@VM-0-6-ubuntu:~$ fdisk -l fdisk: cannot open /dev/vda: Permi ...

  4. LC 794. Valid Tic-Tac-Toe State

    A Tic-Tac-Toe board is given as a string array board. Return True if and only if it is possible to r ...

  5. js手写数组Api--模拟实现常见数组Api

    数组的API经常用,但是api的内部实现还没研究过,于是就研究学习了下. 原文地址: https://www.cnblogs.com/yalong/p/11606865.html 数组的API的具体使 ...

  6. 学一学Transfomer

    017年,Google发表论文<Attention is All You Need>,提出经典网络结构Transformer,全部采用Attention结构的方式,代替了传统的Encode ...

  7. Java日志体系(五)logback

    1.1 简介 师出同门,与log4j一样,logback也是由Ceki Gülcü开发的开源日志组件,可以说是log4j的改进版:在现如今的项目中,logback的出现次数越来越多,是目前主流首选的日 ...

  8. CentOS里查看内存的使用

    转自 http://blog.csdn.net/blueman2012/article/details/6904597

  9. vue cli 3.0设置指定端口号运行

    在项目根目录创建vue.config.js文件 module.exports = { devServer: { port: 3000, // 端口 }, // lintOnSave: false // ...

  10. Win10编译Mingw

    准备工具 Windows平台 cmake mingw-x64 Linux平台(Ubuntu) sudo apt-get install git cmake cmake-gui -y 下载源码 建议直接 ...