- 分布式實時處理系統:原理、架構與實現
- 盧譽聲
- 1753字
- 2019-01-03 10:50:26
2.3 分層架構
有了大致的思路之后,讓我們來想一想如何在數據鏈路的基礎上構建一個完整的網絡體系。
上一節中我們講解了如何構建可靠的數據鏈路。雖然這個數據鏈路是我們附加在物理鏈路之上的抽象概念,但這種數據鏈路我們一般都會使用純硬件實現。但是如果想仿照數據鏈路使用硬件實現接下來的功能,就不是那么簡單了。
例如,接下來要實現數據的轉發功能。但是問題是,我們如何知道要將數據轉發到何處呢?直接將整個網絡的拓撲結構存儲在每個機器節點里嗎?如果是這樣,當機器節點增加時需要將網絡中的所有機器節點數據全部更新一遍,這無疑是費時費力的(比如像圖2-3那樣)。那么我們就需要實現一種復雜的自學習式的尋路算法,如果直接使用電路實現成本極高。同時我們還要確保數據可以可靠地被轉發到目的機器節點,如果數據在路途中丟失或損壞我們也要采取一定的措施。此外,如果軟件直接使用硬件接口,手動將數據劃分為一個個分組進行傳送,無疑會加大應用軟件的開發成本。
換言之,想要構建一條純硬件的、任意機器節點之間可靠傳輸的數據鏈路成本太高。應該如何解決這些問題呢?
在計算機的世界中,我們將這種問題稱為“高復雜性”問題,而解決高復雜性問題一種慣性思維就是加入中間層。
例如,我們可以將物理鏈路看成一個層,而數據鏈路看成另一個層,如圖2-4所示。

圖2-4 2層模型
圖2-4中上面一層稱為數據鏈路層,下面一層稱為物理層。通過之前的講解,可以看到我們完全是在物理層的基礎上實現了一個數據鏈路層,保證相鄰機器節點之間的可靠數據通道。那如果我們在數據鏈路層的基礎上再加一個層,這個層假設相鄰機器節點之間有可靠且可分數復用的數據通道,而該層只考慮在這種可靠的數據通道中實現節點的分組轉發功能,并使用軟件技術實現這種算法,是不是可以降低整個系統的復雜度呢?
實際上就是如此。
所以我們就在這上面再加一層,稱之為網絡層(就是在網絡中尋找目標機器節點),該層主要使用軟件實現,如圖2-5所示。

圖2-5 3層網絡模型
但現在又出現新的問題——同一個機器節點上可能會運行不同的軟件程序,如果A機器節點的程序1向B機器節點的程序2發送數據,A機器節點的程序3也會向B機器節點的程序4發送數據,那么B機器節點接收到數據時該如何區分呢?此外,網絡層依然是分組傳送,如果直接讓軟件自己手動對數據進行分組開發成本過高,如果可以將數據傳輸看成無限字節流的傳輸就太好了。但直接在“尋找路徑”這一層實現這些功能又勢必會增加軟件的復雜度。
所以我們故技重施,再加一層,用這一層實現端到端(也就是應用程序之間的)的字節流數據傳輸通道,我們稱之為傳輸層。目前的分層結構如圖2-6所示。

圖2-6 4層網絡模型
最后,雖然所有的應用程序都可以將數據轉換為字節流,但普通的字節流是毫無意義的,為了讓字節流變得有意義,需要雙方遵守同樣的規則來理解一個字節流,也就是雙方要有一個軟件層的解釋字節流的協議。很明顯傳輸層并不負責這件事情,而且由于應用程序類型眾多,傳輸層如果還要考慮解釋字節流,負擔就太重了。因此我們還需要再加一層,不同的應用程序在這一層上建立自己的協議,由于這一層完全是面向應用程序的,因此我們稱之為應用層。
現在的層次結構如圖2-7所示。

圖2-7 5層網絡模型
到現在我們終于可以松口氣了,你會發現,我們已經一步步將整個分布式網絡的架構構建出來了。
我們可以看出,在解決這個問題的過程中,為了保證網絡的簡單性,我們根據實際問題將整個網絡劃分成了多個邏輯層次,每個層次專注解決一個或幾個相關問題。這樣一來每個層次都可以直接使用下一層次提供的“服務”,降低了每個層次的復雜性,進一步降低整個網絡構建的成本。
幸運的是,經過實踐打磨出的TCP/IP協議正采用了這種分層的思想,TCP/IP的分層結構如圖2-8所示。

圖2-8 TCP/IP協議棧
提示 Request For Comments(RFC)是一系列以編號排定的文件。文件收集了有關互聯網的信息,以及UNIX和互聯網社區的軟件文件。目前RFC文件由Internet Society(ISOC)贊助發行。基本的互聯網通信協議在RFC文件內都有詳細說明。對這些概念感興趣的讀者可以訪問http://www.ietf.org/rfc.html了解詳細信息。
其中物理層在協議之外。而數據鏈路層和我們的一樣,保證相鄰通信節點之間的可靠數據傳遞。網絡層負責網絡之間任意兩點數據包的傳送。傳輸層負責端到端的字節流抽象。最后應用層負責構建應用程序協議。
接下來具體介紹如何構建數據鏈路層上的每一層,并引入TCP/IP的一些規范。
- Designing Purpose:Built Drones for Ardupilot Pixhawk 2.1
- 高性能Linux服務器構建實戰:運維監控、性能調優與集群應用
- 異質結原理與器件
- macOS效率手冊
- Ceph分布式存儲實戰
- Hands-On UX Design for Developers
- Kali Linux高級滲透測試
- Django Project Blueprints
- INSTANT Galleria Howto
- Windows Vista終極技巧金典
- Ubuntu Linux操作系統實用教程
- Microsoft Hyper-V Cluster Design
- 辦公自動化教程(Windows7+Office2010)
- Azure Serverless Computing Cookbook
- UNIX傳奇:歷史與回憶