如何畫出優秀的架構圖?

2020-12-07 騰訊網

分享一篇阿里巴巴雲原生的一篇關於如何畫架構圖的文章,寫的很不錯!

作者 | 三畫

來源 | 公眾號「阿里巴巴雲原生」

導讀:技術傳播的價值,不僅僅體現在通過商業化產品和開源項目來縮短我們構建應用的路徑,加速業務的上線速率,也體現在優秀工程師在工作效率提升、產品性能優化和用戶體驗改善等經驗方面的分享,以提高我們的專業能力。本文作者阿里巴巴技術專家三畫,分享了自己和團隊在畫好架構圖方面的理念和經驗,首發於阿里內部技術分享平臺,梓敬、鵬升和餘樂對此文亦有貢獻。

當我們想用一張或幾張圖來描述我們的系統時,是不是經常遇到以下情況:

對著畫布無從下手、刪了又來?

用一張圖描述我的系統,並且讓產品、運營、開發都能看明白?

畫了一半的圖還不清楚受眾是誰?

畫出來的圖到底是產品圖功能圖還是技術圖又或是大雜燴?

圖上的框框有點少是不是要找點兒框框加進來?

布局怎麼畫都不滿意……

如果有同樣的困惑,本文將介紹一種畫圖的方法論,來讓架構圖更清晰。

先理清一些基礎概念

1. 什麼是架構

架構就是對系統中的實體以及實體之間的關系所進行的抽象描述,是一系列的決策。

架構是結構和願景。

系統架構是概念的體現,是對物/信息的功能與形式元素之間的對應情況所做的分配,是對元素之間的關係以及元素同周邊環境之間的關系所做的定義。

做好架構是個複雜的任務,也是個很大的話題,本篇就不做深入了。有了架構之後,就需要讓干係人理解、遵循相關決策。

2. 什麼是架構圖

系統架構圖是為了抽象的表示軟體系統的整體輪廓和各個組件之間的相互關係和約束邊界,以及軟體系統的物理部署和軟體系統的演進方向的整體視圖。

3. 架構圖的作用

一圖勝千言。要讓干係人理解、遵循架構決策,就需要把架構信息傳遞出去。架構圖就是一個很好的載體。那麼,畫架構圖是為了:

解決溝通障礙

達成共識

減少歧義

4. 架構圖分類

搜集了很多資料,分類有很多,有一種比較流行的是4+1視圖,分別為場景視圖、邏輯視圖、物理視圖、處理流程視圖和開發視圖。

場景視圖

場景視圖用於描述系統的參與者與功能用例間的關係,反映系統的最終需求和互動設計,通常由用例圖表示。

邏輯視圖

邏輯視圖用於描述系統軟體功能拆解後的組件關係,組件約束和邊界,反映系統整體組成與系 統如何構建的過程,通常由UML的組件圖和類圖來表示。

物理視圖

物理視圖用於描述系統軟體到物理硬體的映射關係,反映出系統的組件是如何部署到一組可 計算機器節點上,用於指導軟體系統的部署實施過程。

處理流程視圖

處理流程視圖用於描述系統軟體組件之間的通信時序,數據的輸入輸出,反映系統的功能流程 與數據流程,通常由時序圖和流程圖表示。

開發視圖

開發視圖用於描述系統的模塊劃分和組成,以及細化到內部包的組成設計,服務於開發人員,反映系統開發實施過程。

以上 5 種架構視圖從不同角度表示一個軟體系統的不同特徵,組合到一起作為架構藍圖描述系統架構。

怎樣的架構圖是好的架構圖

上面的分類是前人的經驗總結,圖也是從網上摘來的,那麼這些圖畫的好不好呢?是不是我們要依葫蘆畫瓢去畫這樣一些圖?

先不去管這些圖好不好,我們通過對這些圖的分類以及作用,思考了一下,總結下來,我們認為,在畫出一個好的架構圖之前, 首先應該要明確其受眾,再想清楚要給他們傳遞什麼信息 ,所以,不要為了畫一個物理視圖去畫物理視圖,為了畫一個邏輯視圖去畫邏輯視圖,而應該根據受眾的不同,傳遞的信息的不同,用圖準確地表達出來,最後的圖可能就是在這樣一些分類裡。那麼,畫出的圖好不好的一個直接標準就是:受眾有沒有準確接收到想傳遞的信息。

