zoukankan      html  css  js  c++  java
  • OpenStack源码系列---nova-compute

    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主要类关系图如下:



    以上是个人的粗浅理解,由于细节过多这里只解析关键部分,欢迎各位同仁指正!

  • 相关阅读:
    RedHat的定制安装
    Linux系统概述
    嵌入式学习方法
    mysql联合查询
    mysql之count
    memcached安装
    css书写规则
    nginx的fastcgi_param参数详解
    array_2.array_rand
    array_1.array_map
  • 原文地址:https://www.cnblogs.com/woshiweige/p/4518434.html
Copyright © 2011-2022 走看看