一. 什么是架構和架構本質
二. 架構分層和分類
一. 什么是架構和架構本質
在軟件行業,對于什么是架構,都有很多的爭論,每個人都有自己的理解。此君說的架構和彼君理解的架構未必是一回事。因此我們在討論架構之前,我們先討論架構的概念定義,概念是人認識這個世界的基礎,并用來溝通的手段,如果對架構概念理解不一樣,那溝通起來自然不順暢。
Linux有架構,MySQL有架構,JVM也有架構,使用Java開發、MySQL存儲、跑在Linux上的業務系統也有架構,應該關注哪一個?想要清楚以上問題需要梳理幾個有關系又相似的概念:系統與子系統、模塊與組建、框架與架構:
1.1. 系統與子系統
系統:泛指由一群有關聯的個體組成,根據某種規則運作,能完成個別元件不能獨立完成的工作能力的群體。
子系統:也是由一群關聯的個體組成的系統,多半是在更大的系統中的一部分。
1.2. 模塊與組件
都是系統的組成部分,從不同角度拆分系統而已。模塊是邏輯單元,組件是物理單元。
模塊就是從邏輯上將系統分解, 即分而治之, 將復雜問題簡單化。模塊的粒度可大可小, 可以是系統,幾個子系統、某個服務,函數, 類,方法、 功能塊等等。
組件可以包括應用服務、數據庫、網絡、物理機、還可以包括MQ、容器、Nginx等技術組件。
1.3. 框架與架構
框架是組件實現的規范,例如:MVC、MVP、MVVM等,是提供基礎功能的產品,例如開源框架:Ruby on Rails、Spring、Laravel、Django等,這是可以拿來直接使用或者在此基礎上二次開發。
框架是規范,架構是結構。
我在這重新定義架構:軟件架構指軟件系統的頂層結構。
架構是經過系統性地思考, 權衡利弊之后在現有資源約束下的最合理決策, 最終明確的系統骨架: 包括子系統, 模塊, 組件. 以及他們之間協作關系, 約束規范, 指導原則.并由它來指導團隊中的每個人思想層面上的一致。涉及四方面:
系統性思考的合理決策:比如技術選型、解決方案等。
明確的系統骨架:明確系統有哪些部分組成。
系統協作關系:各個組成部分如何協作來實現業務請求。
約束規范和指導原則:保證系統有序,高效、穩定運行。
因此架構師具備能力:理解業務,全局把控,選擇合適技術,解決關鍵問題、指導研發落地實施。
架構的本質就是對系統進行有序化地重構以致符合當前業務的發展,并可以快速擴展。
那什么樣的系統要考慮做架構設計 技術不會平白無故的出和自驅動發展起來,而架構的發展和需求是基于業務的驅動。
架構設計完全是為了業務,
需求相對復雜.
非功能性需求在整個系統占據重要位置.
系統生命周期長,有擴展性需求.
系統基于組件或者集成的需要.
業務流程再造的需要.
基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能
項目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
視頻教程:https://doc.iocoder.cn/video/
二. 架構分層和分類
架構分類可細分為業務架構、應用架構、技術架構, 代碼架構, 部署架構
業務架構是戰略,應用架構是戰術,技術架構是裝備。其中應用架構承上啟下,一方面承接業務架構的落地,另一方面影響技術選型。
熟悉業務,形成業務架構,根據業務架構,做出相應的應用架構,最后技術架構落地實施。
如何針對當前需求,選擇合適的應用架構,如何面向未來,保證架構平滑過渡,這個是軟件開發者,特別是架構師,都需要深入思考的問題。
2.1. 業務架構(俯視架構):
包括業務規劃,業務模塊、業務流程,對整個系統的業務進行拆分,對領域模型進行設計,把現實的業務轉化成抽象對象。
沒有最優的架構,只有最合適的架構,一切系統設計原則都要以解決業務問題為最終目標,脫離實際業務的技術情懷架構往往會給系統帶入大坑,任何不基于業務做異想天開的架構都是耍流氓。
所有問題的前提要搞清楚我們今天面臨的業務量有多大,增長走勢是什么樣,而且解決高并發的過程,一定是一個循序漸進逐步的過程。合理的架構能夠提前預見業務發展1~2年為宜。這樣可以付出較為合理的代價換來真正達到技術引領業務成長的效果。
看看京東業務架構(網上分享圖):
2.2. 應用架構(剖面架構,也叫邏輯架構圖):
硬件到應用的抽象,包括抽象層和編程接口。應用架構和業務架構是相輔相成的關系。業務架構的每一部分都有應用架構。
類似:
應用架構:應用作為獨立可部署的單元,為系統劃分了明確的邊界,深刻影響系統功能組織、代碼開發、部署和運維等各方面. 應用架構定義系統有哪些應用、以及應用之間如何分工和合作。這里所謂應用就是各個邏輯模塊或者子系統。
應用架構圖關鍵有2點:
①. 職責劃分: 明確應用(各個邏輯模塊或者子系統)邊界
邏輯分層
子系統、模塊定義。
關鍵類。
②. 職責之間的協作:
接口協議:應用對外輸出的接口。
協作關系:應用之間的調用關系。
應用分層有兩種方式:
一種是水平分(橫向),按照功能處理順序劃分應用,比如把系統分為web前端/中間服務/后臺任務,這是面向業務深度的劃分。
另一種是垂直分(縱向),按照不同的業務類型劃分應用,比如進銷存系統可以劃分為三個獨立的應用,這是面向業務廣度的劃分。
應用的合反映應用之間如何協作,共同完成復雜的業務case,主要體現在應用之間的通訊機制和數據格式,通訊機制可以是同步調用/異步消息/共享DB訪問等,數據格式可以是文本/XML/JSON/二進制等。
應用的分偏向于業務,反映業務架構,應用的合偏向于技術,影響技術架構。分降低了業務復雜度,系統更有序,合增加了技術復雜度,系統更無序。
應用架構的本質是通過系統拆分,平衡業務和技術復雜性,保證系統形散神不散。
系統采用什么樣的應用架構,受業務復雜性影響,包括企業發展階段和業務特點;同時受技術復雜性影響,包括IT技術發展階段和內部技術人員水平。業務復雜性(包括業務量大)必然帶來技術復雜性,應用架構目標是解決業務復雜性的同時,避免技術太復雜,確保業務架構落地。
2.3. 數據架構
數據架構指導數據庫的設計. 不僅僅要考慮開發中涉及到的數據庫,實體模型,也要考慮物理架構中數據存儲的設計。
2.4. 代碼架構(也叫開發架構):
子系統代碼架構主要為開發人員提供切實可行的指導,如果代碼架構設計不足,就會造成影響全局的架構設計。比如公司內不同的開發團隊使用不同的技術棧或者組件,結果公司整體架構設計就會失控。
代碼架構主要定義:
①. 代碼單元:
配置設計
框架、類庫。
②. 代碼單元組織:
編碼規范,編碼的慣例。
項目模塊劃分
頂層文件結構設計,比如mvc設計。
依賴關系
2.5. 技術架構
技術架構:確定組成應用系統的實際運行組件(lvs,nginx,tomcat,php-fpm等),這些運行組件之間的關系,以及部署到硬件的策略。
技術架構主要考慮系統的非功能性特征,對系統的高可用、高性能、擴展、安全、伸縮性、簡潔等做系統級的把握。
系統架構的設計要求架構師具備軟件和硬件的功能和性能的過硬知識,這也是架構設計工作中最為困難的工作。
2.6. 部署拓撲架構圖(實際物理架構圖):
拓撲架構,包括架構部署了幾個節點,節點之間的關系,服務器的高可用,網路接口和協議等,決定了應用如何運行,運行的性能,可維護性,可擴展性,是所有架構的基礎。這個圖主要是運維工程師主要關注的對象。
物理架構主要考慮硬件選擇和拓撲結構,軟件到硬件的映射,軟硬件的相互影響。
審核編輯 :李倩
-
模塊
+關注
關注
7文章
2695瀏覽量
47433 -
Linux
+關注
關注
87文章
11292瀏覽量
209335 -
架構
+關注
關注
1文章
513瀏覽量
25468
原文標題:談談架構的本質和架構分類
文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論