如何画架构图?
作者:億圖圖示
鏈接:https://www.zhihu.com/question/27440059/answer/1381203176
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
畫架構(gòu)圖分四步走:
第一,搞清楚要畫的架構(gòu)圖的類型;
第二,確認(rèn)架構(gòu)圖中的關(guān)鍵要素(比如產(chǎn)品、技術(shù)、服務(wù))
第三,梳理關(guān)鍵要素之間的關(guān)聯(lián):包含、支撐、同級并列等;
第四,輸出關(guān)聯(lián)關(guān)系清晰的架構(gòu)圖。
應(yīng)用架構(gòu)圖
接下來,我們作進(jìn)一步解讀:
一、架構(gòu)圖的定義及作用
什么是架構(gòu)圖?維基百科、百度百科其實都沒有關(guān)于它的直接定義。不過我們可以進(jìn)行拆分理解:
架構(gòu)圖=架構(gòu)+圖
這樣問題就轉(zhuǎn)化成,什么是架構(gòu),以及什么是圖?
關(guān)于架構(gòu),百度百科上是這樣定義的:
架構(gòu),又名軟件架構(gòu),是有關(guān)軟件整體結(jié)構(gòu)與組件的抽象描述,于指導(dǎo)型軟件系統(tǒng)各個方面的設(shè)計。
ISO/IEC 42010:20072 中對架構(gòu)則有如下定義:
The fundamental organization of a system, embodied in its components, their relationships to each other and the environment, and the principles governing its design and evolution.(系統(tǒng)架構(gòu),體現(xiàn)在它的組成部分、它們之間的相互關(guān)系和環(huán)境中,以及控制其設(shè)計和演化的原則。)
也就是說,架構(gòu)是由系統(tǒng)組件,以及組件間相互關(guān)系共同構(gòu)成的集合體。
而架構(gòu)圖,則是用來表達(dá)這種集合的載體。
它的作用也很簡單,兩個:
劃分目標(biāo)系統(tǒng)邊界
將目標(biāo)系統(tǒng)的結(jié)構(gòu)可視化
進(jìn)而減少溝通障礙,提升協(xié)作效率。
二、架構(gòu)的分類及畫法
架構(gòu)大致可以分為4類:業(yè)務(wù)架構(gòu)、應(yīng)用架構(gòu)、數(shù)據(jù)架構(gòu)和技術(shù)架構(gòu),整體邏輯關(guān)系如下:
架構(gòu)分類
業(yè)務(wù)架構(gòu):使用一套方法論/邏輯對產(chǎn)品(項目)所涉及到的業(yè)務(wù)進(jìn)行邊界劃分。所以熟悉業(yè)務(wù)是關(guān)鍵。
比如做一個團購網(wǎng)站,你需要把商品類目、商品、訂單、訂單服務(wù)、支付、退款等進(jìn)行清晰劃分,而業(yè)務(wù)架構(gòu)不需要考慮諸如我用什么技術(shù)開發(fā)、我的并發(fā)大怎么辦、我選擇什么樣的硬件等等。
產(chǎn)品架構(gòu)圖
應(yīng)用架構(gòu):它是對整個系統(tǒng)實現(xiàn)的總體上的架構(gòu),需要指出系統(tǒng)的層次、系統(tǒng)開發(fā)的原則、系統(tǒng)各個層次的應(yīng)用服務(wù)。
例如,下圖就將系統(tǒng)分為數(shù)據(jù)層、服務(wù)層、通訊層、展現(xiàn)層,并細(xì)分寫明每個層次的應(yīng)用服務(wù)。
應(yīng)用架構(gòu)圖
數(shù)據(jù)架構(gòu):是一套對存儲數(shù)據(jù)的架構(gòu)邏輯,它會根據(jù)各個系統(tǒng)應(yīng)用場景、不同時間段的應(yīng)用場景 ,對數(shù)據(jù)進(jìn)行諸如數(shù)據(jù)異構(gòu)、讀寫分離、緩存使用、分布式數(shù)據(jù)策略等劃分。
數(shù)據(jù)架構(gòu)主要解決三個問題:
第一,系統(tǒng)需要什么樣的數(shù)據(jù);
第二,如何存儲這些數(shù)據(jù);
第三,如何進(jìn)行數(shù)據(jù)架構(gòu)設(shè)計。
大數(shù)據(jù)架構(gòu)圖
技術(shù)架構(gòu):應(yīng)用架構(gòu)本身只關(guān)心需要哪些應(yīng)用系統(tǒng),哪些平臺來滿足業(yè)務(wù)目標(biāo)的需求,而不會關(guān)心在整個構(gòu)建過程中你需要使用哪些技術(shù)。技術(shù)架構(gòu)則是應(yīng)接應(yīng)用架構(gòu)的技術(shù)需求,并根據(jù)識別的技術(shù)需求,進(jìn)行技術(shù)選型,把各個關(guān)鍵技術(shù)和技術(shù)之間的關(guān)系描述清楚。
技術(shù)架構(gòu)解決的問題包括:純技術(shù)層面的分層、開發(fā)框架的選擇、開發(fā)語言的選擇、涉及非功能性需求的技術(shù)選擇。
補充介紹軟件架構(gòu)中最經(jīng)典的“4+1視圖”:
所謂“4+1視圖”,分別為場景視圖、邏輯視圖、物理視圖、處理流程視圖和開發(fā)視圖。
01 邏輯視圖
用于描述系統(tǒng)的功能需求,即系統(tǒng)給用戶提供哪些服務(wù);以及描述系統(tǒng)軟件功能拆解后的組件關(guān)系、組件約束和邊界,反映系統(tǒng)整體組成與系統(tǒng)如何構(gòu)建的過程。在UML中由類圖來表示(關(guān)于什么是類圖,這里有一篇通俗易懂的介紹),
下面springcloud微服務(wù)的邏輯視圖示例(僅部分),就描述了springcloud中各個功能組件。從這個圖中,基本可以對springcloud有一個大顆粒度的了解。
springcloud微服務(wù)的邏輯視圖
02 物理視圖
開發(fā)出的軟件系統(tǒng),最終是要運行在物理或軟件環(huán)境上。物理環(huán)境可能是服務(wù)器、PC機、移動終端等物理設(shè)備;軟件環(huán)境可以是虛擬機、容器、進(jìn)程或線程。部署視圖就是對這個部署信息進(jìn)行描述。在UML中通常由部署圖表示。
03 處理視圖
處理視圖,又稱過程視圖、運行視圖。用于描述系統(tǒng)軟件組件之間的通信時序,數(shù)據(jù)的輸入輸出。在UML中通常由時序圖和流程圖表示,如下圖所示:
微服務(wù)架構(gòu)安全認(rèn)證處理視圖
04 開發(fā)視圖
開發(fā)視圖關(guān)注軟件開發(fā)環(huán)境下實際模塊的組織,反映系統(tǒng)開發(fā)實施過程。
一個設(shè)計良好的開發(fā)視圖,應(yīng)該能夠滿足以下要求:
通過邏輯架構(gòu)元素,能夠找到它所有代碼和所有的二進(jìn)制交付件 每一個代碼源文件,都能夠找到它所屬的邏輯架構(gòu)元素 每一個二進(jìn)制交付件,都能夠找到它集成了哪些邏輯架構(gòu)元素
設(shè)備調(diào)試系統(tǒng)架構(gòu)的開發(fā)視圖
05 場景視圖
場景視圖,即4+1中的1。從前面的圖可以看到,4+1中的4個視圖都是圍繞著場景視圖為核心的。它用于描述系統(tǒng)的參與者與功能用例間的關(guān)系,反映系統(tǒng)的最終需求和交互設(shè)計。在UML中通常由用例圖表示:
總結(jié)