OpenStack Neutron概述
打算写一个系列OpenStack Neutron的介绍。计划好的题目放在了一个思维导图里面:Neutron Topic Tree。可以从这个图里面的叶子节点直接点到相应的文章(如果已经写了的话)。我们这次在这里:
网络上已经有很多的介绍OpenStack Neutron的内容,例如前同事刘世民的Neutron 理解 系列。OpenStack的官方文档也非常不错Welcome to Neutron’s documentation!。
作为曾经向OpenStack Neutron提交过一些代码[1-2],并且围绕OpenStack工作了5年的人,我也将结合自己平时的工作的经验,将自己从代码和应用的一些理解分享出来,希望给大家在茶余饭后,地铁出租时间,不一样的收获。
什么是OpenStack Neutron
首先,Neutron是OpenStack的网络服务项目。目前来看,脱离了OpenStack,它什么也不是,也貌似也没有独立使用的应用。
其次,这是一个python的软件项目。它的北向有自己的REST API,它在中间有自己的业务逻辑层,它有自己的DB,有自己的用于进程间通讯的消息机制。从软件架构的角度来说,这是一个跟大多数软件,架构类似的一个软件项目。
第三,Neutron是不是SDN?首先我认为是的,其次,我认为这个问题不重要。一方面,Neutron可以是一个虚拟网络的管控平台,这就符合SDN的特性,另一方面,Neutron可以是其他SDN的API层,用来接入到OpenStack,这又类似SDN应用层的概念。不过,纠结是不是SDN没有必要。
再来进一步看,OpenStack Neutron是一个多进程运行的项目。常见的进程包括了neutron-server和neutron-xxx-agent们。通常,Neutron是一个分布式部署的模式,也就是说不同的进程部署在不同的操作系统里面。进程间同步通过AMQP,通常是rabbitmq,早期QPID也比较流行。
所以总的来说,Neutron 是一个用python写的分布式软件项目,用来实现OpenStack中的网络服务。
Neutron的发展历史
Neutron并不是早的OpenStack项目。早期的OpenStack里面,网络是由nova的nova-network模块实现。之后随着网络功能日趋庞大,一个新的项目叫做Quantum被创建,并且与nova-network并行存在了好几个版本。之后发现Quantum与一家公司重名了,因此改名叫做Neutron。记得知乎曾经有人提问为什么Quantum改名到Neutron?为什么的原因就在这了。
至于为什么改到Neutron,因为OpenStack基金会决定沿用原子物理的命名方式,从Quantum(量子)改名到Neutron(中子),这就是名字由来。为了描述简单,接下来我用Neutron来指定OpenStack的网络项目。
大型开源项目大多数都不是由自由职业者掌控,换句话说,大部分都是由公司掌控。Neutron也不例外,在OpenStack Neutron的发展过程中,Cisco,HPE,Mirantis都曾经控制过Neutron。
Neutron在发展过程中,曾经经历过一个膨胀期,也就是所有的功能都向Neutron集成,导致代码库变得很庞大并且不易管理。许多软件项目似乎都有这个问题,有的后越做越大,以至难以开发。不过好在Neutron经过了连续几个版本的重构和代码剥离,现在的Neutron只维护核心功能,在其他方面:
- 厂商特殊的代码由厂商维护,如networking-ovn,vmware-nsx
- 功能特殊的代码由子项目维护,如networking-sfc,networking-l2-gateway
所以从软件架构的角度来说,这是一个自我迭代过的,值得学习借鉴的软件架构。在我后面的介绍里面,会提及Neutron的软件架构。
后
Neutron作为OpenStack核心项目的地位基本不可能再变了。所以如果你的工作与OpenStack有接触,那么你也是躲不掉Neutron。 在接下来的系列文章里面,一起来看看作为一个软件项目,作为OpenStack的网络项目,作为一个虚拟网络的管控平台,Neutron到底是怎么样子的。
[1] Stackalytics | Hong Hui Xiao contribution to neutron
[2] Stackalytics | Hong Hui Xiao contribution to neutron
相关文章