Openstack Nova(七)----Instance 创建(nova WSGI)

本文详细介绍了Openstack Nova在创建Instance时涉及的WSGI服务,包括Nova API如何启动HTTP服务,WSGIService的运作,Loader加载应用,以及URL路由分发的过程。内容涵盖配置文件、Loader的实现、URLmap_factory和pipeline的定制,揭示了Nova如何处理不同URL请求。
摘要由CSDN通过智能技术生成

古人云: 三思而后行

但对我们来说, 有什么地方值得去思呢?

任何事情, 如果能够身临其境,了解其来龙去脉,肯定是最好的学习方式。但是在代码走读时, 人不能像机器一样,去把代码都运行一次, 亲身去感受下。但是我们能在脑袋里运行代码, 但这里也有问题, 代码多了, 脑袋就不够用了,这个时候就要学会思。

不再废话, 回到我们的问题。上一章中, nova 命令行已经发送了一个基于HTTP的RESTful请求过来, 那么在nova服务中,nova需要干些什么呢?

既然是HTTP, 那么第一步,就是需要一个HTTP服务器, 实现HTTP服务器的方式有很多, 那么Openstack中又是怎么实现的呢?

在Python中, 对于WEB服务有一个标准,PEP333 Python Web Server Gateway Interface v1.0。Openstack就是根据这个标准来实现的。

下面我们就来看看nova的实现

入口

cat /usr/lib/systemd/system/openstack-nova-api.service
[Unit]
Description=OpenStack Nova API Server
After=syslog.target network.target

[Service]
Type=notify
Restart=always
User=nova
ExecStart=/usr/bin/nova-api

[Install]
WantedBy=multi-user.target

可以看出, 其执行文件是/usr/bin/nova-api, 继续打开这个文件cat /usr/bin/nova-api

#!/usr/bin/python
# PBR Generated from u'console_scripts'
import sys

from nova.cmd.api import main


if __name__ == "__main__":
    sys.exit(main())

main

在nova.cmd.api中, main函数的代码如下,可以看出,就是分析了下参数,然后就启动了HTTP服务。在启动HTTP服务时, 首先创建了一个WSGIService对象, 这是一个基于WSGI标准的WEB服务器类。

def main():
    config.parse_args(sys.argv)
    logging.setup("nova")
    utils.monkey_patch()

    launcher = service.process_launcher()
    #这里启动了好几个服务, 那么都有那些服务呢?
    for api in CONF.enabled_apis:
        should_use_ssl = api in CONF.enabled_ssl_apis
        if api == 'ec2':
            server = service.WSGIService(api, use_ssl=should_use_ssl,
                                         max_url_len=16384)
        else:
            server = service.WSGIService(api, use_ssl=should_use_ssl)
        launcher.launch_service(server, workers=server.workers or 1)
    launcher.wait()

从代码中,我们看到, 启动了不止一个服务,那么到底启动了那几个服务呢?

$cat /etc/nova/nova.conf | grep enabled_apis
enabled_apis=ec2,osapi_compute,metadata

nova api事实上启动了三个服务

ec2: 与亚马逊兼容的API
osapi_compute: Openstack自己的API
metadata: 实例启动时的metadata服务

先不管这些服务的具体作用, 这不是这次的重点, 以后的内容中, 会讲到这些。现在看看我们今天的重点WSGIService。

WSGIService

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值