作者簡(jiǎn)介:成偉,蘇州盛科系統(tǒng)工程師經(jīng)理
傳統(tǒng)的交換機(jī)操作系統(tǒng)(簡(jiǎn)稱(chēng)NOS)對(duì)大眾是一個(gè)相對(duì)封閉的領(lǐng)域。隨著白牌交換機(jī)的高速增長(zhǎng),NOS紛紛開(kāi)源,NOS的開(kāi)發(fā)者也從只有設(shè)備商工程師,擴(kuò)大到互聯(lián)網(wǎng),運(yùn)營(yíng)商以及云計(jì)算的從業(yè)者。
NOS的作用是按照管理者的意志將網(wǎng)絡(luò)中的業(yè)務(wù)在交換機(jī)上運(yùn)轉(zhuǎn)起來(lái)。所以NOS首先需要提供對(duì)管理者或者控制器的接口;然后需要運(yùn)行協(xié)議運(yùn)算,和網(wǎng)絡(luò)中的其他交換機(jī)進(jìn)行協(xié)議面的交互;第三是需要硬件接口來(lái)適配交換芯片,風(fēng)扇電源等板載硬件。如下圖,我們可以將NOS拆分為三個(gè)核心功能模塊,以及基礎(chǔ)架構(gòu)模塊。
管理接口,包括傳統(tǒng)的CLI, SNMP, WEB功能。SDN引入的Openflow, NET-CONF, OPEN Config,Restful API功能等;協(xié)議應(yīng)用模塊,包括二層的協(xié)議模塊STP, LLDP, M-LAG,三層的協(xié)議模塊OSPF, BGP, VRRP等,以及DHCP, NTP等應(yīng)用模塊,SDN時(shí)代的Openflow Agent,包括OVS,;硬件接口上包括對(duì)接交換芯片,電源,風(fēng)扇的管理接口;
具備了以上三個(gè)核心功能就算是一個(gè)合適的NOS了,但給看一個(gè)NOS牛不牛,更要看“基礎(chǔ)架構(gòu)”,它是NOS骨骼和肌肉,NOS的健壯性,延展性都由它決定,NOS演進(jìn)其實(shí)是這個(gè)基礎(chǔ)架構(gòu)的的演進(jìn)歷史。
我們將過(guò)程分割為兩個(gè)階段,第一段是思科,Juniper,Arista的巨頭廠(chǎng)商競(jìng)爭(zhēng)時(shí)期,這個(gè)時(shí)期核心技術(shù)集中在設(shè)備商手中,是一個(gè)技術(shù)積累的階段;第二段是OPS, Sonic和OPX這些開(kāi)源新勢(shì)力的時(shí)代,喜歡玩顛覆的互聯(lián)網(wǎng)廠(chǎng)商帶著SDN的新需求參與了進(jìn)來(lái)。
巨頭之爭(zhēng)
原始架構(gòu)
《Inside Cisco IOS Software Architecture》介紹的IOS架構(gòu)如上圖,框架里還包括軟件轉(zhuǎn)發(fā)的模塊,可見(jiàn)屬于非常早期版本。通過(guò)藍(lán)色方框去剖析Cisco IOS,可以看到IOS滿(mǎn)足了NOS的三個(gè)要素,管理接口,協(xié)議應(yīng)用模塊,硬件接口。但是在基礎(chǔ)架構(gòu)上還相對(duì)原始,沒(méi)有將管理接口和協(xié)議應(yīng)用模塊分開(kāi)。這個(gè)架構(gòu)更多的是解決有無(wú)問(wèn)題,當(dāng)時(shí)的精力更多的還是在業(yè)務(wù)模塊上。
模塊化架構(gòu)
《JunOS OS for Dummies》中介紹的JunOS的架構(gòu)如上圖,包含管理接口,協(xié)議應(yīng)用模塊,硬件接口的同時(shí)提出了模塊化架構(gòu)的理念。
The modular architecture of Junos OS allows individual control plane processes to run in their own module (also sometimes called a daemon). Each module has specified processing resources and runs in its own protected memory space, avoiding the processing conflicts that can occur in other platforms.
同樣是比較早期的架構(gòu),但是通過(guò)這個(gè)架構(gòu)可以清晰的看到管理接口和其他模塊是分離的,已經(jīng)有一些控制和轉(zhuǎn)發(fā)的分離的意思在里面,但這次演進(jìn)不是革命性的,更像是從溫飽到小康的進(jìn)步。
數(shù)據(jù)庫(kù)架構(gòu)
Arista的EOS的架構(gòu)圖如上圖,EOS最牛的地方就是他的數(shù)據(jù)庫(kù)架構(gòu),SysDB是一個(gè)Key-Value的內(nèi)存數(shù)據(jù)庫(kù),Arista的核心亮點(diǎn)是能夠原生的解決進(jìn)程級(jí)別故障,流程如下:
可以看到進(jìn)程故障時(shí)候,交換芯片繼續(xù)保持轉(zhuǎn)發(fā),進(jìn)程恢復(fù)后從SysDB重新獲取狀態(tài)繼續(xù)運(yùn)行,該功能不但可以保障業(yè)務(wù)的穩(wěn)定運(yùn)行,還可以實(shí)現(xiàn)單進(jìn)程升級(jí)功能。記得當(dāng)時(shí)Arista一個(gè)典型的DEMO是將正在運(yùn)行的STP KILL掉進(jìn)行單進(jìn)程升級(jí),因?yàn)镾TP的狀態(tài)都是存在SysDB里的,所以STP進(jìn)行恢復(fù)工作后,業(yè)務(wù)層面可以做到不感知。
數(shù)據(jù)庫(kù)架構(gòu)的演進(jìn)是一個(gè)重大的變革,顛覆了傳統(tǒng)的定義數(shù)據(jù)結(jié)構(gòu),然后進(jìn)程間消息通信的傳統(tǒng)的架構(gòu)。開(kāi)發(fā)者可以使用類(lèi)似開(kāi)發(fā)通用軟件的思路進(jìn)行開(kāi)發(fā),而且NOS的數(shù)據(jù)可視化了,大大降低定位問(wèn)題,解決問(wèn)題的難度。
思科在NX-OS上同樣通過(guò)Key-Value的內(nèi)存數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)了HA,如下圖:
思科的NX-OS清晰的完成了管理和協(xié)議應(yīng)用分離(排名不分先后),實(shí)現(xiàn)了輕量級(jí)的Key-Value內(nèi)存數(shù)據(jù)庫(kù)完成了HA Infrastructure,思科在龐大的協(xié)議棧包袱下始終不斷演進(jìn),同樣令人欽佩。
新勢(shì)力
SDN高速發(fā)展,白牌產(chǎn)業(yè)催生了一批開(kāi)源開(kāi)放的NOS,這些新興的NOS站在巨人的肩膀上,都基于數(shù)據(jù)庫(kù)架構(gòu),OPS選擇了OVSDB,Sonic和OPX選擇了Redis,OVSDB和Redis都屬于Key-Value的In-memory數(shù)據(jù)庫(kù)。
但這并沒(méi)有讓新勢(shì)力滿(mǎn)足,SDN要的是更快,更靈活,更大規(guī)模,更好擴(kuò)展。巨頭時(shí)期的NOS開(kāi)發(fā)周期還是過(guò)長(zhǎng),升級(jí)還是有點(diǎn)不方便,用慣了動(dòng)態(tài)語(yǔ)言的互聯(lián)網(wǎng)開(kāi)發(fā)者表示無(wú)法接受。數(shù)據(jù)中心的互聯(lián)網(wǎng)用戶(hù)對(duì)NOS最痛點(diǎn)的需求是如何流量無(wú)感知的完成版本迭代,以及如何更方便,更高效的進(jìn)行版本升級(jí)。
數(shù)據(jù)庫(kù)架構(gòu) + 容器架構(gòu)
做公有云的微軟自然的想到通過(guò)虛擬化重構(gòu)NOS,將容器技術(shù)應(yīng)用到了NOS。容器技術(shù)可以簡(jiǎn)單理解為:對(duì)Linux操作系統(tǒng)來(lái)看是容器是一個(gè)進(jìn)程,容器看自己內(nèi)部是一個(gè)輕量級(jí)虛擬機(jī)。Sonic將各種進(jìn)程,比如BGP運(yùn)行在容器中,原生的解決了JunOS提出的模塊化問(wèn)題,更重要是配合數(shù)據(jù)庫(kù)架構(gòu),由對(duì)單進(jìn)程的升級(jí),變成了對(duì)容器的升級(jí),聰明的使用成熟通用的技術(shù)解決傳統(tǒng)問(wèn)題。
總結(jié)整個(gè)基礎(chǔ)架構(gòu)發(fā)展史如下圖:
經(jīng)過(guò)歷代演進(jìn),NOS已經(jīng)不再是結(jié)構(gòu)復(fù)雜,需要像黑客一樣定位問(wèn)題,產(chǎn)品化周期和芯片差不多的專(zhuān)用操作系統(tǒng)了。現(xiàn)代NOS在架構(gòu)上進(jìn)化為使用通用的數(shù)據(jù)庫(kù),容器虛擬化技術(shù),支持高速迭代,某種意義上設(shè)備商是不是也可以稱(chēng)自己是互聯(lián)網(wǎng)公司了。