天天看點

SDN程式設計自動化:抽象、工具與實作

2016年6月2日,“2016全球sdnfv技術大會”進入了第二天。作為連續舉辦三屆的sdn/nfv技術與産業盛會,本屆大會着眼于sdn

/nfv的實踐應用與部署,從sdn/nfv在營運商網絡、企業網、雲資料中心、測試解決方案等多個場景的應用出發,深入解析産業部署現狀及面臨的挑戰與發展趨勢。

SDN程式設計自動化:抽象、工具與實作

耶魯大學終身教授,同濟-耶魯系統網絡實驗室主任 楊陽

廣度與深度兼備的全球sdnfv技術大會可謂是行業裡的旗幟性會議。大會邀請了數十位海内外權威專家、營運商高層、廠商高層及使用者機關代表進行高峰對話。在今日會議的下午,耶魯大學終身教授,同濟-耶魯系統網絡實驗室主任楊陽發表了題為“sdn程式設計自動化:抽象、工具與實作”的演講,站在學術的角度為大家解讀了sdn程式設計自動化的内容。

楊陽是耶魯大學計算機科學和電氣工程教授,創立并上司網絡系統實驗室,其研究得到了美國政府機構和産業的資助。楊陽的團隊主要做兩件事情,第一要引入最最簡單的一種抽象,有了抽象之後,第二要做的就是實作這個抽象。接下來我們就一起聽聽楊陽的實踐之路。

以下為演講實錄:(以下内容根據現場速記整理,未經發言嘉賓确認,僅供參考,謝絕轉載。)

楊陽:大家好。我本來我應該是4點40開始,現在已經是5點45。已經很晚了,在這兒從昨天開始,首先非常高興有這樣一個機會能夠跟大家交流一下關于我的團隊,關于sdn程式設計自動化的交流,非常高興有這樣一個機會,同時我發現好像7個小時,今天開始已經有7個小時了。是以來說可能大家都很累了。首先感謝大家,還能夠在這麼累的情況下還能堅持到現在,同時我的演講可能和其他的演講主題不一樣,因為我來自學術界。首先給兩個,我覺得對于這次來說整體talk,我覺得有兩點讓我領會比較深。第一點就是david,他提到一點,sdn是看底下的技術,現在可能更加傾向往高層走。我今天要談的關于程式設計自動化是偏向于高層,他其實應該是高層的東西。

第二點,sdn或者是開放網絡比較重要的一點是什麼呢?是社群,我要講的東西還沒有真正的開源,是以還沒有真正的社群,确實我有一個小小的私有社群,所有參與我今天要講的一些工具的一些核心人員,大家如果看到會發現這裡面其實很多特别多的咱們中國的年輕人。當然一開始啟動的時候是我的一個美國學生,包括美國合作者,後來所有的東西,都會來自于中國大陸的年輕人,而且其實有很多人就在座,有一個剛剛工作第一年的一個年輕教師,一個剛剛工作一年的一個我們的一個(英),還有三個研究所學生,還有一個大三的學生,我們這個團隊非常年輕,非常好的一點,前面看到,很多咱們中國基金在中國落地。現在看到越來越多的中國人開始加入到核心技術的開發,我覺得這一點本身是非常好的事情。這個團隊,剛才介紹一下大的宏觀的一些架構,我們把它跳掉。你提供可能最長期的就是可以提供(英)。我們這個團隊主要做的是什麼呢?做兩件事情,第一要引入最最簡單的一種抽象,有了抽象之後,我們要(英)來實作這個抽象,大概說兩點,為什麼要做這兩件事情,這還是很重要的,第一點,為什麼要做exrtemely呢?所有的學生都要記住這兩句話,基于子產品化的抽象,恐怕是解題之道,這樣的話非常重要,是以要引入抽象,這是第一點,為什麼要引入抽象。

第二點,為什麼要引入非常有用的工具。這一點,咱們中國人老說的話,叫工欲善其事必先利其器,當你做事情的時候,你應該是要給别人獵槍,而不是獵物,因為獵物總有使用掉的一天。一開始這樣可以的,但是從長遠上來說我們應該提供的是獵槍,提供這樣的更好的工具,有了更好的工具他們才能真正發揮sdn的優勢,這是整個的出發點,為什麼做這件事情。

