neutron 启动流程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了neutron 启动流程相关的知识,希望对你有一定的参考价值。
参考技术A neutron-server是neutron的核心组件之一,负责直接接受外部请求(包括CLI API,REST API等),然后调度后端相应的plugin进行处理。启动机制:
neutron-server的本质是一个Python Web Server Gateway Interface(WSGI),是通过eventlet lib来实现服务的异步并发模型的。实际工作时,通过'serve_wsgi'启动点(Entry point)来构造了一个NeutronApiService实例,通过该实例生成Eventlet,Greenpool来运行WSGI app并回应客户端请求。
研究之前,首先需要先了解下Entry point的概念。
Entry point:
neutron的所有服务(services)的启动点都定义在setup.cfg的"console_scripts"小节中,这些启动点直接指向各个服务的main()函数,这些函数实际位于neutron/cmd/...目录下。
如果一个service使用eventlet lib,服务本身不用直接调用eventlet.monkey_patch()函数,只需要把相应main()函数放到neutron/cmd/eventlet/...目录下。这样,Eventlet lib启动时,会自动启动各个服务。
这个函数通过serve_wsgi()启动了一个wsgi服务,该服务的启动分析(主要是启动neutron.api.v2.base的Controller)下一节详细介绍。同时创建一个GreenPool,从线程池中生成一个api_thread用来监听api命令,当命令到达时,通过wsgi服务路由到neutron.api.v2.base中的Controller中去处理;
另外还生成一个或多个plugin_workers_thread,这个线程和rpc works关联,并监听topics中的消息队列的请求,完成neutron内部组件之间的通信。
以上是关于neutron 启动流程的主要内容,如果未能解决你的问题,请参考以下文章
nova boot代码流程分析:VM启动从neutron-dhcp-agent获取IP与MAC