什麼是架構?網絡架構中都有什麼?終於有人講明白了

作者:大衛 ·D. 克拉克(David D. Clark)

來源:大數據 DT(ID:hzdashuju)

01 什麼是架構?

架構是一個過程、一個結果和一門學科。

架構的三個方面都適用於 “真實的建築” 與計算機科學。

1. 作爲一個過程

我的定義有兩個重要的方面:將組件整合在一起並應用於某個目的。

2. 作爲一個結果

在建築設計實踐中,設計通常會產生一份結果。也有一些例外,例如排房,其中一個設計會建造很多次,但大多數建築物都只有一座。在描述結果時,架構這個術語通常意味着一類設計,以其最顯著的特徵爲代表(例如飛拱)。這個術語適用於這個抽象類,儘管架構師必須在建築團隊接管之前將建築描述到非常精細的程度。

當計算機科學家重新使用架構這個術語時,他們稍微重新定義了一下。關於因特網,有很多不同的網絡都是基於同樣的設計:我們稱之爲 “因特網” 的公共全球網絡,屬於企業、軍隊等的私有網絡,以及金融網絡等特殊用途的網絡。

在這種環境下,架構一詞僅描述所構建的部分內容,給定示例的大部分設計過程都發生在之後的環節中,可能由不同的組來描述。

3. 作爲一門學科

“真正的” 建築師——那些設計樓房的人——去學校裏學習這一行業。作爲外行,瞭解他們的培養方式對於我們也是有教育意義的。架構(相對於結構工程)不是建立在基礎科學與工程原理之上的設計學科。建築師通常不關心結構工程等問題,並將這些留給別人。

當然,技術考慮可能需要儘早進入設計過程,因爲建築師要處理諸如能源效率或抗震等問題,但是建築師主要是在設計過程中訓練出來的。他們學的不是工程而是建築。他們通過案例研究來學習,需要觀察大量的建築物,看它們有多適合(或不適合),看它們是否滿足用戶的需求,在視覺上是否有吸引力,如何處理設計權衡,等等。

在計算機科學中,我們往往希望設計能基於強大的工程基礎、具有限制性的理論以及優先的設計選項等,但(至少在過去)系統架構的大部分業務都更類似於建築師的業務(例如,從以前的設計中學習,問問什麼運轉良好、什麼效果不佳,問問這個設計是否與目標相符合)。

我們在理論和實踐方面對計算機科學家進行訓練,但往往不贊成研究以前的設計,我們認爲它們 “不科學” 或“未基於基本原理”。

我個人對試圖使架構更加嚴謹而感到興奮,但是不應該用 “憑直覺” 設計這樣的短語來反對我們今天所做的事情。我們的學科是一門設計學科,就像建築架構一樣,我們應該努力超越它,而不是摒棄它。

因此,如果因特網的架構不是完整的規範,而只是該規範的一部分,那麼架構中包含哪些內容呢?我們可以說說不包括什麼。看看基於因特網技術的所有不同網絡的例子,或者全球因特網的不同區域,試着發現它們的不同之處。我們看到它們在性能、彈性、對移動性的容忍、對安全性的關注等方面存在差異。

這個級別的設計決策構建在覈心架構之上,但是沒有被核心架構指定。那麼,我們應該在這個核心架構中看到什麼呢?

02 網絡架構的要素

我確定了可以**決定某個特定問題是否上升到架構級別的幾個標準:**對於系統的正常工作,是否需要就該問題達成一致;就該問題達成一致是否方便;該問題是否定義了系統的基本模塊性或功能依賴;或者該問題隨着時間的推移是穩定的這一點是否重要。

1. 對於系統的正常工作,我們必須一致同意的問題

例如,因特網架構是基於包的使用,以及假設包頭總是具有相同的格式(不同的設計可能允許在不同的區域使用不同的格式,在這種情況下,架構可能會選擇描述爲所需的轉換提供什麼樣的架構支持)。

另一個例子是,當我們第一次設計因特網時,認爲設計依賴於單一的全球地址空間。現在很顯然這種假設是不必要的,不需要就地址的統一含義達成全球一致。網絡地址轉換設備或 “NAT 箱”,允許因特網邊緣的區域使用私有地址空間,並僅在數據包向外傳輸到公共因特網時纔將這些地址轉換爲全局路由地址。

有趣的是,一旦因特網設計師意識到他們可以使用具有不同地址空間的區域來構建網絡,就不需要急於擴展架構來對不相交地址空間是如何互連的提供任何支持或指導。

2. 便於達成一致的問題

我們沒有要求應用使用域名系統(DNS),但由於基本上所有應用設計人員都使用它,因此它已經強制成爲因特網的一部分,儘管 DNS 不是最初設計的一部分。類似地,儘管通信應用沒有必要使用 TCP,但是許多應用都依賴於它,以至於它也成爲因特網的強制組成部分。

