軟件定義網絡(SDN,一般認為是Software Defined Networking)在數年前興起,并迅速引起了軟件定義的風潮,將軟件定義的理念應用到各個領域,如:軟件定義計算(SDC,Software Defined Compute)、軟件定義存儲(SDS,Software Defined Storage),還有軟件定義數據中心(SDDC,Software Defined Datacenter)、軟件定義環(huán)境(SDE,Software Defined Environment)等等等等。
為什么軟件定義的概念首先在網絡領域得到應用呢?網絡和計算、存儲不同——實際上,計算和存儲非常相像,稍微大型的存儲設備都需要一定的運算能力來實現相當部分(如果不是所有部分的話)的存儲功能,因此它們的架構實際上有很多相似的部分,這也是融合系統乃至超融合系統得以很快實現的原因:本質上我們的(計算)服務器和存儲服務器沒有區(qū)別。
實質上說,所有的網絡設備都是在硬件上運行網絡操作系統,然而在過去數十年來,不管是硬件上,還是在軟件上,網絡設備的互操作性都很低,不同公司的產品具有不同的設置界面/命令行,而即使是同一公司的產品,不同的產品線可能也會具有不同的操作系統乃至操作界面。曾幾何時,配置網絡設備本身就形成了一個職業(yè):網絡管理員。有些糟糕的是,過去了這么多年,即使是最新的設備,也仍然需要使用效率低下的配置方法,至多是提供了載入配置文件的手段。-
隨著數據中心規(guī)模的變大,網絡規(guī)模也在變大,而網絡設備的難以應用和管理顯然是一個限制。而SDN——軟件定義網絡——最早就是為了解決這個配置的問題:通過一個集中的控制器,管理著多個特殊的交換機,從而實現網絡控制、管理的功能。SDN架構最早的設想是用于網絡安全領域,后來擴展到通用網絡設備領域,并發(fā)展為OpenFlow規(guī)范。不管是原始的OpenFlow,還是后來興起的OpenDaylight、NFV或者ONSOS,這些典型的軟件定義網絡都具有相似的架構,它們都將網絡劃分為三個名字可能有所不同但功用相似的平面:Data Plane(數據平面)、Control Plane(控制平面)和Application Plane(應用平面),并在控制平面實現集中式的控制器,從而提供給用戶一個快速的、統一的、方便的配置管理界面,更進一步地,通過控制平面提供的API,用戶可以在應用平面進行開發(fā),從而實現全自動化的網絡架構控制。
顯而易見,全自動化的網絡配置和管理相對以往的命令行或者尋常的GUI配置方式是一個巨大的進步。在出現之后,只經過了數年,SDN就迅速成為了一股浪潮。到2014年為止,大部分傳統的廠商也已經開始生產SDN相關的設備,并且很多軟件廠商也開始進入這個市場——主要是Hypervisor廠商,因為Hypervisor可以和虛擬交換機vSwitch結合,從而掌握了網絡與計算之間的邊界,可以很容易通過SDN實現復雜靈活的網絡功能。
軟件定義網絡將更強大的計算屬性引入了網絡領域。在之前,網絡和計算設備(服務器)、存儲設備(存儲控制器/服務器)不一樣,從外觀上看,網絡設備有較大的硬件成分屬于網絡接口,并且,網絡設備最基本的功能就是進行網絡傳輸。因此,對IO的性能、延遲要求比較高,因此網絡產品傾向于使用硬件來實現各種各樣的功能。通常,在不考慮SDN的情況下網絡設備的芯片內部都會劃分Data Plane(數據平面)和Control Plane(控制平面),如加密等功能通過各種額外的數據平面硬件模塊來實現,對應的控制平面則采用較弱的RISC架構CPU,如網絡芯片中曾占據統治地位的MIPS架構,以及現在家用芯片上盛行的ARM架構,和偶爾可以看到的PowerPC架構,還有一些廠商專有的架構。一般來說網絡分層中越處于高層協議的設備,其CPU就會越強,因為需要的控制邏輯會越多,簡單的L2交換機對CPU的需求很低,而處于L1的中繼器干脆就是個純硬件設備。
總體來說傳統網絡設備是偏向數據包收發(fā)功能的硬件設施,到了軟件定義時代,網絡設備需要更多的計算能力來實現軟件部分的功能,也就是更偏向控制邏輯部分,例如要實現SDN架構的南向API,在ONF中就是OpenFlow,在OpenDaylight中則更復雜,有OpenFlow,也有NETCONF/YANG等等,還要實現通過南向API接受SDN控制器發(fā)來的指令,總之,SDN中,即使是處于Data Plane的交換機等設備相比以往也需要更強大的計算能力,而處于Control Plane中的SDN控制器干脆就是一個(或者一組)運行在服務器上的虛擬機。
軟件定義網絡提供了一個使用通用服務器代替舊有的專用硬件的機會。軟件定義網絡并未要求數據平面的網絡設備一定要運行在通用服務器上,不過使用通用服務器的好處就在于,它和計算服務器、存儲服務器可以是沒有什么區(qū)別的,或者甚至就是一樣的,因此它的成本可以相當低,不管是CAPEX還是OPEX。通用服務器可以提供所需要的強大計算能力,來充分滿足Control Plane層的需要。在現下一些完全虛擬化的環(huán)境當中,SDN的Data Plane通過虛擬交換機來實現,實質上運行于Hypervisor當中,Control Plane就是一臺虛擬機,VMware vSphere/NSX、Hyper-V/Hyper-V vSwitch和KVM/Open vSwitch的方案都是一樣,大部分的較為復雜網絡功能都由通用的服務器擔當了,需要的僅僅是一些二層的接入交換機。
采用通用服務器的另一個好處是開發(fā)很簡單,這牽涉到了生態(tài)系統的問題,生態(tài)系統越大,那么開發(fā)成本(包括人員費用)、維護成本以及管理都比專有系統要低。
通過在《數據中心2013:硬件重構與軟件定義》對軟件定義網絡的介紹,SDN可以讓網絡更加靈活、易于管理已經沒有疑問了,使用通用服務器做Control Plane也已經成為了廣泛的現實,但最關鍵的問題還有一個:數量龐大的Data Plane設備。Data Plane需要性能,專有系統是為了專門的目的設計和優(yōu)化的,通用的系統則要面對著更廣泛的應用,實際上是一個對“通用”這個目標做的專門設計。例如,在四五年前,X86被認為不適用于網絡架構當中的Data Plane部分,因為其IO能力很受限制。這有指令集的緣故,也有內存接口、IO接口以及內部處理邏輯的緣故。
但是情況很快有了變化,從Nehalem-EP(至強5500)開始,英特爾的服務器處理器開始集成內存控制器,從而提升了對IO的處理——因為IO的處理牽涉到很多DMA(直接內存存取),一個網絡包的處理可能需要經過多次存取內存,因此這個改動提升了性能。到了Sandy Bridge-EP(至強E5),處理器開始對PCI Express總線進行了集成,并將PCI Express總線升級到速率達8GT/s的3.0規(guī)范,這個特性被稱為Integrated I/O,這大幅度提升了IO性能,到了此時,使用x86平臺搭建的網絡設備已經開始變得多了起來。
但更重要的還是在于一套開發(fā)軟件:英特爾數據平面開發(fā)套件(Intel Data Plane Development Kit,即Intel DPDK),里面提出了很多改進x86平臺在Data Plane數據平面的性能的做法,例如Polling模式,Cache管理等等,人們忽然發(fā)現,x86的Data Plane性能其實也很可觀,現在已經有如6WIND等的公司在DPDK平臺上進行網絡功能的開發(fā)。
軟件定義網絡并未要求使用通用服務器,但是使用通過用服務器是降低成本、更快速地建立軟件定義網絡生態(tài)環(huán)境的方法,在性能方面,DPDK這樣的思路已經解決了很多問題,但還有更多的問題等待著去解決,本年度的數據中心技術研究報告中,將會對這些問題進行進一步的探討。