OpenStack源码系列---nova-compute
来源:互联网 发布:自建淘宝客网站模板 编辑:程序博客网 时间:2024/05/21 19:35
nova-compute运行的节点为计算节点,虚拟机运行于计算节点上。例如对于创建虚拟机请求,nova-api接收到客户端请求后,经过nova-scheduler调度器调度,再将请求发送给某个选定的nova-compute节点,nova-compute模块经过一系列的动作之后将命令下发到真正的hypervisor进行虚拟机的创建。这篇文章,我们将分析nova-compute关键的代码流程及类关系。
我们看一下nova-compute的main函数:
在main函数中,调用service.Service.create创建一个服务,server为nova.service.Service对象,表示一个服务,然后调用service.serve(server)启动该服务,代码如下:
记住了,server变量是nova.service.Service类型的对象。我们看下这个nova.service.Service类的构造函数__init__(),如下图:
目前我们主要关注其中一个成员变量self.manager,它是nova.compute.manager.ComputeManager对象实例。经过和nova-api类似的调用流程后,nova.service.Service.start函数被调用,代码如下图:
在start函数中,调用self.rpcserver.start()启动了一个rpc服务,从打印的变量值中可以看到,和这个rpc服务关联之target的topic为compute,server值也为compute,endpoints中有一个nova.compute.manager.ComputeManager,虚拟机相关的操作之后都由这个对象来处理。如果我们继续跟踪这个rpcserver的启动代码,则可看到如下信息:
它最后是调用oslo.messaging._drivers.amqpdriver.py的listen()来监听。
我们看下nova.compute.manager.ComputeManager类的构造函数__init__(),如下图:
构造函数里通过driver.load_compute_driver函数初始化了一个成员变量self.driver,再看下load_compute_driver函数,如下图:
根据我当前环境的配置,我们看到加载后driver是一个nova.virt.libvirt.driver.LibvirtDriver对象实例,它对libvirt进行了封装,与底层的hypervisor通信。
nova-compute主要类关系图如下:
以上是个人的粗浅理解,由于细节过多这里只解析关键部分,欢迎各位同仁指正!
- OpenStack源码系列---nova-compute
- openstack nova 源码分析2之nova-api,nova-compute
- OpenStack系列讲座7:OpenStack Compute(Nova)功能分析
- OpenStack Compute(Nova)功能分析
- OpenStack Compute(Nova)功能分析
- OpenStack Compute(Nova)功能分析
- OpenStack Compute(Nova)功能分析
- Openstack 03 - Nova Compute
- OpenStack源码系列---nova-api
- OpenStack源码系列---nova-conductor
- 【OpenStack源码分析之三】Nova-Compute启动流程分析
- nova(openstack compute)架构图
- 【openstack】Nova创建虚拟机流程3-compute
- OpenStack 之 Nova Compute 的代码结构图
- 发现 OpenStack: Compute 组件 Glance 和 Nova
- rdo安装openstack-nova-compute出现问题
- OpenStack源码分析之Nova-Compute服务启动过程(icehouse)
- openstack nova 源码分析
- 第十一天:poj1013(水题,思路正确清楚,很简单)
- 位图法浅析
- UVa818 - Cutting Chains
- Android 监听WIFI
- 【排序】快速排序模板
- OpenStack源码系列---nova-compute
- 分布式系统中的RPC请求经常出现乱序的情况 写一个算法来将一个乱序的序列保序输出
- 用Java实现的2048(没UI)
- HTTP协议
- RFID第七章作业——物联网1122-08黄炜彬
- 【排序】插入排序模板
- 增大JVM的内存
- 动态规划
- 关闭UIScrollView的自动适应控制器布局