重要的點(diǎn)從軟件工程角度來(lái)講,怎么樣做一個(gè)正確、又能夠被人們所理解,而且還能夠被驗(yàn)證的計(jì)算機(jī)程序?我們有沒(méi)有辦法做到這個(gè)事情?軟件危機(jī)80年代出現(xiàn),到現(xiàn)在還沒(méi)有完全解決,但是有了更好的方法個(gè)工具支持我們的工作。從通信行業(yè)來(lái)講我覺(jué)得這個(gè)問(wèn)題可能比銀行、政府問(wèn)題更加嚴(yán)重。最主要的,舉幾個(gè)現(xiàn)象:

第一,從大的廠商來(lái)講,我們現(xiàn)在很多公司有成百萬(wàn)、千萬(wàn)的代碼在支持運(yùn)營(yíng)、管理、服務(wù)。我們不知道大的供應(yīng)商有多少人愿意花時(shí)間重構(gòu)這些幾百萬(wàn)行、幾千萬(wàn)行的代碼?可能不會(huì)很多。根本上沒(méi)有解決復(fù)雜性的問(wèn)題,比如說(shuō)網(wǎng)絡(luò)里有多少協(xié)議?各個(gè)層次以千來(lái)計(jì)算。從產(chǎn)品上來(lái)說(shuō),每一個(gè)廠家、每一個(gè)型號(hào)、根據(jù)不同的協(xié)議度支持度產(chǎn)生的產(chǎn)品也是成千上萬(wàn),我們要組合一個(gè)可靠的可以管理的網(wǎng)絡(luò)難度自然存在。所以最后一點(diǎn)就是可管理性。大家都知道,很多情況下網(wǎng)絡(luò)已經(jīng)變得越來(lái)越不可管理,這就是08年的時(shí)候斯坦福和伯克利的教授和兩位學(xué)生期望以更簡(jiǎn)單的方式描述網(wǎng)絡(luò),在校園里先提供一個(gè)實(shí)驗(yàn)的平臺(tái)??纯催@些簡(jiǎn)單更加可行的方法能不能變得通用。

剛才說(shuō)了軟件危機(jī)以后從軟件工程這個(gè)方面我們經(jīng)歷了好多次的革新,從80年代中后期的面向?qū)ο?,?0年代初期的面向組件,后來(lái)到面向服務(wù)。這樣一種越來(lái)越更加開(kāi)放,面向重用這樣一種整體的軟件架構(gòu)慢慢的為更多人所接受。但是我們覺(jué)得還是應(yīng)該強(qiáng)調(diào),沒(méi)有一個(gè)很完善的方法解決所有的問(wèn)題。所有大型的復(fù)雜度比較高的,特別是需求比如說(shuō)我們的協(xié)議的定義不很完善。比如說(shuō)Openflow這個(gè)協(xié)議本身從1.0、1.1到1.2、1.3里面可圈可點(diǎn)的地方還挺多的。走進(jìn)去以后會(huì)發(fā)現(xiàn)這里面一個(gè)小問(wèn)題一句話理解就要多少人/天。

軟件工程學(xué)想干什么呢?是把做工程的辦法推到做軟件的產(chǎn)業(yè)里面去。最重要的是三個(gè)方面,一個(gè)是我們能不能以系統(tǒng)的辦法?另外有一套嚴(yán)格的方法,有一套工具管理需求構(gòu)建中的一整套方法支持,同時(shí)我們能在設(shè)計(jì)、開(kāi)發(fā)的過(guò)程中能夠測(cè)度我們?cè)谀男┓矫嫒〉昧诉M(jìn)步?離我們的整體目標(biāo)到底還有多遠(yuǎn),能夠去測(cè)度這樣的一個(gè)工程的系統(tǒng)性。有一整套的比較完善的嚴(yán)格的過(guò)程定義和工具支持,另外能量化,這樣做工程的辦法去實(shí)現(xiàn)軟件。

