架構學習之從頭開始學架構(2)

架構是什麼?

在我踏進IT界的時候,我身邊的人就在我耳邊說,各種“架構”,我的耳朵都快聽起繭了,所以“架構”是一個常見常聞的詞了。我們會對新員工培訓整個系統的架構,開發項目的時候在PDCP(IBM項目管理流程中的,總的來說就是項目怎麼做)階段的時候,會對項目整個技術架構做評審,或者學習業界比較有名的開源系統(例如Kafka、RocketMq 、Apollo、Dubbo)的架構,研究大公司的架構實現(例如,支付寶架構、京東架構,美團架構等等一系列)雖然架構離我們程序員近在咫尺,可以卻遠在千里,如果要探索架構的時候很難有人能夠定義或者解釋的比較明確,如果想把架構是什麼解釋的比較全面的話,我認爲需要和我們常見的幾個概念有關係那就是:系統、子系統、模塊、組件、框架。爲了方便大家的理解請理解下面這個圖。
在這裏插入圖片描述

系統的定義

中國著名學者錢學森認爲:系統是由相互作用相互依賴的若干組成部分結合而成的,具有特定功能的有機整體,而且這個有機整體又是它從屬的更大系統的組成部分。運動着的若干部分,在相互聯繫、相互作用之中組成的具有某種確定功能的整體,謂之系統。

總結系統定義:
相互聯繫:系統是由相互作用相互依賴的若干有關聯關係而組成的,並不是獨立存在的。也不是毫不相干的個體,比如手機和顯示器不能成爲一個系統,但是 顯示器,CPU,主板,內存,鼠標,鍵盤,機箱等組合起來就可以是一臺個人電腦。
嚴格規範:系統內部都是按照嚴格規範規定協調和分工每個模塊進行相應的工作,不能各自獨立完成某個事件和工作單元。
能力更強:系統所產生的能力要遠大於個體能力之和,系統在個體組合後,將會產生更強的新能力,就好個人電腦能讓我們有聯網購物,編寫軟件的能力,但是CPU,內存,主板,鍵盤這些都不具備這樣的能力。

子系統的定義

這個跟系統概念差不多,邏輯思維上有差異,就是系統中可能有很多的子系統,也有可能這個子系統也是一個非常龐大的系統。所以系統和子系統不是存在大小關係,而是宏觀上的認識。

1,支付寶是一個系統,它裏面就有登錄子系統,記賬子系統,聊天子系統,花唄子系統,借唄子系統。
2,登錄子系統又可以分爲積分子系統,短信子系統,防僞子系統,驗證碼子系統,安全子系統等。
3,這個裏面的短信子系統,驗證碼子系統不能在分的子系統了,但可以有很多的模塊和組件來劃分,在到物理上的話,就是基礎設施了。比如 redis,mysql,mq,lucene,solr。

模塊和組件

模塊和組件都是系統的組成部分,只是從不同的角度拆分系統而已。

從邏輯的角度來拆分系統後,得到的單元就是“模塊”;從物理的角度來拆分系統後,得到的單元就是“組件”。劃分模塊的主要目的是職責分離;劃分組件的主要目的是單元複用。其實,“組件”的英文 component 也可翻譯成中文的“零件”一詞,“零件”更容易理解一些,“零件”是一個物理的概念,並且具備“獨立且可替換”的特點。
我用一個列子來說明一下,可以加深大家對這些概念的理解。如果一個圖書管理系統,我們可以拆分爲,登錄模塊,人員信息模塊,圖書管理模塊,這樣我們就把一個系統從邏輯職責上拆分了。這樣更加的具有高內聚性,低耦合。物理上,我們可以有任務分配器(nginx,openresty,tengine),web容器(tomcat,Apache,jetty),數據庫(mysql,Cassandra,oracle)這些都可以是零件,也可以替換。 這樣組合在一起它就是一個系統的架構了。

框架和架構

這2個詞語我覺得很多人基本上都會混在一起說,很多人都說我們是ssm架構,ssh架構,sbm架構,sbc架構,dubbo架構等等。框架是和架構比較相似的概念,且兩者有較強的關聯關係,所以在實際工作中,這兩個概念有時我們容易分不清楚。
從定義來講框架和架構還是很容易區分的:
框架:英文單詞是"framework",框架是注重規範約束。就比如spring,給我們提供MVC規範,而且還有很多基礎功能來快速幫助我們實現需求,比如(@Controller ,@Service ,security,)
架構:英文單詞是"architecture" ,架構就是基礎結構。但是基礎結構又沒有明確的概念,我們利用不同的角度和維度來分不同的結構,我已經在模塊和組件中已經有過不同維度和角度的劃分了。我們看一下圖書管理系統的圖解架構。
邏輯上:
在這裏插入圖片描述
物理架構上:
在這裏插入圖片描述
框架上:
我們可以利用MVC開發的規範來開發系統。所有在開發架構上,我們又變成了MVC架構。
在這裏插入圖片描述

總結架構

我們要做的東西都能抽象爲一個系統,架構既可做動詞也可做名詞,作爲動詞就代表系統的設計,作爲名詞就代表系統的表現形式。
所以架構首先繼承了系統的屬性:
0、系統整體要有近期和遠期價值
1、由多個有關係的個體組成
2、整體大於個體之和,能創造出新的價值
系統的架構從無到有由人來執行,所以也具備人思考和交流的屬性:
0、思維帶寬較小,不能同時考慮很多事情,需要把系統做分解(模塊和組件)
1、線性思想和交流,多維關係要降級到二維關係
2、人作爲個體的個性化-也即多樣性,架構沒用統一標準,適合,簡單,能演進纔是最重要。

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