neutron-server 启动流程
环境:ocata版本,centos7
预备知识:
WSGI:一个可以在python web服务中可以广泛使用的API
PASTE:Paste Deployment用于发现和配置WSGI Application和Server,有了Paste Deployment,WSGI applications只需向其用户提供一个单独的入口loadapp函数,然后用户调用这个函数 就可以使用已经开发好的WSGI application,同时,由于只提供了一个入口,WSGI的开发者 也不再需要将App的具体实现暴露给用户,大大简化了整个开发过程。
Webob:提供了一系列的装饰器来将函数包装成WSGI应用。
架构功能划分
这张图片只是讲述了整体的框架
整体分析:
1)位于最上层的Neutron server负责接收来自外部服务的RESTful API请求
2)位于中间的Neutron plugin负责传达指令
3)位于下层的Neutron agent 负责执行具体任务和操作
组件图
图片来源于网络
框架分析
Neutron-server
Neutron只有一个主要的服务进程neutron-server,它运行在网络控制节点提供RESTfulAPI作为访问Neutron的入口。Neutron-server接收到的用户HTTP请求最终由遍布于计算节点和网络节点的各种agent来完成。
主要代码:/neutron/server
Neutron API
Neutron将基于各种虚拟网络资源得到的API资源分成核心资源(Core API)和扩展资源(Exten API)两种,Core API只对应于L2层的network、subnet、port、subnetpool四种抽象资源,其余的各层抽象都属于Exten API的范围。
代码目录:/neutron/api目录
Neutron Plugin
有core plugins 和service pulgins组成。
Core plugins:
提供基础二层网络虚拟网络支持,只要是ML2 plugin,
ML2 plugin不仅实现了network/subnet/port/subnetpool这四个核心资源和包括port binding等在内的部分扩展资源。还实现了网络拓扑类型(Flat、VLAN、VXLAN、GRE)和底层虚拟网络(Linux bridge、Open vSwitch)分离的机制。并分别通过Driver的形式扩展。其中,不同的网络拓扑类型对应着type dirver,由type manager 管理,不同的网络实现机制对应着Machansim Driver,有Mechanism Manager管理。
代码目录:neutron/plugins
Service plugin :
实现除network/subnet/port/subnetpool以外的资源。如FWaas、LBaas、VPNaas等高级服务。
代码目录:neutron/services
Message Queque
使用MessageQueque的一个模块Oslo.Messaging,Oslo.Messaging支持的MQ组件有Rabb