技術文檔中的各種架構圖該怎么畫? by彭文華
這是彭文華的第173篇原創(chuàng)

哎呀媽呀,現(xiàn)在催稿群里的要求越來越高了啊!你看看這哥們的要求,太難了好嗎???

不過這還真是系統(tǒng)架構師該干的事情。話說我最近寫的東西的確有些偏了,我認真反省,堅決改正!感謝兄弟們。
系統(tǒng)架構,架構啥?
雖然我本碩都是軟件工程專業(yè),軟件設計是一直在學的,軟件架構設計思想也早早的學過,但是很長一段時間都不知道架構到底是個啥東西。剛?cè)胄械臅r候只會寫代碼,后來變老手了,就開始寫項目文檔。
一開始還接觸不到核心,只是寫自己工作內(nèi)容相關的。之后當項目經(jīng)理,就能看到完整的項目文檔,但是仍然不太明白為啥要那么多架構圖。什么總體架構、邏輯架構、數(shù)據(jù)架構、功能架構、網(wǎng)絡架構、運行架構等等。

我反正是一頭的霧水,只顧把自己那攤子事兒搞定就完事了。其他的就追著開發(fā)那邊給畫。而且乙方做項目,基本都是先干活,后補文檔。后來,隨著項目越做越多,學習的知識也越來越豐富,最重要的是文檔越寫越多,慢慢的我也就明白了。
其實系統(tǒng)架構,說白了,就相當于房子的設計過程。需要一個總體的樣子,還得有里面的支撐結(jié)構,還要設計好水暖管線,外殼的裝飾以及樣板房的設計。每一個內(nèi)容都得要一套圖紙,產(chǎn)出結(jié)果自然就是各種架構圖了。

這些架構圖都表達啥?
講真,要寫好這篇文章,得把《系統(tǒng)架構師》的考試內(nèi)容細細的讀一遍才行。
我這糙就糙一些吧,你看個大概,回頭我再細化,寫的不對的地方,可以加我微信,給我提意見,我給發(fā)紅包。
總體架構
總體架構呢,就是買房的時候進門看到的那個大沙盤:整個小區(qū)有多大,樓有多高、里面的環(huán)境是咋樣的?都有哪些配套?方方面面看個大概。所以總體架構基本上把下面所有的架構都體現(xiàn)了。下面所有的架構也都是要與總體架構保持一致。
總體架構需要說明幾件事情:
1、整個系統(tǒng)的硬件設置是怎么回事?
2、數(shù)據(jù)大概是從哪里來,怎么采集、存儲、處理、交換的?
3、做了哪些功能抽象,以便于支撐上層的應用?
4、提供哪些業(yè)務應用?管理、控制等功能有哪些?
5、終端用戶怎么訪問和使用這些應用?
6、該系統(tǒng)與外部系統(tǒng)是怎么進行對接的?
7、如何保障整個系統(tǒng)的安全、可靠、高質(zhì)量的建設?

這個整體架構還是比較簡單的,復雜的手機上沒法看。你打開看個意思就行了。
邏輯架構
其實總體架構有了,邏輯架構也就有了。為啥呢?如果說總體架構是整個小區(qū)的沙盤,那邏輯架構就是這棟樓房了。把小區(qū)大門、綠地、路等保障小區(qū)安全、有序的東西去掉。所以邏輯架構里會去掉各種保障、底層的硬件基礎等非軟件開發(fā)邏輯核心的內(nèi)容。
所以有很多簡單的項目壓根就不寫邏輯架構,直接用總體架構就行了。復雜的呢,就要把上面總體架構中間分層的邏輯給寫清楚一些。
邏輯架構設計的目的就是為了告訴讀者,整個系統(tǒng)是怎么產(chǎn)生左右的。所謂的系統(tǒng)架構,主要說的就是這部分。早期的單體架構、后面的各種分層架構、微服務、服務網(wǎng)格等,說的都是在這里進行設計。
在設計的時候,會用到很多種設計模式,比如你看到有一個應用支撐層/服務層之類的,這就是做了一個MVC,把業(yè)務邏輯和用戶前端分離。而所有的邏輯架構都有數(shù)據(jù)層,這是最早的MVP,即數(shù)據(jù)、用戶視圖和處理邏輯分離。當然,系統(tǒng)越復雜,架構圖就越復雜。這里只是給一個簡單的圖供你參考了。

應用架構
顧名思義,就是應用太豐富了,需要整理整理。內(nèi)部有哪些應用,怎么對外部提供服務。很多項目都沒有這個,因為應用比較少,不值得多廢點人工單獨寫。

