NOVA-API服务的启动流程

原文地址:

http://wenku.baidu.com/view/801fae0dcc175527072208ed.html

 

NOVA-API服务的启动流程
1. bin.nova-api

1. utils.default_flagfile()
获取nova.conf配置文件路径,并将其放入sys.argv环境变量中。
2. flags.FLAGS(sys.argv))
调用FlagValues的__call(self,argv)函数,对sys.argv进行“getopt”处理。(详见Nova-Flags分析)
3. logging.setup()
进行nova-api的日志设置。(详见Nova-Logging分析)
4. utils.monkey_patch()
该函数中根据monkey_patch宏来确定是否载入相应模块,默认为false
5. servers = []
for api in flags.FLAGS.enabled_apis:
servers.append(service.WSGIService(api))
调用WSGIService初始化(ec2', 'osapi两个服务)server。(详见2.1节)
6. service.serve(*servers)
service.wait()启动服务.(详见2.2)
2. nova.service
1. WSGIService.__init__()函数
a. self.name = name
self.name为'ec2'或'osapi'
b. self.loader = loader or wsgi.Loader()
创建一个loader实例,用来装载api-paste.ini配置文件。(详见3.1)
c. self.app = self.loader.load_app(name)
利用paste.deploy第三方软件载入配置文件中指定的name应用。(详见3.2)
d. self.host = getattr(FLAGS, '%s_listen' % name, "0.0.0.0")
从标记中获取主机的地址
e. self.port = getattr(FLAGS, '%s_listen_port' % name, 0)#ec2=8773,osapi=8774
从标记中获取服务端口的地址
f. self.server = wsgi.Server(name, self.app, host=self.host, port=self.port)
利用上面获得参数创建一个wsgi服务实例。(详见3.3)
2. serve()函数
a. _launcher = Launcher()
创建一个Launcher实例。该实例用来创建eventlet线程池并启动服务。
b. _launcher.launch_server(server)
线程池中启动服务server,并最终调用server的strart()函数启动服务。即启动wsgi服务实例的start()函数。(详见3.5)
3.nova.wsgi
1. Loader.__init__()
a. config_path = config_path or FLAGS.api_paste_config
self.config_path = self._find_config(config_path)
从标记中获取配置文件的名字,并利用_find_config函数找到该文件所在的路径保存到self.config_path中。
3. Loader.load_app
a. return deploy.loadapp("config:%s" % self.config_path, name=name)
利用paste.deploy第三方库载入配置文件指定的app。
4. Server.__init__()
a. 该函数仅仅初始化参数,配置日志等参数,实例化该类。
5. Server.start(self, backlog=128)
a. self._socket = eventlet.listen((self.host, self.port), backlog=backlog)
利用eventlet.listen创建一个socket监听宿主机的端口。
b. self._server = eventlet.spawn(self._start)
线程池中调用Server._start()函数启动服务。详见(3.6)
6. Server._start()
a. eventlet.wsgi.server(self._socket, self.app, custom_pool=self._pool, log=self._wsgi_logger)
利用eventlet.wsgi.server函数启动wsgi服务监听宿主机的端口号。直到该服务退出,利用Server.wait()函数回收资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值