? ? 之前我們提到了一種分層結(jié)構(gòu)谭网,互聯(lián)網(wǎng)系統(tǒng)是宏觀的上層汪厨,而計(jì)算機(jī)是細(xì)節(jié)的底層實(shí)現(xiàn)∮湓瘢互聯(lián)網(wǎng)系統(tǒng)是由大量計(jì)算機(jī)互相連接而成的劫乱,大致可以分為數(shù)據(jù)傳遞結(jié)構(gòu)织中、服務(wù)提供結(jié)構(gòu)、和終端結(jié)構(gòu)衷戈。每個結(jié)構(gòu)實(shí)際上都不關(guān)心別的結(jié)構(gòu)里的計(jì)算機(jī)具體是什么型號狭吼、如何實(shí)現(xiàn)的,他們只需要關(guān)注如何處理從網(wǎng)絡(luò)端口獲得的信息包殖妇,并將處理好的數(shù)據(jù)分發(fā)給誰刁笙。由于這些“封裝”的存在,我們可以分層的考慮這些問題谦趣,設(shè)計(jì)微觀層面的個體計(jì)算機(jī)系統(tǒng)時(shí)疲吸,也不需要考慮宏觀層面的互聯(lián)網(wǎng)系統(tǒng),只需要按照互聯(lián)網(wǎng)系統(tǒng)的要求設(shè)計(jì)好對接的接口就可以了前鹅。
? ? 在計(jì)算機(jī)系統(tǒng)中摘悴,也有這樣的分層結(jié)構(gòu),最底層的硬件層包括了可以觸碰到的硬盤舰绘、CPU蹂喻、顯卡等等硬件;中間是操作系統(tǒng)層捂寿,是一個對下可以控制各個硬件叉橱,對上可以搭載各種應(yīng)用的軟件系統(tǒng);上層是應(yīng)用層者蠕,也就是給用戶使用的各種軟件應(yīng)用等窃祝。對于硬件層來說,他們所要考慮的是給定一個指令如何運(yùn)轉(zhuǎn)踱侣;操作系統(tǒng)層比較復(fù)雜粪小,他將硬件抽象成軟件的概念,并對他們進(jìn)行管理抡句,比如硬盤的存儲被抽象成了文件管理探膊、CPU的計(jì)算被抽象成了程序的進(jìn)程、網(wǎng)絡(luò)通信和外部輸入輸出被抽象了程序可以訪問的端口待榔;應(yīng)用層利用操作系統(tǒng)抽象出來的接口逞壁,創(chuàng)作出各種應(yīng)用供用戶使用。
? ? 所以在這樣的分層系統(tǒng)中锐锣,用戶只知道應(yīng)用是怎么使用的腌闯,并不需要知道操作系統(tǒng)是怎么安排應(yīng)用的;應(yīng)用只需要知道如何使用操作系統(tǒng)的接口雕憔,并不需要知道具體的硬件是怎么運(yùn)轉(zhuǎn)的姿骏。所以永遠(yuǎn)只有上一層需要知道下一層如何使用,而更上一層對底層是一無所知的斤彼。
? ? 這種分層系統(tǒng)可以說是無處不在分瘦,比如說CPU進(jìn)行計(jì)算的時(shí)候需要數(shù)據(jù)蘸泻,數(shù)據(jù)一般會存儲在CPU帶的緩存上,緩存的讀寫速度非吵懊担快悦施,但是造價(jià)非常貴,所以一般只有幾千字節(jié)大腥ネ拧歼争;那么對于更大的數(shù)據(jù),就需要將內(nèi)存的數(shù)據(jù)一點(diǎn)點(diǎn)換給緩存讀寫渗勘;對于更大的數(shù)據(jù),就需要從硬盤里將數(shù)據(jù)一點(diǎn)點(diǎn)換給內(nèi)存俩莽,再換到緩層上旺坠。分層的首要條件就是封裝,CPU只會找緩存進(jìn)行讀寫扮超,不會去操作內(nèi)存取刃;緩存只會和內(nèi)存接觸,不會直接去找硬盤出刷。
? ? 這個分層系統(tǒng)使得CPU能夠很好的平衡數(shù)據(jù)需求中快速和廉價(jià)兩個關(guān)鍵璧疗。大部分?jǐn)?shù)據(jù)可以在較快速的數(shù)據(jù)設(shè)備中完成,而少部分可以花費(fèi)時(shí)間去向慢速且廉價(jià)的數(shù)據(jù)設(shè)備請求馁龟。
? ? 再比如互聯(lián)網(wǎng)的經(jīng)典TCP/IP分層模型崩侠,最底層網(wǎng)絡(luò)接口層提供了設(shè)備之間進(jìn)行直接數(shù)據(jù)傳遞的方法;第二層的網(wǎng)絡(luò)互連層利用網(wǎng)絡(luò)接口層的方法坷檩,選擇路徑將數(shù)據(jù)從設(shè)備A經(jīng)過若干中間設(shè)備傳遞到遠(yuǎn)距離的設(shè)備B上却音;第三層傳輸層利用第二層的傳輸手段把大量數(shù)據(jù)打包,并確認(rèn)對方能夠收到了矢炼;第四層應(yīng)用層利用第三層可靠的傳輸系瓢,來添加各種協(xié)議,使得傳輸?shù)臄?shù)據(jù)變得有意義句灌,能夠被應(yīng)用所使用夷陋。
? ? 這種分層模型的優(yōu)勢在于,每一層所需要考慮的事情大大減少了胰锌,由于每一層只負(fù)責(zé)有限的部分骗绕,思維強(qiáng)度變低,也可以更可靠的測試资昧。如果沒有這種分層模型爹谭,軟件直接操作數(shù)據(jù)傳輸和網(wǎng)絡(luò)線路。網(wǎng)絡(luò)斷了這種再普通不過的情況榛搔,卻無法測試诺凡;分層之后可以確認(rèn)一定是中間某一層出現(xiàn)了問題东揣,如果別的軟件可以聯(lián)網(wǎng),那就是軟件的問題腹泌;如果家里別的設(shè)備可以聯(lián)網(wǎng)嘶卧,那應(yīng)該是設(shè)備上的問題;如果電腦拿到別的地方可以聯(lián)網(wǎng)凉袱,那應(yīng)該網(wǎng)絡(luò)線路的問題芥吟。
一般的軟件或者網(wǎng)絡(luò)服務(wù)也會有分層系統(tǒng):最底層的數(shù)據(jù)讀寫層,將數(shù)據(jù)存儲到本地硬盤或者網(wǎng)絡(luò)存儲空間中专甩;中間的服務(wù)層钟鸵,處理業(yè)務(wù)邏輯,更新現(xiàn)實(shí)給用戶的頁面涤躲;和最前端的用戶界面棺耍,幫助用戶完成他們的請求,并顯示結(jié)果給用戶种樱。所以簡單來說在網(wǎng)頁上發(fā)送Email的過程是這樣的:用戶請求發(fā)送Email -> 前段顯示Email編輯頁面 -> 用戶完成編寫點(diǎn)擊發(fā)送 -> 前段將數(shù)據(jù)打包成請求包發(fā)送給服務(wù)層 -> 服務(wù)層處理邏輯蒙袍,發(fā)送給對方郵箱,保存到數(shù)據(jù)庫 -> 數(shù)據(jù)層得到請求更新數(shù)據(jù)庫 -> 服務(wù)層告訴前段郵件已經(jīng)保存嫩挤、發(fā)送成功 -> 前端顯示給用戶害幅。
好處依然是每一層需要考慮的事情大大減少,每一層都被很好的封裝岂昭,絕對不會多操心別人的一點(diǎn)事情以现。