neutron-server源码分析总纲

背景:本文以neutron的12.0.0版本为例进行源码分析。

neutron-server作为Neutron的控制中心,主要对Neutron四大类资源进行管理。从实现架构上可以粗略分为两大模块:neutron-api和RPC。这么分类的依据来自于neutron-server的启动方法,其资源的初始化基本都是在start_api_and_rpc_workers这个方法中完成的。

该方法的源码如下所示:

def start_api_and_rpc_workers(neutron_api):
    try:
        worker_launcher = service.start_all_workers()
        pool = eventlet.GreenPool()
        api_thread = pool.spawn(neutron_api.wait)
        plugin_workers_thread = pool.spawn(worker_launcher.wait)
        api_thread.link(lambda gt: plugin_workers_thread.kill())
        plugin_workers_thread.link(lambda gt: api_thread.kill())
        pool.waitall()
    except NotImplementedError:
        neutron_api.wait()

为了简洁,删除了日志等内容。在这个方法中生成了两个线程,分别是api_thread和plugin_workers_thread。api_thread与neutron-api线程(在调用方法中已创建)相关联,即neutron-server的wsgi部分。这部分内容也是接下来需要讲解的重点;而plugin_workers_thread通过名称即可猜测出它必定与plugin插件相关,事实上它主要用于RPC服务。如果这两部分内容放在一篇博文进行讲解,不仅不利于阅读,也不利于理解整个Neutron(因为包含的信息太多),所以关于RPC的内容将会放到下一章节进行讲解。

一 、neutron-server是什么

弄清楚这个问题,我们才能明白neutron-server为什么要如此设计。

Neutron是OpenStack项目中负责提供网络服务的组件,它基于软件定义网络的思想,实现了网络虚拟化下的资源管理。Neutron 的设计目标是实现“网络即服务(Networking as a Service)”,在设计上遵循了基于 SDN 实现网络虚拟化的原则,在实现上充分利用了 Linux 系统上的各种网络相关的技术。

  • Neutron功能

    • 二层交换:支持多种虚拟交换机,一般使用Linux Bridge和Open vSwitch实现。

    • 三层路由:利用Linux协议栈实现

    • 负载均衡:通过HAProxy实现

    • 防火墙:使用iptables实现

    • VPN 等等

  • 网络类型

    • Local:本地网络,主要用于测试

    • Flat: Falt网络,只有一个广播域

    • VLAN:可以跨节点,私有云使用较多

    • VXLAN: 大二层网络,能够克服vlan和物理网络基础设施的限制,公有云使用较多。

    • GRE: 与VXLAN类似

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值