如何畫出優秀的架構圖?

2020-12-15 騰訊網

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

作者 | 三畫

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

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

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

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

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

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

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

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

布局怎麼畫都不滿意……

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

先理清一些基礎概念

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的理論也是不斷進化的。但不論是哪種畫圖方法論,我們回到畫圖初衷,更好的交流,我們在畫的過程中不必被條條框框所限制。簡而言之,畫之前想好:畫圖給誰看,看什麼,怎麼樣不解釋就看懂。

相關焦點

  • 程式設計師必備技能——如何畫好架構圖
    物理視圖物理視圖用於描述系統軟體到物理硬體的映射關係,反映出系統的組件是如何部署到一組可 計算機器節點上,用於指導軟體系統的部署實施過程。先不去管這些圖好不好,我們通過對這些圖的分類以及作用,思考了一下,總結下來,我們認為,在畫出一個好的架構圖之前, 首先應該要明確其受眾,再想清楚要給他們傳遞什麼信息 ,所以,不要為了畫一個物理視圖去畫物理視圖,為了畫一個邏輯視圖去畫邏輯視圖,而應該根據受眾的不同,傳遞的信息的不同,用圖準確地表達出來,最後的圖可能就是在這樣一些分類裡。
  • 如何畫架構圖?
    畫架構圖分四步走: 第一,搞清楚要畫的架構圖的類型; 第二,確認架構圖中的關鍵要素(比如產品、技術、服務); 第三,梳理關鍵要素之間的關聯:包含、支撐、同級並列等; 第四,輸出關聯關係清晰的架構圖。
  • 0基礎如何學漫畫眼睛?教你畫出好看的眼睛
    0基礎如何學漫畫眼睛?教你畫出好看的眼睛!想要塑造好頭部形象,除了解頭部的基本形體結構之外,還必須對面部的五官作深入細緻的研究,那麼五官該如何去刻畫?本期給大家介紹一下漫畫人物眼睛的頭視該怎麼畫?給大家講講一下眼睛的透視關係~
  • 如何畫出一隻狗?
    02如何開始畫一幅畫?選擇畫什麼題材和自己當時的心情、境遇是分不開的。選一個平時你就關注或者腦袋裡一直有印象的領域,開始自己的繪畫生活是最合適的。至於繪畫工具,如果從鉛筆畫畫起,你就只需要一隻筆、一張紙。畫畫就如同寫字一樣,如果把畫畫當成寫日記的一種方法,幾條簡單的線也可以用來表達。
  • 教你如何畫出陰影
    如何繪畫陰影?很多萌新小白可能對於處理陰影可以說是一團漿糊,不知道從哪裡下筆才能畫好。今天的教程,就是關於如何處理陰影的。如果我們畫出來這道陰影,會有很立體的感覺——嘴巴也是如此,我們可以做一道弧線——鎖骨和肩膀之間是呈現三角形的——畫出陰影的時候,效果應該是這樣的——好了,這就是最終的陰影處理效果。
  • 如何畫出一棵生動的樹
    1.懸崖式懸崖式露根大多數是用根扒抓於石塊之間,因此露根很明顯,先畫根前部再畫後部,最後畫出樹木。種類較多,入畫的都以黑松較多。1.先用淡墨勾出樹幹的輪廓,而後在樹幹上的邊緣勾出松樹鱗片。勾鱗片要出於樹幹邊緣靠外一點,不能平鋪於樹幹中,這樣就能顯示樹幹的質感。
  • 如何正確用力畫出流暢的線條?畫不好線條的你可以收藏了!
    如何正確用力畫出流暢的線條?畫不好線條的你可以收藏了!一些剛接觸數位板的朋友可能會發現,在數位板畫畫和在紙上畫畫是有一定區別的,線條很難控制,那麼如何在數位板上畫出流暢線條?以「返回」(Ctrl+z)為前提大膽下筆這個方法建議使用在想漂亮地畫出較長線條的時候。尤其推薦應用於想流暢地繪製頭髮和身體曲線的狀況下。可以不擔心失敗,不斷重畫直到勾勒出滿意的線條為止!像是從肩膀畫到手肘、從手肘畫到手腕,只要留意身體的各處關節一口氣勾勒出線條,就能畫出顧及各元件曲線且不生硬的線稿。
  • 畫的畫靈性不夠怎麼辦?如何提高!
    本文由「學美術上美術集網校」原創,圖片素材來自網絡,僅供學習分享 畫的畫靈性不夠怎麼辦?如何提高!關於靈性,是一個偏個人感受的詞。而且針對不同的畫、不同的風格、不同題材,靈性所指的東西並不是完全統一的,更別說一千個觀眾眼中有一千個哈姆雷特了。
  • 如何畫出一幅經典的淺絳山水畫?
    筆墨技法筆墨的勾、皴、染、點、擦:「勾」是勾出物體的輪廓線;「皴」是用長短寬窄不同的筆觸表達物體的明暗和空間;「染」是用淡墨烘染;「點」是點苔。點染可以增加景物的蒼茫氣氛,也可以加強畫面景物深淺遠近的對比,使之層次分明、豐富、生動。用墨方法可分為潑墨法、積墨法、破墨法、宿墨法,焦墨法等,這幾種方法也可以結合使用。
  • 漫畫大師畫出梅西畫像!並教你如何五步畫出梅西!你學會了嗎?
    梅西可以說是足壇最受關注的球員了,許多球迷都是他的粉絲,而且梅西的粉絲中有許多大牌人物,比如科比等人都是梅西的粉絲,而近日又有一位梅西的粉絲出來幫助梅西拉粉了,他就是著名的漫畫家保羅-特雷維利昂,近日他親自給梅西畫了一個漫畫的自畫像,而且還親自示範如何畫出梅西的漫畫,而且只需要五個步驟
  • 漫畫人物中裙褶子如何畫出立體感?
    ▲ 點擊紅色字:「藝學繪」關注我們,畫畫乾貨不錯過 漫畫中可愛的漫畫女主角基本上都會有搭配好看的裙子,在繪畫中如何畫出裙褶子,如何繪畫的有立體感?這是很多新手朋友面臨的困惑,下面小編整理了一些裙褶子的繪畫教程,一起來學習一下吧!
  • 初學者如何學畫漫畫?學畫漫畫入門
    初學者如何學畫漫畫?學畫漫畫入門!新手怎麼開始創作自己的漫畫?漫畫是娛樂作品,因此要通過作品讓讀者高興起來,這是一件非常困難的事情。但是,如果達不到這一點,就無法創作出有趣的漫畫作品。首先,我們來看看一般的漫畫製作流程是什麼?
  • 如何畫男性腹肌?詳細教程分分鐘畫出來!
    如何畫男性腹肌?詳細教程分分鐘畫出來!腹部,是充分展示健壯的男性和健康的女性登場人物的魅力的部位。但很多朋友畫出來的腹肌就更巧克力塊一樣,那麼究竟男生腹肌怎麼畫?今天微課菌分享一期關於一些肌肉練習參考的資源教程給大家,希望能對大家畫腹肌起到一些幫助!
  • 動漫繪畫教程:如何畫出好看的頭髮?
    動漫繪畫教程:如何畫出好看的頭髮?各種女性髮型繪製教程大全, 動漫中的女生總會有五花八門的髮型,其中有些髮型只是為了人物設定時的效果,在現實中根本無法實現,而有些髮型就很適合在現實中重現。因此,今天輕微課繪畫網校小編給到各位小夥伴帶來了不同髮型繪畫練習,以後再也不擔心不會畫頭髮了!
  • 如何畫出動漫襯衫?動漫人物帥氣襯衫的畫法教程
    如何畫出動漫襯衫?動漫人物帥氣襯衫的畫法教程!很多朋友在給人物畫衣服的時候會出現,衣服總畫不好的情況,比說畫襯衫,卻不知道襯衫的領子是什麼形狀?布料的皺褶怎麼畫?這是沒有理解衣服的構造、沒有配合人物角色的身形繪製衣服所造成的,還會讓衣服看來不自然且平面死板。
  • 如何畫出好看的動漫人物?人物繪製入門教程
    如何畫出好看的動漫人物?人物繪製入門教程!很多同學都說漫畫人物很難畫,畫出來的人物形態不佳,看起來很醜,其實對於初學者而言建議想要畫好人物要先掌握人物的形體,那麼怎麼掌握人物的形體呢「輕微課」的網站上非常多的繪畫教程、繪畫素材,也有專業的繪畫課程,學繪畫的小夥伴可以去上面找到很多有用的繪畫學習資源哦!
  • 當一部優秀的小說遇到一個優秀的畫者,那將是對彼此的成全
    畫師:灰灰其實,當一部優秀的小說遇到了一個同樣優秀的畫者,那將是對彼此最大的成全。當然,優秀的畫師千千萬,每個人表達的方法都不盡相同。但正式因為如此,才能給我們展現出更多的優秀作品。畫師:6uooU最近還喜歡一位韓國的畫師,她的畫作溫柔裡帶著溫情,搞笑裡含著淚水。文化不分國界,熱愛沒有界限。
  • 如何快速畫出漫畫眼睛?正確掌握漫畫眼睛畫法
    如何快速畫出漫畫眼睛?正確掌握漫畫眼睛畫法!先考慮要畫的風格所適合的是什麼樣的面貌,如果是畫臉型,有兩種,為此,微課菌多年來一直致力於收集網上大佬們分享的教程,然後分享給大家。一是較為圓潤可愛的娃娃臉。
  • 「畫」出好故事 評出優秀集體 「金融力量 抗疫後盾」大型融媒體...
    「畫」出好故事 評出優秀集體「金融力量 抗疫後盾」大型融媒體公益活動即將結束掌上蘭州·蘭州晨報記者 張海龍凝聚金融力量由甘肅金融工會、甘肅新媒體集團·掌上蘭州共同發起的「金融力量 抗疫後盾」大型融媒體公益宣傳活動,經過2個月的徵集、初選、二次創編等環節,即將畫上圓滿句號。「金融力量 抗疫後盾」大型融媒體公益宣傳活動,旨在充分挖掘展示抗疫一線的金融好故事,發揮先進人物示範引領作用。
  • 衰漫畫:如何畫出一幅好畫?學霸的方法簡單又實用,學渣用命作畫
    把自己心裡的風景或者事物在紙上畫出來,這也是一種藝術哦,用色彩和線條在紙上或其他平面上繪寫事物形象,可以讓人更加具象的理解事物的認知,畫畫水平高超的人我們一般稱為畫家,獨特的藝術風格,迥異的思維讓他們的畫往往引人入勝,仿佛身臨其境。衰漫畫:如何畫出一幅好畫?