在不久之前,一個同行告訴我,他發(fā)現(xiàn)許多人都希望把傳統(tǒng)的網(wǎng)絡轉化成軟件自定義網(wǎng)絡。
我同意他的觀點,那么對于Docker呢?在SDN之前,Docker已經(jīng)帶來了許多新的變化,讓資源密度和新的計算理念變成了焦點話題。由于Docker所帶來的影響,傳統(tǒng)應用和各層服務平臺正發(fā)生著不同程度的改變,這些不同層次的服務如何被SDN所影響,反過來它們又如何影響SDN?
當越來越多的服務和軟件開始運行在復雜的、快速的、分布式的基礎設施上,問題就出現(xiàn)了。越來越多的應用在架構設計上可能需要跨數(shù)據(jù)中心進行同步。這些應用可能由一些可交互的服務構成,并且對于實時流數(shù)據(jù)的處理上(processing real-time streaming data)具有事件驅動能力。監(jiān)控服務也會變得越來越重要,用戶需要來檢測運行在OpenStack、AWS云服務或者其他基礎設施平臺上的容器所發(fā)生的異常。
這些新的應用在架構上的復雜性對于大多數(shù)開發(fā)者而言將是不可見的。我們也也希望網(wǎng)絡可以在沒有服務人員幫助的狀態(tài)下正常工作。目前為止,大家的注意力主要集中在Docker上,Docker被視為是一個新的堆棧轉化(stack’s transformation)的標志。隨著Docker及相關技術的到來,在技術棧(technology stack)的各個層面上將會產(chǎn)生許多新的需求。
在過去的幾周,Sridhar Rao對軟件自定義網(wǎng)絡的相關內容進行了一系列的介紹。內容從市場上的第一代SDN工具開始,一直到SDN是如何走向成熟?,F(xiàn)在我們將興趣轉移到容器相關技術上。Docker以及其相關的應用平臺的出現(xiàn),讓我們對于網(wǎng)絡模式的思考有了一種既熟悉又陌生的感覺。Docker中所使用的新的網(wǎng)絡技術一方面可以作為SDN應用的一個先例,另一方面,它還對其他因素進行了考慮,比如資源利用密度以及數(shù)據(jù)引力(data gravity),這些議題也隨著輕量級容器技術和微服務理念的發(fā)展逐漸產(chǎn)生。
SocketPlane是一個正在發(fā)展中的混合的網(wǎng)路模型,它基于SDN的原則構建,并且可以被應用到了Docker的環(huán)境中。
SocketPlane正在逐漸發(fā)展成為一個可編程的平臺,它把DevOps放在一個網(wǎng)絡環(huán)境中。這里有一篇關于SocketPlane的不錯的文章。文中介紹了 SocketPlane如何在不同的主機之間建立一個 VXLAN隧道,以此來將不同主機上的Docker容器連接起來,使其處在同一個虛擬邏輯網(wǎng)絡中,整個過程并不需要遠程或者額外的 SDN控制器進行控制。
用戶可以通過命令行工具與Docker容器進行交互,也可以使用socketplane的相關命令來創(chuàng)建、刪除虛擬網(wǎng)絡或進行其他的操作。
SocketPlane使用Hashicorp的Consul工具,使其作為一個輕量級的控制平臺。在網(wǎng)絡的連通性上,SocketPlane通過Open vSwitch來連接到Consul集群上。一旦Docker主機被加入進來,代理程序就會啟動一個Docker實例,并且連接到集群中。之后容器看起來就像一個虛擬機。
由于Docker相關技術帶來的變化,新一代的網(wǎng)絡技術將會被重新定義,容器在跨多服務器、多主機的環(huán)境中的協(xié)同工作能力也會得到加強。產(chǎn)業(yè)界預期容器的數(shù)目的使用上可能至少有兩個數(shù)量級的增長,隨著容器使用數(shù)目的增加,后續(xù)的容器的相關管理技術也會不斷發(fā)展,這將有可能在相關領域產(chǎn)生更多的創(chuàng)新。
“你可能會看到,對于短時間周期內執(zhí)行的大量的計算任務,容器數(shù)目可能會達到一個新的數(shù)量級 ” SocketPlane的John Willis這樣說,“現(xiàn)在所關注的問題可以算是‘納秒級計算任務’,在每一周,開啟或者停止運行的實例的數(shù)目級別可能會從1000個實例到1億個不等。
在去年12月份的Dockercon Europe上,Wills讓我們了解了他的觀點,Willis從供應商的角度上進行了反思,告訴我們接下來的網(wǎng)絡世界可能會發(fā)生什么。許多其他的供應商也做了演講,我們可能會在接下來的文章中進行具體的介紹。特別地,Weave作為一個使用以容器為中心的網(wǎng)絡技術的例子,也引起了一些關注。CoreOS也開發(fā)了Flannel,包括Docker也有其自己相關的網(wǎng)絡配置功能。
Wills認為 SDN這個術語需要包含的內容太多,因此可以從各種不同的角度對其進行解釋。為什么會這樣?因為網(wǎng)絡的確很難管理,并且適應性很差,發(fā)展更新也很困難,理解起來也不太容易。如果把這些因素都考慮進來,網(wǎng)絡問題的確會變得非常復雜。在另一方面,SDN期望數(shù)據(jù)層可以有更好的適應性,并且可以將控制層從物理設備上移除。但是這樣做會使控制層的集中化的程度過高,以這樣的方式管理一個以容器為中心的生態(tài)系統(tǒng)是不切實際的。
“中央大腦”模式所存在的問題
MarkBurgess的這篇文章很有啟發(fā),集中化的網(wǎng)絡可能就像是以下這樣:我們需要一個大腦,但是大腦實際上能處理的內容是有限的。因此我們需要許多大腦來一起工作。這好比我們通過創(chuàng)建一個社群來繼承我們的知識,而不僅僅是依賴一個單獨個體來掌握全部的知識。
長久以來,集中化的模型一直發(fā)揮著作用。比如你可以通過硬件來構建一個網(wǎng)絡,這個網(wǎng)絡可能由一個中心結點來控制。SDN通常就是基于這個原則來創(chuàng)建的。它所依賴的理念是:將集中化的控制層和數(shù)據(jù)層相分離。但更有意義的一種情況應該是使用一個非集中化(de-centralized)的網(wǎng)絡,這個思路借用了我們社會構成中的“集中式的大腦”和“分散式的知識存儲”的原理。在現(xiàn)實社會中,從來沒有一個大腦可以控制我們生活和工作的方式。正是由于社會的“集群性質”(collective nature of society),于是我們就產(chǎn)生出了一系列的概念和想法,這也反應出了人類社會的本質。更進一步來說,一個大腦所能處理的信息是有限的,而一個有集體智慧的社會群體是由進行成千上萬個協(xié)同工作的大腦所組成的。Burgess通過下面的方式來說明:
Burgess幫助構建了CF引擎,并且和SocketPlane一同工作了幾個月。Burgess把這個問題比作,我們如何把工作負載推動到邊緣(push the loads to the edges)。暴力模型可能看起來更有效率但是它們實際上很慢并且容易產(chǎn)生很多問題:
對于我們的問題,用社會模型打比方可能比用大腦模型要更恰當,因為在一個社會中,可以形成許多局部的“團體” ,這些“團體”之間可以在邊界處進行微弱的交互,或者信息的交換。如果其中某一個連接失敗,并沒有必要把它與剩余的部分切斷,它有一定的自治能力來重新配置并且適應。也沒有必要把系統(tǒng)的每個部分之間都連通起來,這樣的話,對于負載的處理和決策的制定就可能變成一個純粹的暴力破解問題。
Docker很好地融入了SocketPlane提供的這種混合的網(wǎng)絡模式。如果Docker的網(wǎng)絡模式僅僅依賴于一個中央化的,“單一大腦”的方式,情況可能會變得很難處理。比如:一個服務器上有50臺虛擬機,則一個集中式的SDN平臺大約可以支持500個主機,每臺主機上有50個虛擬機。如果每一個虛擬機上有5000個容器,你將怎樣操作?在這種環(huán)境下,集中化的操作可能會變得難以實施。因此我們需要新的方法來應對網(wǎng)絡行為的固有的變化,這種網(wǎng)絡行為所發(fā)生的變化可能是由容器的數(shù)量增減或者掛載的數(shù)據(jù)卷增減所引起的。
Wills還指出了Docker的兩個發(fā)展趨勢:
資源密度:正如他的同事Brent Salisbury在上周所寫的那樣,操作系統(tǒng)正變得越來越碎片化。由于Docker相關技術的到來,資源的利用狀況會發(fā)生變化,這將會改變應用在網(wǎng)絡環(huán)境中的行為方式。現(xiàn)今,OS之間相互合并的趨勢變得越來越強,或許最終會從客戶端上消失。在一個有成百上千個主機的環(huán)境中,可能會有幾千個容器運行在同一個物理服務器上,
數(shù)據(jù)重力:這個概念由Basho CTO Dave McCrory所提出,這個概念是指數(shù)據(jù)應該被看成是一種能夠吸引更多其他事物的東西。更多的數(shù)據(jù)會吸引更多的服務和應用。隨著搜集到的數(shù)據(jù)越來越多,不可避免的,我們需要更多的計算資源,需要更多的方式來調用服務。計算能力可能是流式的或者是集群式的,就像是在AWS Lambda中已經(jīng)實現(xiàn)的那樣。
Adrian Cockcroft在Dockercon Europe的演講中也談到了這一點:
SocketPlane把它們的解決方案稱為 retro-SDN,控制層有一個邏輯可以填充到數(shù)據(jù)層。它符合flow tables 的要求。舉例來說,當一個packet經(jīng)過的時候,按照程序對其進行路由,允許為其進行動態(tài)的決策。VMware把這稱為微分段(micro-segmentation),Willis說。它將每一個分段隔離,創(chuàng)建隧道。VLAN是一個在交換機上多租戶的抽象。但是這個是基于硬件的解決方案。在云端,用戶的計算資源并沒有在某一個具體的服務器上,而是動態(tài)地分布在虛擬的網(wǎng)絡中。這從更廣泛的層面而言,就涉及到Willis如何定義他所說的疊加網(wǎng)絡(overlay network),創(chuàng)建這樣一個邏輯上的網(wǎng)絡并不需要與任何物理交換機耦合,并且能很容易地進行修改,這些操作可以由控制層到數(shù)據(jù)層全部完成。這就是SDN所希望實現(xiàn)的。服務可以移動到數(shù)據(jù)層并且被操縱。在Github上,SocketPlane的疊加網(wǎng)絡被這樣描述:
疊加網(wǎng)絡在主機端點之間建立起隧道,在我們的例子中,這些端點都是Open vSwitch。對于這樣的場景,優(yōu)勢是用戶不需要擔心 子網(wǎng)/vlan 或者其他任何的第二層網(wǎng)絡的使用限制。這只是我們提出的在網(wǎng)絡中部署容器的其中一種方法。Open vSwitch的重要性在于網(wǎng)絡的性能和一些用于高級網(wǎng)絡配置的API。
Willis認為容器的使用可能會達到一個新的數(shù)量級,上千個容器可能在一個服務器上,這會引起很多的問題。隨著微服務理念的發(fā)展,任何數(shù)量的服務都可能運行在容器上。這意味著以數(shù)據(jù)重力、資源密度等概念為理念的新的設計模式將會創(chuàng)建一個完全不同的方法來對計算資源進行分配。
新的準則可能是:計算資源只生存幾分鐘或者幾秒。(“The norm may be compute living for minutes or maybe seconds.”)
以后不再需要集中控制的網(wǎng)絡。就像一個社會的組織形態(tài)。也沒有必要去進行集中化的組織以專制的形式運行。我們需要考慮的是如何構建中心樞紐。我們看到在一些極客社區(qū)中,并沒有一個人試圖去掌握所有的知識,社區(qū)的知識深度更多的通過集體智慧的形式來體現(xiàn)。
這提供了一種不同的方法來看待我們的網(wǎng)絡本身。它不是一個“單一大腦”的形式,更像是一個集中數(shù)據(jù)平臺的網(wǎng)絡,可以動態(tài)地進行決策。
或許這對我們而言,可以用一種不同的方式來思考底層基礎設施,網(wǎng)絡作為一個社區(qū)的形式并非是一個單一的個體,我們可以參考這種新的思路來構建新的系統(tǒng)。
本文來源:dockerone 翻譯:王哲 原文鏈接:http://dockerone.com/article/188