我們從90年代末開(kāi)始有沒(méi)有看到這方面的變更?我覺(jué)得是有的。我想強(qiáng)調(diào)的是IBM90年代中后期提出來(lái)的RUP,現(xiàn)在叫統(tǒng)一過(guò)程大家應(yīng)該聽(tīng)說(shuō)過(guò)。它強(qiáng)調(diào)了三個(gè)點(diǎn):第一是以架構(gòu)為中心。就是我們所設(shè)計(jì)的軟件必須基于一個(gè)已經(jīng)認(rèn)為可行,而且能夠把軟件的各個(gè)層面從底層硬件支持到上面的數(shù)據(jù)管理,到安全、到集成,能夠把一個(gè)所有軟件系統(tǒng)的方方面面能夠串起來(lái)的架構(gòu)。在這個(gè)基礎(chǔ)上根據(jù)場(chǎng)景、業(yè)務(wù)、根據(jù)技術(shù)、根據(jù)數(shù)據(jù)的需求提出了各種通用的組件。在組件基礎(chǔ)上進(jìn)一步的發(fā)展到我們應(yīng)該需要什么樣的標(biāo)準(zhǔn)服務(wù)?這樣的話我們的系統(tǒng)才能夠真正的實(shí)現(xiàn)互相能夠互通。

另外一個(gè)就是架構(gòu)師的工作并不是簡(jiǎn)單的畫(huà)一些框圖,我們是要以一種可以重復(fù)工程化的方式來(lái)實(shí)現(xiàn)我們的架構(gòu)和設(shè)計(jì)我們的架構(gòu),就是以模式驅(qū)動(dòng)的架構(gòu)和它的開(kāi)發(fā)方式。我們必須有這樣的開(kāi)發(fā)方式以后架構(gòu)才可以擴(kuò)展、重用。而且我們可以把我們的設(shè)計(jì)建立在前人已經(jīng)完成的工作的基礎(chǔ)上。

第二個(gè)是要業(yè)務(wù)驅(qū)動(dòng)。具體來(lái)說(shuō)用統(tǒng)一過(guò)程來(lái)說(shuō)就是用例驅(qū)動(dòng)。就是我們要有了有效的把我們對(duì)業(yè)務(wù)的理解和業(yè)務(wù)需求的理解,具體到統(tǒng)一過(guò)程里面所要實(shí)現(xiàn)的支持網(wǎng)絡(luò)控制和轉(zhuǎn)化分離的那些功能,我們?cè)趺礃影阉枋龀鰜?lái)。以一種可以管理的方式,可以不斷的更新,用它來(lái)指導(dǎo)我們的架構(gòu)設(shè)計(jì)以及后面的其他模型的設(shè)計(jì)。

第三點(diǎn)是我們不可能一下子把所有的東西都做出來(lái),要按照一定的優(yōu)先級(jí)。以一種循環(huán)迭代的方式實(shí)現(xiàn)軟件工程方面的工作。這里提到一點(diǎn),最開(kāi)始統(tǒng)一過(guò)程是強(qiáng)調(diào)先把最關(guān)鍵的技術(shù)點(diǎn)設(shè)計(jì)好,把圓心做出來(lái),這樣能夠在最早的時(shí)間里證明我們的方案,我們的問(wèn)題可解還是不可解,如果不可解或者不可行,我們能夠盡早的控制風(fēng)險(xiǎn)。這三條原則是大家需要一直遵循的。

為了簡(jiǎn)化復(fù)雜度兩個(gè)最重要的事情一個(gè)是抽象化。我們要不斷的把很多共性的東西抽象出來(lái)。在模式驅(qū)動(dòng)方面底下我們提到過(guò)原模型與平臺(tái)無(wú)關(guān)的模型,或者是分析模型或者是設(shè)計(jì)模型。

另外一點(diǎn)就是怎么樣把大的復(fù)雜的系統(tǒng)分解以后怎么能夠一塊一塊的研究它,研究系統(tǒng)與系統(tǒng)之間相關(guān)的程度,以什么樣的方式讓它們進(jìn)行互動(dòng)。

當(dāng)然我提到的所有這些作為一個(gè)架構(gòu)師或者項(xiàng)目設(shè)計(jì)師我們不能簡(jiǎn)單的就以畫(huà)一個(gè)圖為我們的終極目標(biāo)。我們需要有集成的工具支持。最近這兩三年在支持模式驅(qū)動(dòng)開(kāi)發(fā)方面,尤其在工具進(jìn)一步能力擴(kuò)展和集成方面,我們已經(jīng)取得了突破性的進(jìn)展。主要的就是我建了這些模式以后,可以在模式上進(jìn)行各種不銅模是的轉(zhuǎn)換,可以進(jìn)行擴(kuò)展。另外我們可以把全周期的需求到一些功能、一些組件,服務(wù),全周期的管理這些產(chǎn)品都把它很好的串起來(lái)。這樣當(dāng)我們的技術(shù)發(fā)生變化和需求發(fā)生變化的時(shí)候我們知道從什么方面入手。比如1.3出來(lái)一個(gè)新的特性,我們通過(guò)模型做的比較好的話,能夠很快分析出來(lái)大概什么地方出現(xiàn)了什么影響,要花多大的代價(jià)。