明確這兩點之後,從受眾角度來說,一個好的架構圖是不需要解釋的,它應該是自描述的,並且要具備一致性和足夠的準確性,能夠與代碼相呼應。

畫架構圖遇到的常見問題

1. 方框代表什麼?

為什麼適用方框而不是圓形,它有什麼特殊的含義嗎?隨意使用方框或者其它形狀可能會引起混淆。

2. 虛線、實線什麼意思?箭頭什麼意思?顏色什麼意思?

隨意使用線條或者箭頭可能會引起誤會。

3. 運行時與編譯時衝突?層級衝突?

架構是一項複雜的工作,只使用單個圖表來表示架構很容易造成莫名其妙的語義混亂。

本文推薦的畫圖方法

C4 模型使用容器(應用程式、數據存儲、微服務等)、組件和代碼來描述一個軟體系統的靜態結構。這幾種圖比較容易畫,也給出了畫圖要點,但最關鍵的是,我們認為,它明確指出了每種圖可能的受眾以及意義。

下面的案例來自 C4 官網,然後加上了一些我們的理解,來看看如何更好的表達軟體架構

1. 語境圖(System Context Diagram)

這是一個想像的待建設的網際網路銀行系統,它使用外部的大型機銀行系統存取客戶帳戶、交易信息,通過外部電郵系統給客戶發郵件。可以看到,非常簡單、清晰,相信不需要解釋,都看的明白,裡面包含了需要建設的系統本身,系統的客戶,和這個系統有交互的周邊系統。

用途

這樣一個簡單的圖,可以告訴我們,要構建的系統是什麼;它的用戶是誰,誰會用它,它要如何融入已有的IT環境。這個圖的受眾可以是開發團隊的內部人員、外部的技術或非技術人員。即:

構建的系統是什麼

誰會用它

如何融入已有的IT環境

怎麼畫

中間是自己的系統,周圍是用戶和其它與之相互作用的系統。這個圖的關鍵就是梳理清楚待建設系統的用戶和高層次的依賴,梳理清楚了畫下來只需要幾分鐘時間。

2. 容器圖(Container Diagram)

容器圖是把語境圖裡待建設的系統做了一個展開。

上圖中,除了用戶和外圍系統,要建設的系統包括一個基於java\spring mvc的web應用提供系統的功能入口,基於xamarin架構的手機app提供手機端的功能入口,一個基於java的api應用提供服務,一個mysql資料庫用於存儲,各個應用之間的交互都在箭頭線上寫明了。

看這張圖的時候,不會去關注到圖中是直角方框還是圓角方框,不會關注是實線箭頭還是虛線箭頭,甚至箭頭的指向也沒有引起太多注意。

我們有許多的畫圖方式,都對框、線的含義做了定義,這就需要畫圖的人和看圖的人都清晰的理解這些定義,才能讀全圖裡的信息,而現實是,這往往是非常高的一個要求,所以,很多圖只能看個大概的含義。

用途

這個圖的受眾可以是團隊內部或外部的開發人員,也可以是運維人員。用途可以羅列為:

展現了軟體系統的整體形態

體現了高層次的技術決策

系統中的職責是如何分布的,容器間的是如何交互的

告訴開發者在哪裡寫代碼

怎麼畫

用一個框圖來表示,內部可能包括名稱、技術選擇、職責,以及這些框圖之間的交互,如果涉及外部系統,最好明確邊界。

3. 組件圖(Component Diagram)

組件圖是把某個容器進行展開,描述其內部的模塊。

用途

這個圖主要是給內部開發人員看的,怎麼去做代碼的組織和構建。其用途有:

描述了系統由哪些組件/服務組成

釐清了組件之間的關係和依賴

為軟體開發如何分解交付提供了框架

4. 類圖(Code/Class Diagram)

這個圖很顯然是給技術人員看的,比較常見,就不詳細介紹了。

案例分享

下面是內部的一個實時數據工具的架構圖。作為一個應該自描述的架構圖,這裡不多做解釋了。如果有看不明白的,那肯定是還畫的不夠好。

畫好架構圖可能有許多方法論,本篇主要介紹了C4這種方法,C4的理論也是不斷進化的。但不論是哪種畫圖方法論,我們回到畫圖初衷,更好的交流,我們在畫的過程中不必被條條框框所限制。簡而言之,畫之前想好:畫圖給誰看,看什麼,怎麼樣不解釋就看懂。