技術架構
技術架構要干啥也就很清楚了,就是每一層,我們都用什么組件、什么技術解決什么問題。

數(shù)據(jù)架構
數(shù)據(jù)架構其實就是從數(shù)據(jù)側(cè)描述數(shù)據(jù)怎么來、怎么存、怎么加工、怎么使用。就像這樣:

從數(shù)據(jù)源開始,數(shù)據(jù)通過哪些方式集成過來;集成到數(shù)倉之后,都存在哪里,數(shù)倉怎么分層,每一層都干啥;在數(shù)據(jù)集市中又怎么存、怎么管;到數(shù)據(jù)應用層又提供哪些應用。上面所有的一切,都用什么技術,什么組件,解決什么問題。
部署架構
部署架構也叫網(wǎng)絡架構,就是底層服務器、網(wǎng)路的設計,提供網(wǎng)絡安全、服務可靠性的設計。再簡單一些理解,就是你這些應用、數(shù)據(jù)庫都放在那臺服務器上,這些服務器都在哪個ip端,怎么進行訪問。

功能架構
這個沒啥好說的,就是你的前臺頁面的功能菜單的目錄結(jié)構。你怎么組織系統(tǒng)的所有功能,給用戶提供相應的服務。
運行架構
運行架構其實就是軟件內(nèi)部,這些系統(tǒng)內(nèi)部是怎么運轉(zhuǎn)的,一般會畫很多時序圖、狀態(tài)圖、活動圖。這玩意可費勁了,我們一般不單獨畫一個運行架構,而是在概要和詳細設計里畫。
區(qū)別與聯(lián)系
傳統(tǒng)信息系統(tǒng)項目和大數(shù)據(jù)項目還是有很顯著的區(qū)別的。從架構層面上來說,該有的肯定都得有,只不過其中的內(nèi)容會有側(cè)重點。我簡單對比一下,您將就著看:
| 對比項 | 傳統(tǒng)IT項目 | 大數(shù)據(jù)項目 |
| 重點 | 80%應用 | 80%數(shù)據(jù) |
| 類型 | OLTP事務處理 | OLAP分析處理 |
| 安全 | 應用安全 | 數(shù)據(jù)安全、質(zhì)量、治理 |
| 總體架構 | 側(cè)重業(yè)務應用 | 放大數(shù)據(jù)層 |
| 邏輯架構 | 各種SOA、微服務 | 各種DW、OLAP分層 |
| 技術架構 | 什么Spring、JSP、Ajax | 各種Hadoop生態(tài)組件 |
| 數(shù)據(jù)架構 | 側(cè)重關系型數(shù)據(jù)庫 | 側(cè)重分布式數(shù)據(jù)庫 |
| 部署架構 | 一般主從即可 | 集群 |
| 功能/運行 | 看項目,無偏向 | 看項目,無偏向 |
總結(jié)
所有的架構都是基于業(yè)務出發(fā)的,因此脫離實際業(yè)務的架構都是無意義的。
我們在進行架構設計的時候,需要用不同的圖形來解釋、闡釋整個系統(tǒng)運行的肌理。
總體架構涵蓋系統(tǒng)的方方面面;
邏輯架構闡述整個系統(tǒng)是如何實現(xiàn)業(yè)務需求的;
技術架構則從技術實現(xiàn)的角度闡述系統(tǒng)的構造;
數(shù)據(jù)架構講解數(shù)據(jù)從哪來,到哪里去;
部署架構則講清楚系統(tǒng)放在那臺服務器上,怎么才能訪問到;
功能架構用來組織業(yè)務功能;
運行架構則解析系統(tǒng)內(nèi)部運行機理。
擴展閱讀:《系統(tǒng)架構設計師考試寶典+各種系統(tǒng)架構圖》,公眾號“大數(shù)據(jù)架構師”后臺回復“系統(tǒng)架構”即可下載。
我建了一個群,每天分享各種技術文檔。加我微信shirenpengwh,咱進群聊~~

配合以下文章享受更佳
下載 | 貝殼的數(shù)據(jù)中臺工程架構實踐之大數(shù)據(jù)開發(fā)平臺
我需要你的轉(zhuǎn)發(fā),小小的滿足一下我的虛榮心
我的新書《B端產(chǎn)品經(jīng)理必修課2.0》已經(jīng)開售了。
這是對我的第一本書的全新改版,也是關于B端產(chǎn)品的方方面面。
查看具體內(nèi)容:我的《B端產(chǎn)品經(jīng)理必修課》升級了
推薦閱讀:
