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调用详细的虚拟化平台。

所以我们就非常easy得出结论,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 Compute 的代码结构图

    nova-compute 的代码结构图 如上图所看到的, 类图中最重要的三个Category Manager: 核心的业务类.提供实际的业务操作.比如启动虚拟机等等. Service: 每一个serv ...

  2. OpenStack:安装Nova

    >安装Nova1. 安装# apt-get install nova-novncproxy novnc nova-api \  nova-ajax-console-proxy nova-cert ...

  3. OpenStack之Nova模块

    Nova简介 nova和swift是openstack最早的两个组件,nova分为控制节点和计算节点,计算节点通过nova computer进行虚拟机创建,通过libvirt调用kvm创建虚拟机,no ...

  4. Openstack之Nova创建虚机流程分析

    前言        Openstack作为一个虚拟机管理平台,核心功能自然是虚拟机的生命周期的管理,而负责虚机管理的模块就是Nova. 本文就是openstack中Nova模块的分析,所以本文重点是以 ...

  5. 1898 ERROR nova.compute.manager

    2018-06-10 21:03:54.045 1898 ERROR nova.compute.manager [instance: 15a6c26f-b8af-4a3e-a3df-8552c16e0 ...

  6. openstack setup demo Compute service

    本文包含以下部分 Compute service overview Install and configure controller node Prerequisites Install and co ...

  7. OpenStack核心组件-nova计算服务

    1. nova介绍 Nova 是 OpenStack 最核心的服务,负责维护和管理云环境的计算资源.OpenStack 作为 IaaS 的云操作系统,虚拟机生命周期管理也就是通过 Nova 来实现的. ...

  8. Openstack计算Nova组件

    欢迎来到虚拟机的世界,如果我们将Openstack环境里运行在各个无力节点上的各种服务看座生命体,而不是死的指令集合,那么就是一个虚拟机的世界. Openstack的计算组件,也就是Nova项目实现了 ...

  9. openstack核心组件——nova计算服务(7)

    云计算openstack核心组件——nova计算服务(7)   一.nova介绍:       Nova 是 OpenStack 最核心的服务,负责维护和管理云环境的计算资源.OpenStack 作为 ...

随机推荐

  1. 理解JavaScript中的事件流

    原文地址:http://my.oschina.net/sevenhdu/blog/332014 目录[-] 事件冒泡 事件捕获 DOM事件流 当浏览器发展到第四代时(IE4和Netscape Comm ...

  2. animate()--jq动画

    2参数,样式,时间 $(this).animate({top:"100px","opacity": "0"},1000) 3参数,样式,时间 ...

  3. osgi实战学习之路:2. maven+maven-bundle-plugin+karaf搭建osgi之HelloWorld

    环境准备: jdk版本号 jdk:1.7 karaf: 版本号:apache-karaf-3.0.1 下载地址: http://pan.baidu.com/s/1qWM4Y1u http://kara ...

  4. FaceBook推出的Android图片加载库-Fresco

    FaceBook推出的Android图片加载库-Fresco 原文链接:Introducing Fresco: A new image library for Android 译者 : ZhaoKai ...

  5. Install Tomcat 7 on CentOS, RHEL, or Fedora

    linux下的 Tomcat 安装: http://www.davidghedini.com/pg/entry/install_tomcat_7_on_centos

  6. LaTeX排版设置图表的位置 Positioning images and tables

    Positioning images and tables LATEX is an editing tool that takes care of the format so you only hav ...

  7. mac活动监视器 的含义

    应用内存:应用所使用的内存数量. 联动内存:系统运行需要的内存.联动内存不能缓存且必须存放在内存中,所以不能被其他应用使用. 压缩:为腾出更多内存而压缩的内存数量.当电脑接近其最大内存能力时,内存中的 ...

  8. sonar使用故障Unable to load component class org.sonar.scanner.report.ActiveRulesPublisher/Unable to load component interface org.sonar.api.batch.rule.ActiveRules: NullPointerException

    nginx后两个sonar负载分担 解决办法 Credit to @teryk-sonarsource-team, just making it an answer: Delete the direc ...

  9. 关于QtCharts中的映射器与模型的使用

    简述 本文章基于博主在使用QtCharts中一些经验总结,相关了Qt类有QVXYModelMapper,CustomTableModel(一个继承了QAbstractTableModel的类,用于实现 ...

  10. session劫持技术

    目录: 0×00 应用程序认证设计背景0×01 常规攻击思路及缺陷0×02 利用应用程序设计缺陷进行Session劫持的攻击原理0×03 Session劫持的大致思路及意义0×04 如何防御这种攻击 ...