3. 系統的基本模塊性

計算機科學使用模塊這個詞來描述系統的子組件:一個模塊有一個特定的接口,通過這個接口可以連接到系統的其他部分,而接口下面的模塊內部結構是隱藏的,不能從模塊外部訪問。

模塊的設計人員通常會保持接口規範不變,因爲其他模塊可能依賴於該接口,但是可以自由更改模塊的內部結構,因爲這些是模塊的私有結構。因特網協議(IP)的規範定義了三個模塊接口。它定義了兩層接口:服務接口(在其上構建更高級別的服務)和 IP 層下的技術接口。它還(隱式地和部分地)定義了 AS 接口:因特網中不同 AS 之間的接口。

服務接口是因特網的盡力而爲包級的傳送模型:如果端節點發送一個數據包,並在數據包中使用有效的目的地 IP 地址,就目前的網絡能力而言,因特網的路由器將把數據包轉發到由該 IP 地址定義的目的接口。服務接口隱藏瞭如何使用特定技術在因特網內提供通信路徑的所有細節。

因此,這個服務接口定義了網絡和端節點之間的抽象接口。該接口的技術細節依賴於用於連接到端節點的特定網絡技術,並根據技術的具體情況而有所不同,因此這些細節不屬於架構規範的一部分。

4. 功能依賴

架構的一個方面是明確設計的功能依賴。我將用因特網來說明這意味着什麼。

因特網的基本操作很簡單。路由器在後臺計算路由表,這樣它們就知道到因特網所有部分的路由。當收到數據包時,它們會查找最佳的路由,並將數據包發送到該路由上。雖然在因特網內有很多東西在運行,但在內核上,它所做的就是這個。因特網的正常運行必然取決於路由器的正常運行。

**但是因特網還需要什麼來提供服務呢?**事實上,因特網的早期設計師試圖限制使用的服務或要運行的組件的數量,以確保數據包流動。早期的設計目標如下:“如果有兩臺計算機掛到網絡上,並且每臺計算機都知道另一臺計算機的地址,那麼它們應該能夠通信。不應當再需要其他任何東西”。

這種設計偏好可以表示爲 “最少功能依賴” 的目標。一些互聯網設計建議具有更多的功能依賴——它們依賴於更多的服務來啓動和運行,從而使基本通信成功。在出錯時,它們正在用(或許)更弱的彈性來換取功能。

5. 系統中被視爲持久不變的方面

在像因特網這樣的系統中,我們知道很多東西將會改變。事實上,變化、升級和替換系統某些方面的能力,是成功長壽的關鍵。

但是在某種程度上,有些方面看起來像是持久不變的,將它們指定爲設計的一部分可以提供穩定的點,系統的其他部分可以圍繞這些點向前演化。

03 總結:關於架構的思考

對於我所說的架構這個詞,我已經有了一個基本的概念。在我看來,**一個關鍵的原則是架構的極簡性。**在計算機科學的背景下,系統的架構不應該試圖描述系統的每個方面。

這種架構的概念似乎與建築物的架構有所不同。當樓房建築師把設計圖交給建造者時,規範就會完整到細節——不僅僅是形狀和結構,還有電源插座的位置。

但是我不認爲大部分決策是架構性的。就像我之前說的,建築物的架構和像因特網這樣的人工製品的架構之間的區別之一是,有很多網絡是使用相同的因特網技術構建的,而不僅僅是一個。如果可以在不同的環境中使用因特網技術,則會有明顯的好處:商業產品更便宜,也可能更成熟,幾乎所有計算機系統都有相關的軟件,等等。

然而,對於安全性、彈性以及其他方面,這些網絡可能沒有完全相同的要求,所以架構的力量不在於定義瞭如何構建網絡(就像建築規劃描述如何建造樓房一樣),而在於允許這些需求得到滿足,或許在不同的環境中以不同的方式來滿足這些需求。

改述一下愛因斯坦的話,我認爲架構應該儘可能小,但不要過小。有人可能會說,正如我所描述的,因特網架構最基本的方面是其偏好極簡性。考慮到這一觀點,給定架構所要解決的需求,我們認爲的網絡系統架構的範圍,應該只包括那些屬於我在這裏列出的框架內的那些方面。

**關於作者:**大衛 ·D. 克拉克(David D. Clark) ,麻省理工學院(MIT)計算機科學與人工智能實驗室高級研究科學家。20 世紀 80 年代曾擔任因特網架構組主席,長期主持因特網的設計工作,以及未來互聯網技術的研究工作。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/tKsjZ9clWDWxOQVxmPePRQ