什么是架構(gòu)?網(wǎng)絡(luò)架構(gòu)中都有什么?終于有人講明白了
本文轉(zhuǎn)載自微信公眾號(hào)「大數(shù)據(jù)DT」,作者David D. Clark。轉(zhuǎn)載本文請(qǐng)聯(lián)系大數(shù)據(jù)DT公眾號(hào)。
01 什么是架構(gòu)?
架構(gòu)是一個(gè)過程、一個(gè)結(jié)果和一門學(xué)科。
- 作為一個(gè)過程,它涉及將組件與設(shè)計(jì)元素結(jié)合,以此來形成一個(gè)有目的的實(shí)體。
- 作為一個(gè)結(jié)果,它描述了由其形式所定義的一系列實(shí)體。對(duì)于我們熟知的“哥特式大教堂”這種架構(gòu)形式,它的特點(diǎn)是一系列公認(rèn)的設(shè)計(jì)元素與方法,目的可能是構(gòu)建一個(gè)禮拜場(chǎng)所,但“哥特式大教堂”實(shí)際上意味著更多。
- 最后,作為一門學(xué)科,架構(gòu)就是架構(gòu)師接受訓(xùn)練要掌握的本領(lǐng)。計(jì)算機(jī)科學(xué)領(lǐng)域從設(shè)計(jì)物理實(shí)物的學(xué)科中借用了這個(gè)術(shù)語(yǔ),例如建筑物和城市,其中包含廣受認(rèn)可的培訓(xùn)與認(rèn)證過程。
架構(gòu)的三個(gè)方面都適用于“真實(shí)的建筑”與計(jì)算機(jī)科學(xué)。
1. 作為一個(gè)過程
我的定義有兩個(gè)重要的方面:將組件整合在一起并應(yīng)用于某個(gè)目的。
- 將組件整合在一起:這是計(jì)算機(jī)科學(xué)家在考慮模塊、接口、依賴、分層、抽象以及組件復(fù)用等問題時(shí)所做的工作。這些都是設(shè)計(jì)模式,計(jì)算機(jī)科學(xué)家接受了相關(guān)的訓(xùn)練,在思量設(shè)計(jì)挑戰(zhàn)時(shí)需要考慮這些設(shè)計(jì)模式。
- 應(yīng)用于某個(gè)目的:設(shè)計(jì)過程必須按照工件的預(yù)期目的來塑造,例如,是一所醫(yī)院而不是一座監(jiān)獄,是一個(gè)低功率處理器而不是超級(jí)計(jì)算機(jī),是汽車中將剎車踏板掛在剎車上的網(wǎng)絡(luò)而不是因特網(wǎng)。作為架構(gòu)的一部分,設(shè)計(jì)師必須解決系統(tǒng)不能做什么(或者做得很好)與將要做什么。
在計(jì)算機(jī)科學(xué)中,系統(tǒng)設(shè)計(jì)存在著一種危險(xiǎn),這是眾所周知的,它被稱為第二系統(tǒng)綜合征,即首先構(gòu)建一個(gè)或許把一些事做得很好的系統(tǒng),然后再提出一個(gè)試圖把所有事情都做得很好的替代方案的趨勢(shì)。
2. 作為一個(gè)結(jié)果
在建筑設(shè)計(jì)實(shí)踐中,設(shè)計(jì)通常會(huì)產(chǎn)生一份結(jié)果。也有一些例外,例如排房,其中一個(gè)設(shè)計(jì)會(huì)建造很多次,但大多數(shù)建筑物都只有一座。在描述結(jié)果時(shí),架構(gòu)這個(gè)術(shù)語(yǔ)通常意味著一類設(shè)計(jì),以其最顯著的特征為代表(例如飛拱)。這個(gè)術(shù)語(yǔ)適用于這個(gè)抽象類,盡管架構(gòu)師必須在建筑團(tuán)隊(duì)接管之前將建筑描述到非常精細(xì)的程度。
當(dāng)計(jì)算機(jī)科學(xué)家重新使用架構(gòu)這個(gè)術(shù)語(yǔ)時(shí),他們稍微重新定義了一下。關(guān)于因特網(wǎng),有很多不同的網(wǎng)絡(luò)都是基于同樣的設(shè)計(jì):我們稱之為“因特網(wǎng)”的公共全球網(wǎng)絡(luò),屬于企業(yè)、軍隊(duì)等的私有網(wǎng)絡(luò),以及金融網(wǎng)絡(luò)等特殊用途的網(wǎng)絡(luò)。
在這種環(huán)境下,架構(gòu)一詞僅描述所構(gòu)建的部分內(nèi)容,給定示例的大部分設(shè)計(jì)過程都發(fā)生在之后的環(huán)節(jié)中,可能由不同的組來描述。
3. 作為一門學(xué)科
“真正的”建筑師——那些設(shè)計(jì)樓房的人——去學(xué)校里學(xué)習(xí)這一行業(yè)。作為外行,了解他們的培養(yǎng)方式對(duì)于我們也是有教育意義的。架構(gòu)(相對(duì)于結(jié)構(gòu)工程)不是建立在基礎(chǔ)科學(xué)與工程原理之上的設(shè)計(jì)學(xué)科。建筑師通常不關(guān)心結(jié)構(gòu)工程等問題,并將這些留給別人。
當(dāng)然,技術(shù)考慮可能需要盡早進(jìn)入設(shè)計(jì)過程,因?yàn)榻ㄖ熞幚碇T如能源效率或抗震等問題,但是建筑師主要是在設(shè)計(jì)過程中訓(xùn)練出來的。他們學(xué)的不是工程而是建筑。他們通過案例研究來學(xué)習(xí),需要觀察大量的建筑物,看它們有多適合(或不適合),看它們是否滿足用戶的需求,在視覺上是否有吸引力,如何處理設(shè)計(jì)權(quán)衡,等等。
在計(jì)算機(jī)科學(xué)中,我們往往希望設(shè)計(jì)能基于強(qiáng)大的工程基礎(chǔ)、具有限制性的理論以及優(yōu)先的設(shè)計(jì)選項(xiàng)等,但(至少在過去)系統(tǒng)架構(gòu)的大部分業(yè)務(wù)都更類似于建筑師的業(yè)務(wù)(例如,從以前的設(shè)計(jì)中學(xué)習(xí),問問什么運(yùn)轉(zhuǎn)良好、什么效果不佳,問問這個(gè)設(shè)計(jì)是否與目標(biāo)相符合)。
我們?cè)诶碚摵蛯?shí)踐方面對(duì)計(jì)算機(jī)科學(xué)家進(jìn)行訓(xùn)練,但往往不贊成研究以前的設(shè)計(jì),我們認(rèn)為它們“不科學(xué)”或“未基于基本原理”。
我個(gè)人對(duì)試圖使架構(gòu)更加嚴(yán)謹(jǐn)而感到興奮,但是不應(yīng)該用“憑直覺”設(shè)計(jì)這樣的短語(yǔ)來反對(duì)我們今天所做的事情。我們的學(xué)科是一門設(shè)計(jì)學(xué)科,就像建筑架構(gòu)一樣,我們應(yīng)該努力超越它,而不是摒棄它。
因此,如果因特網(wǎng)的架構(gòu)不是完整的規(guī)范,而只是該規(guī)范的一部分,那么架構(gòu)中包含哪些內(nèi)容呢?我們可以說說不包括什么。看看基于因特網(wǎng)技術(shù)的所有不同網(wǎng)絡(luò)的例子,或者全球因特網(wǎng)的不同區(qū)域,試著發(fā)現(xiàn)它們的不同之處。我們看到它們?cè)谛阅?、彈性、?duì)移動(dòng)性的容忍、對(duì)安全性的關(guān)注等方面存在差異。
這個(gè)級(jí)別的設(shè)計(jì)決策構(gòu)建在核心架構(gòu)之上,但是沒有被核心架構(gòu)指定。那么,我們應(yīng)該在這個(gè)核心架構(gòu)中看到什么呢?
02 網(wǎng)絡(luò)架構(gòu)的要素
我確定了可以決定某個(gè)特定問題是否上升到架構(gòu)級(jí)別的幾個(gè)標(biāo)準(zhǔn):對(duì)于系統(tǒng)的正常工作,是否需要就該問題達(dá)成一致;就該問題達(dá)成一致是否方便;該問題是否定義了系統(tǒng)的基本模塊性或功能依賴;或者該問題隨著時(shí)間的推移是穩(wěn)定的這一點(diǎn)是否重要。
1. 對(duì)于系統(tǒng)的正常工作,我們必須一致同意的問題
例如,因特網(wǎng)架構(gòu)是基于包的使用,以及假設(shè)包頭總是具有相同的格式(不同的設(shè)計(jì)可能允許在不同的區(qū)域使用不同的格式,在這種情況下,架構(gòu)可能會(huì)選擇描述為所需的轉(zhuǎn)換提供什么樣的架構(gòu)支持)。
另一個(gè)例子是,當(dāng)我們第一次設(shè)計(jì)因特網(wǎng)時(shí),認(rèn)為設(shè)計(jì)依賴于單一的全球地址空間。現(xiàn)在很顯然這種假設(shè)是不必要的,不需要就地址的統(tǒng)一含義達(dá)成全球一致。網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備或“NAT箱”,允許因特網(wǎng)邊緣的區(qū)域使用私有地址空間,并僅在數(shù)據(jù)包向外傳輸?shù)焦惨蛱鼐W(wǎng)時(shí)才將這些地址轉(zhuǎn)換為全局路由地址。
有趣的是,一旦因特網(wǎng)設(shè)計(jì)師意識(shí)到他們可以使用具有不同地址空間的區(qū)域來構(gòu)建網(wǎng)絡(luò),就不需要急于擴(kuò)展架構(gòu)來對(duì)不相交地址空間是如何互連的提供任何支持或指導(dǎo)。
2. 便于達(dá)成一致的問題
我們沒有要求應(yīng)用使用域名系統(tǒng)(DNS),但由于基本上所有應(yīng)用設(shè)計(jì)人員都使用它,因此它已經(jīng)強(qiáng)制成為因特網(wǎng)的一部分,盡管DNS不是最初設(shè)計(jì)的一部分。類似地,盡管通信應(yīng)用沒有必要使用TCP,但是許多應(yīng)用都依賴于它,以至于它也成為因特網(wǎng)的強(qiáng)制組成部分。
3. 系統(tǒng)的基本模塊性
計(jì)算機(jī)科學(xué)使用模塊這個(gè)詞來描述系統(tǒng)的子組件:一個(gè)模塊有一個(gè)特定的接口,通過這個(gè)接口可以連接到系統(tǒng)的其他部分,而接口下面的模塊內(nèi)部結(jié)構(gòu)是隱藏的,不能從模塊外部訪問。
模塊的設(shè)計(jì)人員通常會(huì)保持接口規(guī)范不變,因?yàn)槠渌K可能依賴于該接口,但是可以自由更改模塊的內(nèi)部結(jié)構(gòu),因?yàn)檫@些是模塊的私有結(jié)構(gòu)。因特網(wǎng)協(xié)議(IP)的規(guī)范定義了三個(gè)模塊接口。它定義了兩層接口:服務(wù)接口(在其上構(gòu)建更高級(jí)別的服務(wù))和IP層下的技術(shù)接口。它還(隱式地和部分地)定義了AS接口:因特網(wǎng)中不同AS之間的接口。
服務(wù)接口是因特網(wǎng)的盡力而為包級(jí)的傳送模型:如果端節(jié)點(diǎn)發(fā)送一個(gè)數(shù)據(jù)包,并在數(shù)據(jù)包中使用有效的目的地IP地址,就目前的網(wǎng)絡(luò)能力而言,因特網(wǎng)的路由器將把數(shù)據(jù)包轉(zhuǎn)發(fā)到由該IP地址定義的目的接口。服務(wù)接口隱藏了如何使用特定技術(shù)在因特網(wǎng)內(nèi)提供通信路徑的所有細(xì)節(jié)。
因此,這個(gè)服務(wù)接口定義了網(wǎng)絡(luò)和端節(jié)點(diǎn)之間的抽象接口。該接口的技術(shù)細(xì)節(jié)依賴于用于連接到端節(jié)點(diǎn)的特定網(wǎng)絡(luò)技術(shù),并根據(jù)技術(shù)的具體情況而有所不同,因此這些細(xì)節(jié)不屬于架構(gòu)規(guī)范的一部分。
4. 功能依賴
架構(gòu)的一個(gè)方面是明確設(shè)計(jì)的功能依賴。我將用因特網(wǎng)來說明這意味著什么。
因特網(wǎng)的基本操作很簡(jiǎn)單。路由器在后臺(tái)計(jì)算路由表,這樣它們就知道到因特網(wǎng)所有部分的路由。當(dāng)收到數(shù)據(jù)包時(shí),它們會(huì)查找最佳的路由,并將數(shù)據(jù)包發(fā)送到該路由上。雖然在因特網(wǎng)內(nèi)有很多東西在運(yùn)行,但在內(nèi)核上,它所做的就是這個(gè)。因特網(wǎng)的正常運(yùn)行必然取決于路由器的正常運(yùn)行。
但是因特網(wǎng)還需要什么來提供服務(wù)呢?事實(shí)上,因特網(wǎng)的早期設(shè)計(jì)師試圖限制使用的服務(wù)或要運(yùn)行的組件的數(shù)量,以確保數(shù)據(jù)包流動(dòng)。早期的設(shè)計(jì)目標(biāo)如下:“如果有兩臺(tái)計(jì)算機(jī)掛到網(wǎng)絡(luò)上,并且每臺(tái)計(jì)算機(jī)都知道另一臺(tái)計(jì)算機(jī)的地址,那么它們應(yīng)該能夠通信。不應(yīng)當(dāng)再需要其他任何東西”。
這種設(shè)計(jì)偏好可以表示為“最少功能依賴”的目標(biāo)。一些互聯(lián)網(wǎng)設(shè)計(jì)建議具有更多的功能依賴——它們依賴于更多的服務(wù)來啟動(dòng)和運(yùn)行,從而使基本通信成功。在出錯(cuò)時(shí),它們正在用(或許)更弱的彈性來?yè)Q取功能。
5. 系統(tǒng)中被視為持久不變的方面
在像因特網(wǎng)這樣的系統(tǒng)中,我們知道很多東西將會(huì)改變。事實(shí)上,變化、升級(jí)和替換系統(tǒng)某些方面的能力,是成功長(zhǎng)壽的關(guān)鍵。
但是在某種程度上,有些方面看起來像是持久不變的,將它們指定為設(shè)計(jì)的一部分可以提供穩(wěn)定的點(diǎn),系統(tǒng)的其他部分可以圍繞這些點(diǎn)向前演化。
03 總結(jié):關(guān)于架構(gòu)的思考
對(duì)于我所說的架構(gòu)這個(gè)詞,我已經(jīng)有了一個(gè)基本的概念。在我看來,一個(gè)關(guān)鍵的原則是架構(gòu)的極簡(jiǎn)性。在計(jì)算機(jī)科學(xué)的背景下,系統(tǒng)的架構(gòu)不應(yīng)該試圖描述系統(tǒng)的每個(gè)方面。
這種架構(gòu)的概念似乎與建筑物的架構(gòu)有所不同。當(dāng)樓房建筑師把設(shè)計(jì)圖交給建造者時(shí),規(guī)范就會(huì)完整到細(xì)節(jié)——不僅僅是形狀和結(jié)構(gòu),還有電源插座的位置。
但是我不認(rèn)為大部分決策是架構(gòu)性的。就像我之前說的,建筑物的架構(gòu)和像因特網(wǎng)這樣的人工制品的架構(gòu)之間的區(qū)別之一是,有很多網(wǎng)絡(luò)是使用相同的因特網(wǎng)技術(shù)構(gòu)建的,而不僅僅是一個(gè)。如果可以在不同的環(huán)境中使用因特網(wǎng)技術(shù),則會(huì)有明顯的好處:商業(yè)產(chǎn)品更便宜,也可能更成熟,幾乎所有計(jì)算機(jī)系統(tǒng)都有相關(guān)的軟件,等等。
然而,對(duì)于安全性、彈性以及其他方面,這些網(wǎng)絡(luò)可能沒有完全相同的要求,所以架構(gòu)的力量不在于定義了如何構(gòu)建網(wǎng)絡(luò)(就像建筑規(guī)劃描述如何建造樓房一樣),而在于允許這些需求得到滿足,或許在不同的環(huán)境中以不同的方式來滿足這些需求。
改述一下愛因斯坦的話,我認(rèn)為架構(gòu)應(yīng)該盡可能小,但不要過小。有人可能會(huì)說,正如我所描述的,因特網(wǎng)架構(gòu)最基本的方面是其偏好極簡(jiǎn)性??紤]到這一觀點(diǎn),給定架構(gòu)所要解決的需求,我們認(rèn)為的網(wǎng)絡(luò)系統(tǒng)架構(gòu)的范圍,應(yīng)該只包括那些屬于我在這里列出的框架內(nèi)的那些方面。
關(guān)于作者:大衛(wèi)·D. 克拉克(David D. Clark) ,麻省理工學(xué)院(MIT)計(jì)算機(jī)科學(xué)與人工智能實(shí)驗(yàn)室高級(jí)研究科學(xué)家。20世紀(jì)80年代曾擔(dān)任因特網(wǎng)架構(gòu)組主席,長(zhǎng)期主持因特網(wǎng)的設(shè)計(jì)工作,以及未來互聯(lián)網(wǎng)技術(shù)的研究工作。
本文摘編自《互聯(lián)網(wǎng)的設(shè)計(jì)和演化》,經(jīng)出版方授權(quán)發(fā)布。