另一個(gè)就是能不能盡可能的實(shí)現(xiàn)雙向從模型到代碼從代碼再回到模型的軟件工程的方式。

講到了一些很基本的東西不知道大家聽(tīng)沒(méi)聽(tīng)明白,現(xiàn)在講講華為設(shè)計(jì)LAB的過(guò)程中所涉及的原則,我們是一個(gè)開(kāi)放的平臺(tái)。我們反復(fù)強(qiáng)調(diào)幾個(gè)著力點(diǎn),一個(gè)是功能要能擴(kuò)展,協(xié)議變了能花最小的代價(jià)把新的功能實(shí)現(xiàn)出來(lái)。第二個(gè)1.0里只有一個(gè)單一的控制器控制大的網(wǎng)絡(luò),這是不太可能的。而且這個(gè)東西一旦出故障怎么辦?所以怎么樣把控制器系統(tǒng)變成一個(gè)很容易添加,而變得更加可靠。第二點(diǎn)是怎么樣最有效的使用基于模型驅(qū)動(dòng)開(kāi)發(fā)的方式來(lái)做架構(gòu)組建、集成和擴(kuò)展。

另外一個(gè)就是承用,Openflow從08年開(kāi)始到現(xiàn)在基于Openflow1.0的版本,從控制器、交換機(jī)有很多開(kāi)源的代碼,而且還有好幾個(gè)博士論文專(zhuān)門(mén)做這方面的工作。這些東西是我們需要充分學(xué)習(xí)、理解的。知道人家在某一個(gè)關(guān)鍵點(diǎn)上為什么用某種技術(shù)。所以我們要盡可能的重用,要利用人家做的應(yīng)用縮短我們的研發(fā)周期。

剛才提到了SDN Openflow,第一個(gè)它很多地方需要更深層次的了解。另外我想強(qiáng)調(diào),從Openflow1.0到2011年2月份公布的1.1,再到12月份公布的 1.2是有很大的差別的。Openflow1.0我們可以看作它是一種概念驗(yàn)證的協(xié)議,它提了很多思想。但是它主要的目的不是為了產(chǎn)業(yè)化,它是希望能在校園網(wǎng)絡(luò)的環(huán)境下盡快的驗(yàn)證這種簡(jiǎn)單的思想可不可行。所以它在性能、高可靠性方面沒(méi)有太多的考慮。為了節(jié)省昂貴的存儲(chǔ)資源加速查找和找到更好的路由。再到 1.2是多控制器,就是需要多個(gè)控制器來(lái)管理一個(gè)大的子網(wǎng)。

另外對(duì)一些新的比如IPv6的支持,我們希望能夠盡量使用現(xiàn)在已經(jīng)開(kāi)發(fā)、編寫(xiě)更加成熟的一些技術(shù)。由于這些東西的加入。Openflow1.1、1.2更加復(fù)雜了,所以最近為有1.2恩的交換機(jī),這是經(jīng)過(guò)一年多以后才看到有一些新的東西出來(lái)協(xié)議本身已經(jīng)是不兼容了。

以軟件工程的方式做軟件,我們是怎么做的呢?首先是需求開(kāi)始,比如說(shuō)就SAAS主要的特性從協(xié)議支持、網(wǎng)絡(luò)控制、虛擬網(wǎng)絡(luò)支持、交換機(jī)管理和網(wǎng)絡(luò)配置幾個(gè)特性方面把一些重要的特性列出來(lái)。我們自己有一套模型。我們?cè)谔匦孕Ч鶕?jù)1.2的協(xié)議,把它需要的主要功能需求也組合到了一起,在業(yè)務(wù)或者需求模型底下。

有了比較抽象的功能需求以后,我們說(shuō)到了要用例驅(qū)動(dòng),這樣就更加具體化,比如主機(jī)控制器、管理運(yùn)用、網(wǎng)元包括交換機(jī)各自希望能做一些什么工作。當(dāng)然在很多情況下是大家協(xié)同一起完成。

