1.前言

很早之前就开始着手写Openstack 系列的博客了,在写了总体架构和Keystone之后,准备写Nova,但是每次写到一半,自己心里就觉得不踏实,因为似乎我并没有真正理解Nova,或者说根本就没理解Compute的真正意义。Nova 或许并不仅仅只是Openstack整体架构中的一个组件那么简单。今天准备开始写Nova,但是我依然觉得距离完全理解Nova还有一段距离,但我打算先写出来,读者可以一起探讨。

2.背景

之前与同事在讨论云计算的时候,他说云计算其实是一个伪命题,因为根本不存在什么云,这些概念是说给外行或者不懂技术的客户听的。云本质上就是一个操作系统,作用是调度各类基础资源,以服务的形式暴露出来。想想我们的计算机操作系统,不也是把硬盘、网络、CPU这些作为基础资源暴露出来,供上层应用来调用嘛.我对这个观点表示深深地认同,真正的专家是把高深的概念用通俗的方式解释出来,解开云计算神秘的面纱,我们再次审视我们每天所谓的云,其实就是一个大型的分布式、高可用的基础资源管理系统。云计算的计算概念是如何理解呢?个人认为计算即调度,云操作系统不仅仅要能够管理资源,而且必须知道何时提供多少资源,这样才能够让云智能起来,说得通俗点就是资源的调度过程,用一个高大上的词汇就是智能。比如在Openstack中,如果集成了KVM和VMWare,那么用户在创建资源的时候,Openstack必须知道哪个节点资源的占用情况,从而讲任务分配到空闲的节点,甚至能够在资源池之间自动漂移。这才是计算最本质的东西。

当然Nova 还需要管理实例的生命周期的各个状态,比如虚拟机的创建,挂起,停止,重启等等。不过目前不支持动态扩容,因为扩容需要重启实例,这需要高可用特性的支持.

3.Nova

Nova 是Openstack整个体系中的计算组件。从背景一节中,我提出了计算即调度的概念。那么Nova 必须要与存储,网络等模块打交道(当然还有keystone),与此同时,Nova 并没有具体实现虚拟化(具体的虚拟化是KVM,VMWare,Xen),Nova 通过librivt调用具体的虚拟化平台。所以我们就很容易得出结论,nova的架构如下:

总结下来,nova的主要组件如下:

- API Server (nova-api)

- Message Queue (rabbit-mq server)

- Compute Workers (nova-compute)

- Network Controller (nova-network)

- Volume Worker (nova-volume)

- Scheduler (nova-scheduler)

下面逐一介绍下各个组件的基本功能:

API Server(nova-api)

API Server对外提供一个与云基础设施交互的接口,也是外部可用于管理基础设施的唯一组件。管理使用EC2 API通过web services调用实现。然后API Server通过消息队列(Message Queue)轮流与云基础设施的相关组件通信。作为EC2 API的另外一种选择,OpenStack也提供一个内部使用的“OpenStack API”。

Message Queue(Rabbit MQ Server)

OpenStack 节点之间通过消息队列使用AMQP(Advanced Message Queue Protocol)完成通信。Nova 通过异步调用请求响应,使用回调函数在收到响应时触发。因为使用了异步通信,不会有用户长时间卡在等待状态。这是有效的,因为许多API调用预期的行为都非常耗时,例如加载一个实例,或者上传一个镜像。

Compute Worker(nova-compute)

Compute Worker处理管理实例生命周期。他们通过Message Queue接收实例生命周期管理的请求,并承担操作工作。在一个典型生产环境的云部署中有一些compute workers。一个实例部署在哪个可用的compute worker上取决于调度算法。

Network Controller(nova-network)

Network Controller 处理主机地网络配置。它包括IP地址分配、为项目配置VLAN、实现安全组、配置计算节点网络。

Volume Workers(nova-volume)

Volume Workers用来管理基于LVM(Logical Volume Manager)的实例卷。Volume Workers有卷的相关功能,例如新建卷、删除卷、为实例附加卷,为实例分离卷。卷为实例提供一个持久化存储,因为根分区是非持久化的,当实例终止时对它所作的任何改变都会丢失。当一个卷从实例分离或者实例终止(这个卷附加在该终止的实例上)时,这个卷保留着存储在其上的数据。当把这个卷重附加载相同实例或者附加到不同实例上时,这些数据依旧能被访问。

一个实例的重要数据几乎总是要写在卷上,这样可以确保能在以后访问。这个对存储的典型应用需要数据库等服务的支持。

Scheduler(nova-scheduler)

调度器Scheduler把nova-API调用映射为OpenStack组件。调度器作为一个称为nova-schedule守护进程运行,通过恰当的调度算法从可用资源池获得一个计算服务。Scheduler会根据诸如负载、内存、可用域的物理距离、CPU构架等作出调度决定。nova scheduler实现了一个可插入式的结构。

当前nova-scheduler实现了一些基本的调度算法:
◾随机算法:计算主机在所有可用域内随机选择
◾可用域算法:跟随机算法相仿,但是计算主机在指定的可用域内随机选择。
◾简单算法:这种方法选择负载最小的主机运行实例。负载信息可通过负载均衡器获得。