特别宏觀的說法,下面讓我來具體一點,到底我們正在做哪些抽象,以及我們有哪些好的工具,希望跟大家共享。為了提到這個抽象,現在讓我先說一點目前已有的抽象,這個是目前opendaylight。這個是它的核心抽象,有了這個核心抽象之後,你去問opendaylight,如果來說最核心的是什麼?就是我的(英)以及我提供的工具,工具是什麼呢?你有一個描述的資料,我可以自動的用一個(英)幫你生成,來解析這些資料的東西,大家來看這個資料的東西,更像獵物還是更像獵槍,恐怕更傾向于是,按整個分類來說還是在獵物的這一邊來看,這是第二點大的系統,這個系統非常的好,它也有一些非常有意思的idea。它比較有意思的一點,是(英),在昨天和今天都提到一點,(英)分為兩類,一類是你要什麼,是以這樣,我問大家一個問題,這樣來說,你要什麼,和你怎麼要,你要什麼來說,是獵物還是獵槍?恐怕還是獵物。意思是什麼呢?目前兩個系統來說,總體傾向于他們提供的主要是獵物,而不是傾向于提供獵槍,如果你看整個大的架構來看是什麼呢?我這兩天聽到很多的應用,我一直很好奇,我問你們需要幾天的時間,我們需要幾天,為什麼這麼簡單的東西需要這麼大的程式,為什麼要這麼大的工作量,這麼複雜?主要一點,我們現在有了很多獵物的東西了,其實可以搜集資料。可以配置各種(英)也是獵物,右邊來說你有網絡的裝置這很好。總體來說我們的獵槍在哪裡呢?應該是(英),真正的獵槍,現在還沒有比較好的獵槍,我們現在主要做的東西提供這樣一個工具,來給大家,有這樣的一個好處。

當我提到這兒,讓我來引入,如果我要有這個程式設計的最好的工具,我隻要給大家提供的抽象是什麼,我們團隊考慮了很久很久這個問題,到底我們給使用者的抽象是什麼?sdn提供了一個抽象,到底是 

什麼?換句話來說,把這個問題深入的檔次更高一些,咱們做網絡的人和其他做計算機的人到底有什麼差別?咱們這個行業到底特殊在哪裡?想來想去,恐怕沒有。我們其實其實就是計算機行業中間的一員,如果從這個角度考慮問題,我們抽象是什麼呢?我們怎麼樣給使用者最最簡單的抽象呢?很簡單,我們認為網絡就是一個大的伺服器,什麼伺服器呢?外部伺服器,什麼樣的伺服器都可以。這個抽象是什麼呢?網絡就是伺服器,是外部伺服器或者是whatever。這是我們的抽象,我們這麼想,越簡化越好,有了這樣的一個抽象之後,使用者變成怎麼做呢?你就用(英)來寫這個程式,來控制你的整個網絡。

有了這個之後,你告訴使用者,從邏輯上來說,每一個請求都會發給你的控制器,你可以處理它。簡單不簡單?有了這個之後,這太簡單了,這個控制器可以做所有的事情,可惜這個控制器有一件事情做不到,他沒法做實體轉移,他從一點進來,他從另外一點進去,你可以想象,從理論上來說所有的東西都是在控制器去運算,但是有一件事情他做不到,他必須把他的包從一個點走到另外一個點去,這一點必須網絡上來做這事情,相當于我們實體上的限制,怎麼做呢?網絡控制做什麼呢?這個包到底怎麼從原點到他的終點去,非常簡單。有了這個之後,給大家舉一個簡單的例子,這個就是一個程式,如果假設是這樣的一個模型來說,每一個包過來都會發給控制器,這個控制器非常的簡單,我這兒有一個(英),有多條鍊。如果是要22個端口來說,你就從最便宜的到最貴的鍊路上去找。把他恢複回去。這個就應該是這個樣子,為什麼這麼多複雜的sdn,要寫的那麼複雜,你完全可以寫成這個樣子,這個是更加複雜的程式。這個程式怎麼做呢?

    第一行,你要做mac

location,我受的程式來說,應該是到什麼地步呢?大一的學生剛出來就可以程式設計程式。第二層,可能有(英)都沒關系。然後怎麼走呢?讓我查一個表,他在哪個位置上,把他的原位址查出來,目的地查出來(英),用一個(英)的算法,這些東西你都可以調一個庫,程式就這樣子。為什麼大家讨論這麼多的程式,咱不說是6個月,或者一年,sdn變成幾周或者幾天,這個程式應該是幾個小時幾分鐘寫出來的,我們可不可以做到這樣一件事情,這是我們想做到的,達到的目标。當我提到這一點之後,大家來看,這樣的一種程式設計模型,這樣來控制,這樣來做,他确實是非常非常的簡單,非常非常靈活。你會碰到一個問題,對于你的控制器來說,會成為你的(英),他不工作。所有的包發給他,他要處理,這怎麼辦?這時候,咱們做網絡的人,這麼多年的貢獻,對整個計算機行業的貢獻在哪裡呢?咱們其實就有一個貢獻,我們學會了怎麼樣去做(英),所有的計算有兩類表達式,一類表達式是用計算用指令,一類是存儲,小孩子剛剛學算術不知道怎麼辦,三乘5就是3+3等于6,後來不行,太慢,怎麼辦?那就背99表,3乘以3等于9。咱們做的是什麼?就是緩存,就是加速,就是做緩存和加速。

