分層思想

近來重新複習了計算機網絡原理,在書中提及了一個分層思想,略有感觸。

 

分層思想在網絡當中的應用

分層的目的之一是讓層與層之間獨立,一層變化並不會影響另一層。僅這麼說,可能我們沒有直觀的認識,那就舉個例子吧!像QQ這樣的應用層軟件,ISP由移動切換成電信,QQ依然可以正常使用的,QQ這個程序並不用做任何的變動,這其實就是網絡層發生了改變,而應用層並不用變化;假如因爲網絡的變化,還要重寫程序,那得多麻煩!所以分層思想很有必要。

 

分層思想在電路中的應用

CPU內部的電路當中也是用到了分層思想,寄存器內部的立即數的下一個地址單元往往存儲也不是具體要操作的數,而是某個地址,要操作的數存放在這個地址空間內部,因爲這樣當加數與被加數改變時,運算模式不用改變。而編程當中的變量概念,我猜可能就是從這裏得到的啓示。

分層思想在編程中的應用

假如我在程序當中想打印我的名字:

print(“zhanghe”)

這樣可以,沒有問題,假如這個程序有幾萬行,現在要把zhanghe改變成zhangjia的話,那麼肯定要改好多行,很不方便,假如我們使用分層的思想,我們完全可以把zhanghe定義一個變量,要改動的時間只改動一個變量即可,如下:

NAME=‘zhanghe’

print(NAME)

實際案例

大家不要小看分層的思想,由其是開發人員,下面我們來舉一個實際的例子,讓你看到如果沒有使用分層思路會造成多大的麻煩!

 

某醫院要連接醫保中心的網絡,醫保中心要求各醫院的IP地址要統一規劃,要求醫院更改主機的IP地址,問題是各個醫院原本是有IP地址,不能隨便改動,一旦改動客戶端就連接不上數據庫了,爲什麼這樣?因爲在客戶端軟件在開發時直接把數據庫所在的主機IP寫入到了客戶端程序當中了,一旦數據庫改變了地址,客戶端就連接不上了。連上醫保網絡就連接不上數據庫,連接上數據庫就不能連接醫保網絡!這家醫院的網絡管理人員陷入了兩難的境地!

 

好了,我們反思一下,造成這個問題原因是什麼!造成這個問題的原因就是應用層和網絡層混到一起了,應用層的代碼裏面混合了網絡層的IP地址,應該將其分開的。如果再思考的稍微深一些,我認爲根本原因是開發人員僅關注功能的實現,醫院讓開發一款客戶端軟件,然後開發人員就着急開發出來了,開發人員根本沒有考慮到後期網絡會變動,肯定也沒有考慮安全性,這就造成了這個軟件沒有“彈性”,不能適應一個變化的網絡環境。

 

我們不能站着說話不腰疼,我們要站在開發人員的角度去考慮這個問題,那麼開發人員應該怎樣做才能使這個客戶端軟件能夠適應一個變化的網絡環境呢?在程序代碼要引用到IP地址是必須的,但又不能直接寫IP地址,怎麼辦呢?我們可以在代碼裏面通過域名或者計算機名進行引用,而不是直接引用IP地址。當數據庫主機更改了IP地址後,客戶端程序可以通過DNS解析到新的數據庫主機的IP地址,這樣應用層和網絡層就沒有關聯了。

 

哦,對了,上面這些解釋都只是“馬後炮”,因爲你不能穿越時空,回到客戶端程序開發之前,告訴開發人員不要把Ip地址寫入到程序裏面。醫保中心的網絡肯定是要加的,但讓開發公司把客戶端的程序再重寫一遍也不太現實,那麼到底這個問題應該怎麼解決呢?好在現實的生活也並不是非黑即白的,還是有解決的辦法的,解決辦法也很簡單,但是需要妥協,就是給網卡配置兩個IP地址,需要連接數據庫的時候就用原來那個地址,需要連接醫保時再切換到醫保所在的網段,這無疑給網絡管理人員加大了工作量!雖然加大了網絡管理人員的工作量,但這已經是相當好的解決辦法了,即加入了醫保網絡,同時也能連接上數據庫。

 

那麼分層思想對於我們的職業生涯有什麼影響呢?

我認爲分層思想對於IT人員的職業生涯還是影響挺大的,無論是做開發、做網管、做運維、安全都得深入理解分層思想。一個不懂分層的程序員是寫不出好程序的,同樣一個不懂分層的運維人員是不可能把運維工作做好的,最要命的是一個不懂分層思想的IT安全從業者,呃……,不敢想像,我認爲安全問題的根源之一就是分層思想。

 

知道了分層思想對我們有什麼好處呢

好處多多,就從一個學習角度來說吧!我們既然知道了IT行業是分層的,程序員工作在應用層,網絡工程師和運維人員工作在網絡層,通信工程師和硬件工程師在工作物理層和鏈路層,假如我們我們把這幾層都學好了,那就是集開發、運維、網絡、硬件、通信與一體的高級複合型人才,都說AI將來可能會威脅到很多人工作,我覺得肯定不會威脅到這樣的複合型人才,因爲這樣的人才是具有上帝視角的,是人工智能締造者,畢竟人工智能裏面程序也是由程序員寫的,沒有網絡、硬件這些東西人工智能也只是一個傻瓜而已。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章