標籤:

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

推薦閱讀:

BGP漫談
SDN 技術指南(二):OpenFlow
SDN閑聊
OpenStack容器網路項目Kuryr(libnetwork)
SDN再談

TAG:OpenStack | SDN |