相關焦點

  • 如何畫架構圖?
    畫架構圖分四步走: 第一,搞清楚要畫的架構圖的類型; 第二,確認架構圖中的關鍵要素(比如產品、技術、服務); 第三,梳理關鍵要素之間的關聯:包含、支撐、同級並列等; 第四,輸出關聯關係清晰的架構圖。
  • 如何畫好一張架構圖?
    為什麼要畫架構圖?如何畫?有哪些方法?本文從架構的定義說起,分享阿里文娛高級技術專家簫逸關於畫架構圖多年的經驗總結,並對抽象這一概念進行了深入地討論。較長,同學們可收藏後再看。文末福利:架構師成長秘籍。什麼是架構圖?如何畫好一張架構圖,要做好這件事情首先要回答的就是什麼是架構圖。
  • 如何用「加減法」畫出「標準像」
    如何用「加減法」畫出「標準像」 2020-06-14 12:25 來源:澎湃新聞·澎湃號·政務
  • 優秀的流程圖應該這樣畫
    生產流程圖繪製方法生產流程圖的繪製簡單易上手,通過以下幾個步驟的操作,就可快速繪製出形象、好看又專業的生產流程圖。第一步:點擊下載億圖圖示軟體,或者登陸官網的在線版億圖圖示進行繪圖。第二步:新建流程圖。可以在新建頁面裡,通過搜索「生產流程圖」,就會找到與生產流程圖相關的模板,接著就可雙擊打開使用。
  • 如何畫出一幅經典的淺絳山水畫?
    筆墨技法筆墨的勾、皴、染、點、擦:「勾」是勾出物體的輪廓線;「皴」是用長短寬窄不同的筆觸表達物體的明暗和空間;「染」是用淡墨烘染;「點」是點苔。點染可以增加景物的蒼茫氣氛,也可以加強畫面景物深淺遠近的對比,使之層次分明、豐富、生動。用墨方法可分為潑墨法、積墨法、破墨法、宿墨法,焦墨法等,這幾種方法也可以結合使用。
  • 如何畫出水中產生空泡的臨界線?
    超空泡:工程師利用這個特性,設計出超空泡。當物體在水中的速度達到每小時一千公裡這種量級。產生的空泡環繞在物體四周,把頭部之外的表面都包裹住了。物體與水之間隔著一個大空泡,物體只感受到氣的摩擦力,這可比水的摩擦力小多了。總的阻力可以減小到沒有超空泡的1/5以下。 如何產生包裹住水中物體的超空泡,大幅減小阻力,讓物體在水中航行得和空中一樣快,這是工程師的一個創舉。
  • 如何畫出女明星的好看眉型?一分鐘畫眉教程,教你快速畫出自然眉
    眉毛對於整體妝容非常重要,畫好眉毛甚至可以影響你的臉型比例。美妝基本功,成也眉毛、敗也眉毛。到底該如何掌握恰到好處的眉型,畫出自然不奇怪的眉毛?跟著本篇快速掌握畫眉重點,一分鐘就能畫出漂亮自然眉。什麼臉型配什麼眉毛,影響你整張臉輪廓的眉型到底該怎麼畫呢?
  • 高新區召開少兒科幻畫比賽評審 暨優秀作品點評會
    近日,高新區召開了科幻畫比賽評審暨優秀作品點評會,轄區各中小學美術老師共30人出席會議。本次由區科協、區社會事業局主辦的科幻繪畫大賽共收到科幻繪畫540幅,各中小學送選作品數量比往年有大幅度提升,經過兩輪評審,共評選出區級一等獎100幅、二等獎110幅、三等獎120幅。
  • 2020年不要再畫一字眉了!教你如何畫出適合自己的畫眉!
    眉毛勾勒出面部,是我們表達情感的重要組成部分。因此,眉毛的形狀和顏色的細微變化會嚴重影響某人的外觀,那麼要如何畫出好看的美型呢?就讓我們一起看下去吧!首先人臉型一般可分為七種既是橢圓形臉、方形臉、圓形臉、倒三角形臉、正三角形臉、長形臉、菱形臉。不同臉型的畫眉方法都不一樣哦。
  • 如何畫出牛X的基因簇結構圖(二)
    前段時間,小白君給大家講了如何用DNAPlotter畫基因組結構圖。有人看了小白君的文章,反映說還是沒說清楚怎麼畫基因簇的結構圖嘛。今天小白君就給大家簡單講講。整個過程其實分為三步。第一步,打開DNAPlotter。我們之前說過DNAPlotter要電腦裡安裝java才行哦。
  • 兒童畫創意|好玩的撕紙畫教程,動手動腦又好看(內附優秀作品賞析
    3、在撕好的花瓣上畫出線條裝飾。 2、在各類卡紙上畫出自己喜歡的海洋生物,徒手把畫好的生物撕出來,然後畫出花紋。
  • 新手如何快速畫好眉毛?掌握這幾個小技巧,畫出的眉毛自然又好看
    新手如何快速畫好眉毛?掌握這幾個小技巧,畫出的眉毛自然又好看!說起眉筆,相信每個女生都特別熟悉,但是卻有很多女孩子會因為沒有選對眉筆和不會用眉筆而損壞了顏值,因為每個人的審美觀念是不一樣的,比如說很多女孩子可能會認為男生化妝沒有太大的問題,但是對於周圍的人來說卻不這樣認為。
  • 如何畫地球簡筆畫 - 一學就會畫的地球兒童畫
    這個教程將向大家展示如何畫地球簡筆畫。在開始作畫之前讓我們看看下面這張完整的地球簡筆畫。好了,小朋們有沒有發現,地球的簡筆畫其實很簡單。那現在就跟著我一起繪製地球的簡筆畫吧!第一步:首先畫一個大圓圈。第二步:在圓圈的內部下方畫出南美洲的一部分輪廓。第三步:在圓圈的內部右邊畫非洲的一部分輪廓。第四步:在圓圈內部的右上位置畫出歐洲的一部分輪廓。第五步:在歐洲的旁邊畫出不列顛群島的輪廓。
  • 「夏威夷」核心架構圖、細節大曝光!-AMD,Hawaii,夏威夷,R9 290X...
    這就是夏威夷的架構圖。44個計算單元,比「大溪地」多了12組,每單元仍是64個流處理器,總計2816個,並分為四組「著色器引擎」(Shader Engine)。幾何引擎、ROP光柵單元也都劃分到了這四組著色器引擎裡,其中光柵單元每組16個,總計64個。
  • 如何畫卡車簡筆畫
    那麼如何用簡單的筆畫把卡車畫出來呢?按照下面這個簡單的卡車分步繪圖教程,來畫出自己的作品吧!卡車簡筆畫小朋友們,如果覺得自己畫出來的的卡車作品很滿意的話,不妨讓你的爸爸媽媽把那作品裱起來。好了,現在讓我們一起來畫卡車吧。
  • 如何畫出牛X的基因(組)結構圖?
    可為什麼要畫牛X的基因結構圖呢?從某種影響因子來說確實沒必要。對你沒看錯,就是影響因子。
  • 如何畫樹木簡筆畫
    那麼如何用簡單的筆畫把樹木畫出來呢?按照下面這個簡單的樹木分步繪圖教程,來畫出自己的作品吧!樹木簡筆畫小朋友們,如果覺得自己畫出來的樹木作品很滿意的話,不妨讓你的爸爸媽媽把那作品裱起來。好了,現在讓我們一起來畫樹木吧。第一步:從第一棵樹的樹幹畫起。第二步:畫一條包圍的長曲線,形成第一棵樹的樹冠。
  • 如何畫火山簡筆畫
    火山通常是呈錐形的山丘或丘陵,火山活動時能噴出很多物質,如有一些巖塊、碎石、火山灰、熱蒸汽和天然氣等物質從地殼中通過火山口噴發而出。那麼如何用簡單的筆畫把火山畫出來呢?按照下面這個簡單的火山分步繪圖教程,來畫出自己的作品吧!
  • 如何畫出不同形狀的鼻子?這個知識點非常有用啊
    人物鼻子怎麼畫?漫畫初學者該如何入門?零基礎如何學漫畫?插畫初學者如何學好繪畫?學習繪畫難嗎?想必這些都是繪畫初學者們經常在想的問題吧,就是不知道如何才能學習好繪畫,然後繪畫出自己想要畫的東西 那麼今天靈貓課堂就在網絡上收集整理了一些關於如何繪畫鼻子的教程給大家,漫畫初學者必學!
  • 山水畫:如何畫出最美的「水墨暈章」
    山水畫:如何畫出最美的「水墨暈章」山水畫的水墨暈章,首先得熟練於五彩用墨(濃、淡、焦、幹、溼)、用筆的技法和技巧。這樣的隨心筆墨,適合於小寫意,大寫意,破墨,潑墨……等。