<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          這年頭,高低也要畫幾張架構(gòu)圖!

          共 5812字,需瀏覽 12分鐘

           ·

          2024-04-11 05:36


          本文轉(zhuǎn)載于稀土掘金技術(shù)社區(qū),作者:清水河畔

          什么是架構(gòu)圖?

          架構(gòu)圖的定義及作用

          什么是架構(gòu)圖?維基百科、百度百科其實(shí)都沒有關(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)各個(gè)方面的設(shè)計(jì)。

          ISO/IEC 42010:20072 中對(duì)架構(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è)計(jì)和演化的原則。)

          也就是說,架構(gòu)是由系統(tǒng)組件,以及組件間相互關(guān)系共同構(gòu)成的集合體。

          而架構(gòu)圖,則是用來表達(dá)這種集合的載體。

          它的作用也很簡(jiǎn)單,兩個(gè):

          • 劃分目標(biāo)系統(tǒng)邊界
          • 將目標(biāo)系統(tǒng)的結(jié)構(gòu)可視化

          進(jìn)而減少溝通障礙,提升協(xié)作效率。

          畫什么架構(gòu)圖?

          架構(gòu)的分類

          架構(gòu)大致可以分為4類:業(yè)務(wù)架構(gòu)(產(chǎn)品架構(gòu))、應(yīng)用架構(gòu)、數(shù)據(jù)架構(gòu)和技術(shù)架構(gòu),整體邏輯關(guān)系如下由上至下:

          7ae5df3d81325871949c37b0e419ace8.webptest8.jpg

          業(yè)務(wù)架構(gòu):

          使用一套方法論/邏輯對(duì)產(chǎn)品(項(xiàng)目)所涉及到的業(yè)務(wù)進(jìn)行邊界劃分。所以熟悉業(yè)務(wù)是關(guān)鍵。

          比如做一個(gè)電商網(wǎng)站,你需要把商品、購(gòu)物車、訂單、支付、退換貨等進(jìn)行清晰劃分。業(yè)務(wù)架構(gòu)不需要考慮諸如我用什么技術(shù)開發(fā)、我的并發(fā)大怎么辦、我選擇什么樣的硬件機(jī)器等。

          2cd17f10813b1bf053847b1c9555f490.webp913c7e64-718a-408a-b21a-01f7dffc1133.jpeg

          下圖也是一個(gè)電商系統(tǒng)的產(chǎn)品架構(gòu)圖(也就是業(yè)務(wù)架構(gòu)圖),可作參考示意:3bf95749a642d12c207e5ada23613e76.webp

          應(yīng)用架構(gòu):

          它是對(duì)整個(gè)系統(tǒng)實(shí)現(xiàn)的總體上的架構(gòu),需要指出系統(tǒng)的層次、系統(tǒng)開發(fā)的原則、系統(tǒng)各個(gè)層次的應(yīng)用服務(wù)。

          例如、下圖將系統(tǒng)分為數(shù)據(jù)層、服務(wù)層、通訊層、展現(xiàn)層,并細(xì)分寫明每個(gè)層次的應(yīng)用服務(wù)。

          a93688f46c49da8828e6576f0ee8603e.webp

          下圖是顆粒度更小的,針對(duì)某一小部分的應(yīng)用架構(gòu):

          41dd96b55bf7d0915af3c59ebb0f5ae2.webp1d84f9da-f18e-48b7-bab9-88bf50331141.jpeg

          數(shù)據(jù)架構(gòu):

          是一套對(duì)存儲(chǔ)數(shù)據(jù)的架構(gòu)邏輯,它會(huì)根據(jù)各個(gè)系統(tǒng)應(yīng)用場(chǎng)景、不同時(shí)間段的應(yīng)用場(chǎng)景 ,對(duì)數(shù)據(jù)進(jìn)行諸如數(shù)據(jù)異構(gòu)、讀寫分離、緩存使用、分布式數(shù)據(jù)策略等劃分。

          數(shù)據(jù)架構(gòu)主要解決三個(gè)問題:

          1. 系統(tǒng)需要什么樣的數(shù)據(jù);
          2. 如何存儲(chǔ)這些數(shù)據(jù);
          3. 如何進(jìn)行數(shù)據(jù)架構(gòu)設(shè)計(jì)。

          9e5c05f9ae8949588d5f0532debc74b2.webp

          技術(shù)架構(gòu):

          應(yīng)用架構(gòu)本身只關(guān)心需要哪些應(yīng)用系統(tǒng),哪些平臺(tái)來滿足業(yè)務(wù)目標(biāo)的需求,而不會(huì)關(guān)心在整個(gè)構(gòu)建過程中你需要使用哪些技術(shù)。技術(shù)架構(gòu)則是應(yīng)接應(yīng)用架構(gòu)的技術(shù)需求,并根據(jù)識(shí)別的技術(shù)需求,進(jìn)行技術(shù)選型,把各個(gè)關(guān)鍵技術(shù)和技術(shù)之間的關(guān)系描述清楚。

          技術(shù)架構(gòu)解決的問題包括:純技術(shù)層面的分層、開發(fā)框架的選擇、開發(fā)語(yǔ)言的選擇、涉及非功能性需求的技術(shù)選擇。


          簡(jiǎn)單介紹下軟件架構(gòu)中最經(jīng)典的“4+1視圖”

          “4+1視圖”,分別為場(chǎng)景視圖、邏輯視圖、物理視圖、處理流程視圖和開發(fā)視圖。

          401770ad43782415c62c50ba9655480c.webp

          邏輯視圖

          用于描述系統(tǒng)的功能需求,即系統(tǒng)給用戶提供哪些服務(wù);以及描述系統(tǒng)軟件功能拆解后的組件關(guān)系、組件約束和邊界,反映系統(tǒng)整體組成與系統(tǒng)如何構(gòu)建的過程。比如UML中的類圖。

          下圖是springcloud微服務(wù)的邏輯視圖(僅部分),描述了springcloud中各個(gè)功能組件。從這個(gè)圖中,基本可以對(duì)springcloud有一個(gè)大顆粒度的了解。

          112714a00517dc143b9e5d3c618b5c80.webp

          物理視圖

          開發(fā)出的軟件系統(tǒng),最終是要運(yùn)行在物理或軟件環(huán)境上。物理環(huán)境可能是服務(wù)器、PC機(jī)、移動(dòng)終端等物理設(shè)備;軟件環(huán)境可以是虛擬機(jī)、容器、進(jìn)程或線程。部署視圖就是對(duì)這個(gè)部署信息進(jìn)行描述。在UML中通常由部署圖表示。

          e3eea1ff16ebf625e5e45b7618ecffec.webp185348f4-0365-4309-bdf5-5a2fd2ad336b.jpeg

          處理視圖

          處理視圖,又稱過程視圖、運(yùn)行視圖。用于描述系統(tǒng)軟件組件之間的通信時(shí)序,數(shù)據(jù)的輸入輸出。在UML中通常由時(shí)序圖和流程圖表示,如下圖所示:

          673cdba0ba577fc1ee489b6edc87b93f.webp

          開發(fā)視圖

          開發(fā)視圖關(guān)注軟件開發(fā)環(huán)境下實(shí)際模塊的組織,反映系統(tǒng)開發(fā)實(shí)施過程。

          一個(gè)設(shè)計(jì)良好的開發(fā)視圖,應(yīng)該能夠滿足以下要求:

          1. 通過邏輯架構(gòu)元素,能夠找到它所有代碼和所有的二進(jìn)制交付件
          2. 每一個(gè)代碼源文件,都能夠找到它所屬的邏輯架構(gòu)元素
          3. 每一個(gè)二進(jìn)制交付件,都能夠找到它集成了哪些邏輯架構(gòu)元素

          49c7516998118d6f362c95854282f59c.webp

          場(chǎng)景視圖

          場(chǎng)景視圖,即4+1中的1。從前面的圖可以看到,4+1中的4個(gè)視圖都是圍繞著場(chǎng)景視圖為核心的。它用于描述系統(tǒng)的參與者與功能用例間的關(guān)系,反映系統(tǒng)的最終需求和交互設(shè)計(jì)。在UML中通常由用例圖表示:

          3b2f7a0629a95e4369b46c229b49789f.webp

          68a589ea6f13bf4329b01913769b66f5.webp

          以上5種架構(gòu)視圖,是從不同角度表示一個(gè)軟件系統(tǒng)的不同特征


          架構(gòu)圖和4+1視圖是從兩個(gè)不同的維度來說架構(gòu)的,可以簡(jiǎn)單的認(rèn)為(不過這樣認(rèn)為是有問題的) 應(yīng)用架構(gòu)圖和業(yè)務(wù)架構(gòu)圖等等是針對(duì)不同的人員群體,比如管理人員或者決策者等一些不是太懂技術(shù)的都是看的業(yè)務(wù)架構(gòu)圖,技術(shù)架構(gòu)是純給技術(shù)人員看的,而應(yīng)用架構(gòu)主要給CTO等之類的看的(當(dāng)然也看業(yè)務(wù)架構(gòu)),區(qū)別在于主要的面向群體不同,有時(shí)候有些叫法可能不一樣。而且4+1視圖與單獨(dú)區(qū)分出來的架構(gòu)圖說法有時(shí)候是混在一起的,比如部署架構(gòu)圖,物理架構(gòu)圖等 就是基于4+1視圖的物理視圖出來的。當(dāng)然,業(yè)務(wù)架構(gòu)圖、應(yīng)用架構(gòu)圖、數(shù)據(jù)架構(gòu)圖、技術(shù)架構(gòu)圖等等合起來才是一個(gè)完整的架構(gòu)藍(lán)圖。

          如何畫架構(gòu)圖?

          畫架構(gòu)圖可以分以下幾步:

          1. 搞清楚要畫的架構(gòu)圖的類型;
          2. 確認(rèn)架構(gòu)圖中的關(guān)鍵要素(比如產(chǎn)品、技術(shù)、服務(wù));
          3. 梳理關(guān)鍵要素之間的關(guān)聯(lián):包含、支撐、同級(jí)并列等;
          4. 輸出關(guān)聯(lián)關(guān)系清晰的架構(gòu)圖。

          一、從具象到抽象

          架構(gòu)圖表達(dá)的就是事物的結(jié)構(gòu),大多數(shù)領(lǐng)域都可以用具象的方式來呈現(xiàn),比如下圖中的人體器官系統(tǒng)圖就顯得一目了然。但是IT行業(yè)幾乎沒有具象表達(dá)的可能性。不像人體器官系統(tǒng)的直觀視覺表達(dá)那么有效。所以,設(shè)計(jì)IT系統(tǒng)架構(gòu)圖,第一步就是要完成合理的“抽象”。

          1、恰當(dāng)?shù)念w粒度

          抽象最重要的目標(biāo)就是決定用什么樣的顆粒度來列出事物,而不是巨細(xì)無遺。這完全取決于架構(gòu)圖的受眾和想要表達(dá)的系統(tǒng)的規(guī)模。越是非技術(shù)受眾,越要降低顆粒度,越是大型系統(tǒng),也要降低顆粒度。雖然我們可以在一個(gè)架構(gòu)圖中表達(dá)事物的層次,但是平面空間總是有限,就像人體器官分布圖沒辦法呈現(xiàn)細(xì)胞組織一個(gè)道理。

          2、通用和規(guī)范的命名

          確定了抽象層級(jí),在架構(gòu)圖上就要列出需要表達(dá)的事物對(duì)象。因?yàn)槿狈呦蟮膮⒄眨械膶?duì)象表達(dá)唯一途徑就是文字標(biāo)簽,最多加上符號(hào)圖標(biāo)。這就要求制作者必須使用規(guī)范或約定俗成的事物命名,否則讀者將無法理解。比如,上例中的操作系統(tǒng)架構(gòu)圖,F(xiàn)ile System絕對(duì)不能寫成Doc System,因?yàn)橹挥星罢呤且粋€(gè)規(guī)范名稱。

          很多IT產(chǎn)品設(shè)計(jì)中會(huì)有自己的獨(dú)特命名組件,甚至這些命名沒有任何的語(yǔ)義元素。這些命名在架構(gòu)圖中出現(xiàn)必須要附加實(shí)際含義的說明,否則沒有讀者會(huì)知道“海豚系統(tǒng)“是什么意思。當(dāng)然IT行業(yè)中也會(huì)出現(xiàn)強(qiáng)勢(shì)壟斷產(chǎn)品,以自己的獨(dú)特命名確定行業(yè)標(biāo)準(zhǔn),以至于你不知道都不好意思,這種情況當(dāng)然另當(dāng)別論。

          當(dāng)使用圖標(biāo)和符號(hào)來表達(dá)事物對(duì)象時(shí),要注意選擇規(guī)范和識(shí)別性強(qiáng)的圖形。在一些非常專業(yè)的領(lǐng)域,比如電子電氣架構(gòu)圖,甚至有對(duì)各種組件規(guī)范的標(biāo)準(zhǔn)定義。即使有含義準(zhǔn)確的符號(hào)圖標(biāo),依然建議制作時(shí)附加上文本標(biāo)簽,可以讓架構(gòu)圖的讀者更明晰地理解。相反,沒有圖形,只有文字的架構(gòu)圖是完全可以接受的。

          3、明確抽象對(duì)象之間的關(guān)系

          在抽象系統(tǒng)架構(gòu)中,各種對(duì)象之間的關(guān)系只有三種:包含、并列和聯(lián)結(jié)。比如操作系統(tǒng)包含用戶模式和內(nèi)核模式,用戶模式和內(nèi)核模式是并列的,客戶端和服務(wù)器是通過TCP/IP協(xié)議連接(聯(lián)結(jié))的。無論系統(tǒng)多么龐大和復(fù)雜,對(duì)象和對(duì)象之間的關(guān)系就這么幾種。而且,在平面空間中,無論怎么演繹,也只能有效地表達(dá)這些有限的關(guān)系類型。

          二、確定架構(gòu)圖形態(tài)

          1、三種基本形態(tài)

          鑒于抽象對(duì)象之間有限的關(guān)系種類,架構(gòu)圖無非有三種形態(tài):

          • 分叉模式(Branching Model),表達(dá)事物的分支
          • 網(wǎng)絡(luò)模式(Network Model),表達(dá)事物的聯(lián)結(jié)
          • 通過空間組合,組合以上兩種模式

          所以,不用糾結(jié)要表達(dá)的系統(tǒng)有多么復(fù)雜。只要認(rèn)知到系統(tǒng)對(duì)象之間的內(nèi)在關(guān)系性質(zhì),就不難選擇一個(gè)基本形態(tài)來表達(dá)。如果空間允許,也完全可以綜合運(yùn)用分叉和網(wǎng)絡(luò)一體化表達(dá)更完整的系統(tǒng)。

          ce880fd282ec4b065c4d74c90f275594.webp

          2、確定邊界

          架構(gòu)圖既然表達(dá)的是一個(gè)系統(tǒng),那么這個(gè)系統(tǒng)必然有一個(gè)明確的邊界。計(jì)算機(jī)網(wǎng)絡(luò)的邊界是與上一級(jí)網(wǎng)絡(luò)的連接網(wǎng)關(guān),一個(gè)SaaS軟件的邊界是主體應(yīng)用、其依賴的開源組件和網(wǎng)絡(luò)服務(wù)。確定邊界后的系統(tǒng)才能盤點(diǎn)內(nèi)部所包含的組件對(duì)象層次和數(shù)量。一般而言,一個(gè)系統(tǒng)架構(gòu)圖不宜超過30-40個(gè)對(duì)象,超出這個(gè)限制則可能要考慮提高抽象層次;反過來,如果一個(gè)架構(gòu)圖只包含寥寥數(shù)個(gè)對(duì)象,那也犯不著勞累追求架構(gòu)圖的高要求,轉(zhuǎn)而用一些簡(jiǎn)單的框圖就能夠搞定,這時(shí)候,我們應(yīng)該降低抽象層次,以反映出更具體和詳細(xì)的架構(gòu)信息。

          超出這個(gè)既定邊界的對(duì)象理論上無需繪制,但有時(shí)候我們?yōu)榱吮磉_(dá)與外部系統(tǒng)的連接關(guān)系,會(huì)用次要色彩在邊界線外繪制部分系統(tǒng)邊界外的對(duì)象。這有點(diǎn)像某個(gè)行政區(qū)的地圖中會(huì)把連接其他區(qū)域的交通線上標(biāo)上“通往...”。

          3、確定主次

          假設(shè)一個(gè)系統(tǒng)包含10個(gè)子系統(tǒng),如果往下鉆取一級(jí),就有可能要表達(dá)上百個(gè)對(duì)象。這時(shí)候如果輕重不分,則可能讓最終的產(chǎn)出過于繁復(fù)。我們可以依據(jù)策略的需要進(jìn)行選擇,只分支展開系統(tǒng)的一部分,而讓其他部分粗略表達(dá)。不必要的細(xì)節(jié)展現(xiàn)過多,反而讓看的人無法識(shí)別出重點(diǎn)。因?yàn)槊恳粡埣軜?gòu)圖都有明確的溝通目標(biāo)和上下文,這樣主次有別的表達(dá)不僅是合理的,而且很多時(shí)候是必要的。

          4、確定空間位置

          空間位置是架構(gòu)圖設(shè)計(jì)的關(guān)鍵。我們要按照易于理解的邏輯關(guān)系,把抽象對(duì)象放到平面上的合理位置,人的視覺焦點(diǎn)就可以被空間關(guān)系有效引導(dǎo),從而更直觀地理解系統(tǒng)結(jié)構(gòu)和原理。

          在確定空間位置時(shí),根據(jù)不同的架構(gòu)圖基本形態(tài),有幾個(gè)重要準(zhǔn)則:

          (1)分叉模式下,要注意均衡利用空間,避免畫面一部分過度稀疏,一部分過度稠密。為了實(shí)現(xiàn)這一點(diǎn),需要借助矩形框、連接分叉線的幫助。如果遇到了實(shí)在窘迫的空間限制,也可以利用Call-out的局部放大設(shè)計(jì)來利用獨(dú)立的空間詳解一個(gè)特定模塊。

          (2)分叉模式下,依然要關(guān)注邏輯次序。在樹狀分叉下,雖然每個(gè)分支的地位都是均等的,但是并不意味著可以隨便決定次序。設(shè)計(jì)者依然可以根據(jù)同級(jí)別對(duì)象的主次關(guān)系、先后關(guān)系來決定排序。

          (3)網(wǎng)絡(luò)模式下,根據(jù)被聯(lián)結(jié)組件的性質(zhì)決定南北向。在IT架構(gòu)設(shè)計(jì)中,一般把底層的基礎(chǔ)技術(shù)組件定義為北向(North Bound),放在架構(gòu)圖的下方,把高層級(jí)的應(yīng)用組件定義為南向(South Bound),放在架構(gòu)圖的上方。把中間的各個(gè)技術(shù)組件依照高低位性質(zhì)依序排列聯(lián)結(jié)。這就是我們經(jīng)常看到的分層技術(shù)架構(gòu)圖。

          03f0c8bef14cc21ab6ef5179c48644b6.webp

          典型的分層技術(shù)架構(gòu)圖

          注意:南北向也不是絕對(duì)的上下結(jié)構(gòu)。只要條理清晰,左右結(jié)構(gòu)也同樣可以表達(dá)這些遞進(jìn)的層次。例如下圖:

          (4)網(wǎng)絡(luò)模式下,可以將具備聯(lián)結(jié)關(guān)系的對(duì)象放在彼此鄰近的位置上,以方便創(chuàng)建清晰的連接線。比如下圖,在同一級(jí)別的層次上,可能存在彼此需要聯(lián)結(jié)的組件。這時(shí)候,是放在左邊,中間,還是右邊就有一定的講究了,否則就無法繪制出簡(jiǎn)潔的連線。

          89e3b04f7b6a207c0cb40f004d23ce79.webpd00a9b03-adb6-4d8e-a9da-4fe6c72a7e1a.jpeg

          三、視覺設(shè)計(jì)

          可以用一些視覺設(shè)計(jì)技巧

          1、制定統(tǒng)一的設(shè)計(jì)范式

          在抽象架構(gòu)圖中,會(huì)充滿組件框和連接線。無論使用何種繪圖工具,先要定義出標(biāo)準(zhǔn)的圖形樣式、色彩、文本標(biāo)簽的字體、字號(hào)、連接線樣式等。在真?zhèn)€架構(gòu)圖中,應(yīng)該依據(jù)這些定義好的基本樣式來重復(fù)對(duì)象,而不是想到哪里,畫到哪里。很多架構(gòu)圖看起來充滿了完全不同的組件樣式,看起來凌亂不堪,就是因?yàn)槿狈α诉@個(gè)范式的約束。

          架構(gòu)圖上的同性質(zhì)組件只能使用單一的圖形樣式,字體、字號(hào)和粗細(xì)都要統(tǒng)一,影響觀感一致性的還包括字距、文本框邊距(margin)、文本框間距(padding)、文本對(duì)齊模式等細(xì)節(jié)。這些樣式屬性,稍微有一些不一樣,放到一張架構(gòu)圖中就會(huì)一眼看出來,非常不舒服。

          原則上,我們應(yīng)該最少的樣式差異,不要使用過多數(shù)量的色彩,不要為了區(qū)別事物,把什么屬性都重新定義一邊。兩類事物之間,靠色彩能區(qū)別,靠標(biāo)簽字號(hào)也能區(qū)別,甚至僅僅靠色彩明度就能區(qū)別,不需要同時(shí)變化兩個(gè)屬性。

          2、使用圖形符號(hào)輔助表達(dá)

          利用計(jì)算機(jī)領(lǐng)域約定俗成的符號(hào)、專有圖標(biāo)或三維圖形來增強(qiáng)架構(gòu)圖設(shè)計(jì),可以讓看的人更輕松地閱讀架構(gòu)圖。而且,精致的畫面可以給讀者傳遞系統(tǒng)的精密度和高質(zhì)量感受。

          • 用具象物縮略圖來表達(dá)系統(tǒng)組件
          • 用三維圖形來表達(dá)組件層次

          3、使用附注、旁注來平衡空間

          在技術(shù)性較強(qiáng)的架構(gòu)圖中,有時(shí)候我們必須提供一些重要的技術(shù)細(xì)節(jié),但是架構(gòu)圖的空間可能不允許我們這么做。此時(shí),可以使用編號(hào)附注或者Call-out連線的旁注來實(shí)現(xiàn)。

          瀏覽 59
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青青视频网 | 黄 色 视 频 在线观看 | 黄色二区 | 欧美操逼视频网 | 免费黄色成人网站视频 |