小岑的架構學習筆記-架構到底是什麼?

最近在學習極客時間《從0到1學架構》,記一些筆記。

每一個從事技術工作的同學,都有一個成爲架構師的夢想,去從事設計架構方面的工作。那麼架構這個詞具體是什麼?

在我平時的工作中,會進行團隊內部分大功能的架構設計,平時也會通過各種渠道瞭解其他公司的架構設計。

但當我們聊架構的時候,我們具體是在聊什麼?

基礎名詞

在具體定義什麼是架構前,先將架構設計中經常提到的一些名詞,先進行梳理。

系統和子系統

系統

系統泛指由一羣有關聯的個體組成,根據某種規則運作,能完成個別元件不能單獨完成的工作的羣體。它的意思是“總體”“整體”或“聯盟”。

引用的是來自維基百科的定義,有一些特點,如下所示:

關聯: 系統是有一羣有關聯的個體所組成的,沒有關聯的個體不能夠成爲一個系統,也就是說在一個系統內部的東西,肯定是互相有所關聯的。比如說我們在打造一間臥室,不可能把廁所放進臥室,只有當牀,書桌,燈這些東西都在一個房間內時,才組成了臥室。如果從技術系統的角度上來說,我理解就是,一個系統內的功能或者模塊的存在都是爲了這個這個系統的定位服務的,比如說一個負責商戶管理的系統,往往不會把用戶相關的管理放進來。

規則: 一個系統內的個體肯定是按系統統一的規則運作,規定了系統內個體之間分工和協作的方式。比如一個交易系統,會定義校驗模塊,風控模塊,限流模塊,算價模塊,落單模塊,發券模塊等,會定義好每個模塊的職能以及協作的方式,完成整個交易流程。

能力: 個體組合在一起產生了新的系統能力,是單個個體所不具備的,比如汽車能夠載重前進,但汽車中的單個個體抽出來都不具備這樣的能力,比如發動機、變速器、傳動軸、車輪。

子系統

我理解子系統的定義其實和系統是一樣的,一個系統可能就是另一個系統的子系統。拿交易系統舉個例子。

  1. 交易系統本身是一個系統,又包含了支付,退款,結算,下單等子系統
  2. 支付系統裏可能又包含了對接支付系統和處理支付回調的系統。

模塊和組件

維基百科定義如下

軟件模塊(Module)是一套一致而互相有緊密關連的軟件組織。它分別包含了程序和數據結構兩部分。現代軟件開發往往利用模塊作爲合成的單位。模塊的接口表達了由該模塊提供的功能和調用它時所需的元素。模塊是可能分開被編寫的單位。這使它們可再用和允許人員同時協作、編寫及研究不同的模塊。軟件組件定義爲自包含的、可編程的、可重用的、與語言無關的軟件單元,軟件組件可以很容易被用於組裝應用程序中。

我覺得模塊,從個人感受上來說,模塊主要定義的是功能的集合,是爲了職責上進行分離,比如交易系統的下單流程 可能會分爲 校驗模塊,優惠計算模塊,風控模塊,下單模塊等,每個模塊各司其職,只關注在自己的事情,當有一些業務需求變更時,只需要改動相應的模塊,不會影響其他模塊。

我覺得組件的話,從其英文單詞component上,也可以翻譯成零件一次,感覺像是獨立可替換的東西,我個人對組件的理解是一個可複用的東西,可以根據需求放在不同模塊裏去使用,比如定義一個數據轉換組件,統一的校驗組件,統一的異常處理器,都可以理解是組件。

框架和架構

學習時,作者提到,很多人往往分不清楚框架和架構。但我個人理解框架和架構還是很好區分的。

框架,從維基百科的釋義上是:

軟件框架(Software framework)通常指的是爲了實現某個業界標準或完成特定基本任務的軟件組件規範,也指爲了實現某個軟件組件規範時,提供規範所要求之基礎功能的軟件產品。

也就是說框架關注的是規範,按照某一個規範去用這個框架,去實現我們要求的功能,並且額外提供一些基礎功能,比如Srping MVC 是MVC的開發框架,除了滿足MVC的規範,還提供了很多基礎功能幫助開發者實現功能,比如註解,Security,JPA等。

框架,我的個人層面理解就是一種幫助開發者實現軟件功能的工具,而架構是開發者決定如何去設計軟件。

架構,從維基百科上的釋義是:

軟件架構指軟件系統的“基礎結構”,創造這些基礎結構的準則,以及對這些結構的描述。

架構更關注的是結構,如何組成你的整個軟件系統這件事。但由於在軟件架構的定義中,並未將什麼是基礎結構明確說明,所以從不同的角度解讀架構,其實都可以。

比如從業務邏輯角度來說,學生管理系統的架構可以是:

從物理部署的角度,學生管理系統的架構可以是:

從開發規範的角度,因爲採用標準的MVC框架開發,學生管理系統的架構又可以是:

這些“架構”,都是“學生管理系統”正確的架構,只是從不同的角度來分解而已,這也是 IBM 的 RUP 將軟件架構視圖分爲著名的“4+1 視圖”的原因。

架構比較合理的理解

架構是一個軟件系統的頂層結構,就像建築設計師的草圖,定義了整體的骨架,每一塊佈局之間如何串聯,形成協同效應。

架構定義了軟件中的各個系統,子系統,模塊和組件,如何組成,並且如何運作和協作。

比如同樣的一個交易系統,因爲選擇的架構不同,各個系統之間的交互方式,組成方式也會不同。

所以我的理解是架構決定的是軟件系統的頂層設計,而且細化到每個單獨的系統,也有其自己的架構設計。

站的視角越高,看到的架構越寬泛一些。

總結一下

架構是頂層設計;框架是面向編程或配置的半成品;組件是從技術維度上的複用;模塊是從業務維度上職責的劃分;系統是相互協同可運行的實體。

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