关于这部分的源码解读,请参考博客:

1) Scheduler 源码解析

http://blog.csdn.net/gaoxingnengjisuan/article/details/15615743

2)Nova-Schedluer 的调度

http://lynnkong.iteye.com/blog/1699413

这里着重需要强调下,Nova 虚拟机的创建,启动过程,请参考这篇:

1)openstack之虚拟机的创建流程

http://www.tuicool.com/articles/MbIRN3

2)openstack 虚拟机启动

http://www.aboutyun.com/thread-6882-1-1.html

4.总结

Nova 模块是非常核心的部分,理解起来需要结合架构设计来理解,注意与其他模块的交互。



Openstack 03 - Nova Compute相关推荐

  1. 关于在openstack执行nova get-vnc-console命令,无法得到vnc url并提示服务器超时的问题描述...

    情景描述: 在一台openstack的控制节点上执行nova get-vnc-console UUID novnc命令,无法输出带有token的NoVNC url地址,添加debug选项再次运行该命令 ...

  2. OpenStack之Nova分析——Nova API服务

    Nova是OpenStack中最核心的组件,可以说OpenStack中的其它组件都是为Nova服务的.所以Nova也是OpenStack最复杂的组件.Nova服务由多个子服务组成,这些子服务通过RPC ...

  3. openstack 安装 Nova

    openstack Q版 服务器系统centos7 控制端IP:192.168.50.31 计算端IP:192.168.50.32 Nova 下面所有操作全在控制端 # 登录 mysql -u roo ...

  4. OpenStack中 Nova的Cell架构模式介绍

    目录 1,什么是cell ?为什么有cell ? 2,cell的两种架构模式及工作原理 3 , Cell v2实现的原理 1,什么是cell ?为什么有cell ? 当openstack nova 集 ...

  5. 在Openstack上部署compute节点上时,开启服务openstack-nova-compute.service无法启动的解决方法

    在Openstack上部署compute节点上时,开启服务openstack-nova-compute.service无法启动的解决方法 参考文章: (1)在Openstack上部署compute节点 ...

  6. openstack 用nova API 指定 compute node 创建 instance

    感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免,欢迎指正! 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...

  7. OpenStack 之Nova添加扩展API流程,附带资源的查找功能

    例子中涉及到SQLAlchemy 得相关操作,可以参考 上一随笔 Openstack 中规定,扩展openstack得api有两种方式 创建新的WSGI 资源 扩展原有得WSGI资源得控制器(我得理解 ...

  8. OpenStack 的Nova组件详解

    Open Stack Compute Infrastructure (Nova) Nova是OpenStack云中的计算组织控制器.支持OpenStack云中实例(instances)生命周期的所有活 ...

  9. OpenStack之Nova(T版)

    目录 一.概述 二.Nova系统架构 一.API 二.Scheduler 一.选择计算节点 二.调度器类型 三.过滤器 三.compute 四.conductor 五.PlacementAPl 六.c ...

最新文章

  1. 伟世盾安助国电高级培训中心实现一网双管
  2. Python_位_成员_身份运算符
  3. Excel exportExcel.cs 一个生成.xls文件的例子
  4. (转)更新Java final常量后,请重新编译你的class
  5. python数据类型可变和不可变_Python——可变和不可变类型数据
  6. 入驻支付宝开放平台并创建应用的基本流程
  7. python网站后台_Python 网站后台扫描脚本
  8. OC-NSFileManager和NSFileHandle的使用
  9. all方法 手写promise_试题-手写实现一个 promise.all - 拿OFFER
  10. 计算机视觉中的多视图几何_基于深度学习的视觉三维重建研究总结
  11. matlab 等高线_MATLAB作图实例:39:更改等高线图的填充颜色
  12. 虚构合同、虚开发票套取高校配套科研经费,一副教授被公诉!
  13. php-fpm安装包_linux下安装php php-fpm(转载)
  14. 微博返回顶部按钮实现方法大剧透
  15. ubuntu搭建无盘服务器,ubuntu配置无盘服务器
  16. 电动汽车动力电池SOC估算模型电池参数辨识模型【10例】
  17. leveldb的sstable-ldb解析
  18. 关于显著性检验,你想要的都在这儿了!!(基础篇)
  19. 基于用户体验的手机产品交互设计原则
  20. ios 检测是否联网_iOS 判断当前网络状态的三种方法

热门文章

  1. HP3055提示 soanner bulb warming up
  2. 【深度学习】网络训练的原理:什么是梯度下降?学习率的作用是什么?
  3. ACM-ICPC 2018 南京赛区网络预赛 - AC Challenge(状压DP)
  4. signature=501807407682dd47ffe7345fc7b18d2e,Signature-Free Intrusion Detection
  5. 美团—大众软件测试开发校招题
  6. BOM--系统对话框
  7. Adobe Bridge 2021最新中文版来了!!!!
  8. 小学计算机打字比赛简报,育瑞实验小学打字比赛活动通知
  9. 2022-06-29 银河麒麟V10 Nginx-rtmp+FFmpeg流媒体服务器环境搭建
  10. SAP ABAP ME23N标准采购订单打印输出配置开发