柚子快報(bào)激活碼778899分享:如何進(jìn)行架構(gòu)管控
柚子快報(bào)激活碼778899分享:如何進(jìn)行架構(gòu)管控
架構(gòu)管控
技術(shù)管理者如何進(jìn)行架構(gòu)管控
技術(shù)管理者如何進(jìn)行架構(gòu)管控
為什么要做架構(gòu)管控
tbd
保證設(shè)計(jì)的延續(xù)性
tbd
及時(shí)掌握架構(gòu)變更信息
tbd
如何開展架構(gòu)管控
使用C4架構(gòu)圖保證架構(gòu)設(shè)計(jì)的一致性
一、C4架構(gòu)圖 C4架構(gòu)圖是近年興起的一種架構(gòu)圖,用來彌合從傳統(tǒng)瀑布開發(fā)模式轉(zhuǎn)到敏捷開發(fā)模式的實(shí)踐中,設(shè)計(jì)文檔可能缺失的問題。具體而言,在瀑布開發(fā)模式中,詳細(xì)設(shè)計(jì)文檔是事無巨細(xì)的,要么耗費(fèi)大量的時(shí)間和精力(并且在開發(fā)過程中更改的設(shè)計(jì)還要導(dǎo)致多次修訂),要么都是按照一個(gè)模板克隆出來,淪為擺設(shè)物;而在敏捷開發(fā)模式中,對敏捷一詞的(有意或無意)誤讀又會導(dǎo)致一部分項(xiàng)目欠缺設(shè)計(jì)文檔,造成后期維護(hù)困難。此外,無論哪一種模式,不同公司、不同項(xiàng)目組的技術(shù)架構(gòu)圖又是基于各自的理解,缺乏統(tǒng)一的格式和圖例。在此情形下,C4架構(gòu)圖應(yīng)運(yùn)而生,它旨在以簡潔易懂的方式描述系統(tǒng)的技術(shù)架構(gòu),既不要懶婆娘的裹腳又長又臭,又要把事情說清楚??偟膩碚f,它是簡潔主義、明確主義、重點(diǎn)主義的產(chǎn)物。
概念 核心是4種圖:
C1(Context):上下文圖或曰系統(tǒng)(System)圖,用來描述整個(gè)系統(tǒng)的主要功能。通常是4級圖中最簡潔的一個(gè)。 C2(Containers):容器圖,每個(gè)獨(dú)立部署的單元是一個(gè)容器。典型的如前端?、移動端、后端(每個(gè)微服務(wù)是一個(gè)容器)。DB、中間件也畫在這一級。 C3(Components):組件圖或曰模塊(Module)圖,組件圖不必具體到代碼層級上的單個(gè)組件(如Spring的Controller、Service等),而是邏輯模塊,即程序中的一個(gè)獨(dú)立單元,無論是業(yè)務(wù)的(縱向的)還是非業(yè)務(wù)的(橫向的)。 C4(Code):代碼圖,主要表現(xiàn)為UML類圖和實(shí)體-關(guān)系圖。 ? 嚴(yán)格來說,前后端分離的單頁應(yīng)用(SPA),前端(或移動端)應(yīng)視為兩個(gè)容器:一個(gè)是服務(wù)端容器(Http Server),負(fù)責(zé)存儲SPA以便用戶下載;一個(gè)是客戶端容器,即下載到用戶瀏覽器里的SPA。下面要介紹的畫圖工具自身的示例就是這樣做的。
這4個(gè)層級是遞進(jìn)的,如同一個(gè)地圖的局部不斷放大,看到越來越多的細(xì)節(jié)。一個(gè)Context里有多個(gè)Container,一個(gè)Container里有多個(gè)Component。因此,理論上,各層級的圖形個(gè)數(shù)呈金字塔狀,每一層都窮舉上一層中所有的直接下層元素;但在實(shí)踐中,我們通常挑重點(diǎn)的畫。
示例如下(“工單輔助平臺”是一個(gè)待做的小型項(xiàng)目,用來輔助相關(guān)角色發(fā)ITSM工單,以申請資源,還能查看自己的系統(tǒng)申請了哪些資源):
其中第一個(gè)圖(C1)為系統(tǒng)整體功能圖,包括交互者、接口系統(tǒng),見較淺藍(lán)色框圖所示。第二個(gè)圖為該框圖的細(xì)化:分成了3個(gè)Container,用虛線圈出。第三個(gè)圖則是第二個(gè)圖虛線框中中間那個(gè)后端API的細(xì)化圖,分成了4個(gè)模塊,同樣用虛線圈出。每一級中,都同時(shí)畫出與本級有直接交互的人和其它系統(tǒng)/容器/模塊,并且盡量具體到本級元素(例如C3圖中,外部系統(tǒng)“ITSM”直接與“工單生成”模塊相連,“云管平臺”系統(tǒng)直接與“資源管理”模塊相連;但另一些無法具體到模塊的,如“SPA(前端)”和“數(shù)據(jù)庫”會同時(shí)和所有模塊打交道,就只能連接到虛線框了,全連接的話線會太亂)。
注意事項(xiàng):
C4圖對于框和線怎么畫、文字怎么寫,沒有嚴(yán)格的規(guī)定,只有一些約定俗成。 交互線是單向的,不需要畫請求/響應(yīng)形式的雙向線。 C1層(系統(tǒng))不要畫得太簡單——比如只畫一個(gè)框——而要畫上用戶以及與之有交互的系統(tǒng);當(dāng)然,SSO、主數(shù)據(jù)等通用外部系統(tǒng)可不畫。 C2層(容器)還可畫上用于系統(tǒng)間交換信息的工具,典型的如message broker(kafka等);它不屬于單獨(dú)某個(gè)業(yè)務(wù)系統(tǒng),只是純技術(shù)組件;不適合出現(xiàn)在C1和C3。 從C2層開始要標(biāo)注具體技術(shù)(如JSON、REST、Vue、Spring Boot等);對于連接線,我們可統(tǒng)一為 [協(xié)議, 數(shù)據(jù)格式] 的方式,舉例如下: 一般前后端調(diào)用或微服務(wù)間調(diào)用:[HTTP, JSON]、[HTTPS, JSON] 往Redis、Kafka等中間件存取對象(用不同Serializer時(shí)):[TCP, JSON]、[TCP, STR]、[TCP, BIN] 往SQL數(shù)據(jù)庫存取對象:[JDBC, BIN] 總之,知道上層協(xié)議的填具體協(xié)議,不知道的填TCP(或UDP);知道格式的填具體格式,不知道的填BIN或者TEXT(byte[]或者ByteBuffer序列化器填BIN,String序列化器填STR或TEXT)。 C3層(組件)可以只揀C2層最主要的容器來畫。像數(shù)據(jù)庫和中間件當(dāng)然不需要畫。注意:上面的示例中,由于后端只有一個(gè)微服務(wù),所以C3層只有一個(gè)圖;假如有N個(gè)微服務(wù),那么C3層應(yīng)該有N個(gè)圖。 C4層(代碼)不需要畫。 每個(gè)圖要標(biāo)注是哪一層的圖,如“C1. 一廠一策系統(tǒng)圖”,“C3. 工單系統(tǒng)模塊圖”等。 注意風(fēng)格(顏色)統(tǒng)一,即使不用PlantUML(見下面“工具”一節(jié)),也要使用與其一致的色調(diào)和圖例,如本次關(guān)注的元素用藍(lán)色調(diào),外部系統(tǒng)/人員用灰色調(diào)。 該模型缺少子系統(tǒng)(Sub-system)的概念:比如SED是一個(gè)大的System,一廠一策是其中一個(gè)業(yè)務(wù)單元,可能不止包含一個(gè)微服務(wù),只好也當(dāng)作System畫。
柚子快報(bào)激活碼778899分享:如何進(jìn)行架構(gòu)管控
參考鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。