另外做軟件工程一些項(xiàng)目失敗或者變得不可控制的原因就是我們花了很多時(shí)間做前期的需求文檔。大的項(xiàng)目我看到過(guò)13卷的需求文檔,最后項(xiàng)目還是失敗了。有了需求文檔還不夠,怎么樣從需求到用例到組件到關(guān)鍵對(duì)象和邏輯服務(wù),怎么樣把這些通過(guò)一種矩陣追蹤的方式讓我們很容易的查到在什么地方實(shí)現(xiàn)了什么特性?這是軟件工程里面現(xiàn)在需求管理里面融合軟件架構(gòu)和設(shè)計(jì)很重要的一點(diǎn)。

整體架構(gòu):第一步是SOX,里面有對(duì)交換機(jī)的管理,局部化的網(wǎng)絡(luò)信息庫(kù)。另外一個(gè)是中央集中控制邏輯,包括公共的共享功能。包括底層對(duì)主機(jī),對(duì)鏈路的管理、拓?fù)涞墓芾恚ìF(xiàn)在一些比較基本的路由的算法。再往上走是API,上面還有一層管理應(yīng)用。這個(gè)看作控制器的話,要利用北上的API支持上層的管理利用,我們把管理利用和控制器的組合叫做智能網(wǎng)絡(luò)控制器操作系統(tǒng),這個(gè)操作系統(tǒng)稍微擴(kuò)展了一點(diǎn)點(diǎn)。因?yàn)槲覀內(nèi)A為自己有一個(gè)管道操作系統(tǒng),是比較抽象比較大的概念。

領(lǐng)域一個(gè)就是東西向,多個(gè)控制器的集群能夠把下面的網(wǎng)絡(luò)有效的控制起來(lái),通過(guò)基于服務(wù)的分布式管理方式,我們叫做軟件服務(wù)定義的網(wǎng)絡(luò),中間有一層就是網(wǎng)絡(luò)軟件服務(wù)層,通過(guò)它來(lái)實(shí)現(xiàn)東西向的集成。我們這個(gè)網(wǎng)絡(luò)就可以一步步的做大。

最后給大家匯報(bào)一下我們?nèi)ツ?0月份參加ONF測(cè)試的結(jié)果。我們第一次實(shí)現(xiàn)了1.2的組網(wǎng)事件,目前實(shí)現(xiàn)1.2對(duì)很多廠家都是非常困難的。第二我們實(shí)現(xiàn)了自動(dòng)網(wǎng)絡(luò)拓?fù)涞陌l(fā)現(xiàn),交換機(jī)能力的學(xué)習(xí)以及可以和交換機(jī)談判、學(xué)習(xí)。用外了完成對(duì)1.2關(guān)鍵點(diǎn)特性的驗(yàn)證。比如說(shuō)多控制器、多流表,對(duì)IPv6部分支持。當(dāng)我們把配置做好以后,我們網(wǎng)絡(luò)的展示界面可以把拓?fù)湟约拔覀兯鶎W(xué)習(xí)到的能力展示給用戶。

另一個(gè)是多控制器。在我們這個(gè)網(wǎng)絡(luò)里面當(dāng)逐步增加網(wǎng)絡(luò)流量的注入的時(shí)候可以看到控制器的矢量同開(kāi)始的兩個(gè)慢慢增加到六個(gè),流量降下去的時(shí)候回到了兩個(gè),是根據(jù)獨(dú)立需求和網(wǎng)絡(luò)狀態(tài)。

我們未來(lái)想做些什么事情:我們完成一個(gè)控制性集群,現(xiàn)在想把它做分布式的網(wǎng)絡(luò)操作系統(tǒng),基于完全豐富的網(wǎng)絡(luò)信息庫(kù)加上分布式的控制集群。第二個(gè)是進(jìn)一步提高性能。其中某幾個(gè)重要的過(guò)程是把原模型或者說(shuō)各種支持Openflow或者未來(lái)協(xié)議的模型構(gòu)建出來(lái)。另外就是基于全網(wǎng)拓?fù)錉顟B(tài)和流量特征的資源分配。第四個(gè)是應(yīng)用場(chǎng)景。我們希望能夠從對(duì)數(shù)據(jù)中心的支持到更加復(fù)雜的校園網(wǎng)、企業(yè)網(wǎng)包括運(yùn)營(yíng)商網(wǎng)絡(luò)更加具有意義的運(yùn)營(yíng)商層上來(lái)。

分享到

zhangcun

相關(guān)推薦