那我們這個團隊主要做的是什麼?把緩存和加速完全自動化。這是我們這團隊做的事情,非常非常簡單,使用者來說,你寫的程式和南向接口完全沒有關系,所有的緩存加速我們來做,這是我們做的事情。這個主意大概是兩年,三年前提出來的,提出來之後,所有的反應,( 

英),讓我給大家說一點點,為什麼他(英),我給大家先說我們制造的第一個工具,這個工具叫做(英),每天比如說你運作商你寫了這樣一個程式,這個程式随便寫,寫完了之後唯一的要求,你用一個庫來(英)所有的(英)有了之後來說,你用那個庫,一是使用者友善,第二我們是緩存哪些流表,自動的,完全自動的,大家比較抽象來說,他整個流程是什麼呢?一開始來了一個包,你通過一個表,查詢來說,你都有哪些(英),你來了三個包,我有三個存儲,把你的結果緩存起來,我建立一個東西,叫做樹,有了樹之後,我就可以自動的生成所有的流表資料平面,完全自動。真的可能嗎?特别簡單的例子,這是一個程式,中間完全和南向接口無關。你來了第一個包,來了以後,一步一步的運作,端口22,我運作我的程式,我通過你的庫,我就知道什麼東西,我給你存下來,我把你的接口給你存下來了,這時候我存在我的樹中間了,你又來了第二個包,也很簡單,第二個包運作,這樣我就有了一個樹,我就真的生成我的流表,怎麼生成?很簡單,這是我的樹,怎麼聲稱流表,所謂的南向加速都是一個一個的東西,怎麼生成流表呢?我把所有的加快程式變成一個樹,太簡單了,每個流表說白了,不是你要做一個查詢呢,不是查詢一個條件嗎,我就找到條件。當然有些複雜性,因為所有的,你運作的時候,你要有比較簡單的一些個底下的南向接口,你中間沒有邏輯的分,怎麼辦呢?沒關系,我這兒給你加一個(英),我也可以生成,整個來說這個包怎麼生成呢?一步,兩步三步生成。這個可以說是一個大力氣,或者說是非常好的工具。

這是我們一年多前做出來的第一個工具,我們在過去一年,剛才不好的地方,它其實是一個(英),而且有時候有延時,現在來說,openflow1.3,1.4,你能不能自動的有工具,自動的生成所有的東西有沒有這個能耐?我們有這個能耐,這是怎麼做的呢?還是同樣的一些想法,我們基本思路是什麼呢?我們說白了,絕大部分是計算機行業出身,每一個程式,就是一個指令級每一個指令級不就是一個流表嗎?一個指令級,一個指令過來,有輸入,有輸出,不就是流表。怎麼做呢?這是gbp,大家很熟悉,opendaylight中間非常簡單的一個gbp,一共有三條指令,先查原位址,再查目的位址,看你是否允許通過,允許通過的話。每一行其實就是一個流表啊。第二是清單,把這兩行的結果送到下一個清單,你立馬就有三個流表,是以這就是我們在過去一年做的事情,我們有這樣的一個新的工具,這個工具叫(英),它可以自動的,你寫成一個(英),我幫你設計你的流表的(英)是什麼,我自動的幫你生成所有的流表的内容,這是我們另外最近提供的一個新的工具。總結我們最近提供了哪些新的工具?

使用者怎麼寫程式呢,就是剛才說到的最最抽象的,最最簡單的模型,來了之後,我們有這樣的一個編譯工具,幫你生成流表,有了這個流表之後,你自動我們幫你把流表的内容加進去,因為底層的計算模型不完整,是以有些必須在時時來做,我們就有了第三個工具,自動的幫你加上來了,有了這個之後,所有的都(英)很多的資料,你應該怎麼做呢?我們開發了一個新的工具,自動的去(英),我們都知道,可以幫你重新運作,有了這個東西。為什麼網絡的人要特殊化?我們完完全全就是計算機行業的一部分,我們可以完完全全的把它合在一起,最好的網絡技術幫我們做東西,你可以加新的子產品,可以做網絡狀态抽象加進去,都是子產品。我們可以自動來運作,這個是另外一個新的tools,總結一下。我們現在有了哪些更好的新的工具?和變化無關的模型,因為所謂編排,程式設計會變得容易多的很多。第二我們提供了這樣的一個很好的工具,可以自動,你任何一個程式過來,我來給你做程式分析,相當于是一個編譯體,你編譯出來你的流表是什麼。runtime來幫你生成這樣的東西,(英)也是一個非常好的工具。

    最後在資料增加function store。因為時間所限,是以我講的比較快,如果大家感興趣,我們最近錄制了非常有意思的dome,程式設計我們非常簡單,也在尋求來開發和部署我們這套系統,如果大家有興趣可以跟我的郵件位址聯系。好,我就說這麼多,謝謝大家! 

原文釋出時間為:2016年06月02日

本文作者:楊昀煦

本文來自雲栖社群合作夥伴至頂網,了解相關資訊可以關注至頂網。