大型複雜系統的架構設計思考
一、背景
架構設計存在兩類系統的設計:大型系統和簡單系統的架構設計。如何進行簡單系統(單系統)設計我們看到的文章很多,大型系統設計相對較少。如何進行大型系統設計?是我們今天討論的話題。
首先,我們需要思考幾個問題。
1、 大型系統和簡單系統設計有什麼區別?
2、 大型系統設計不就是分佈式設計嗎?
3、 如何進行大型系統設計?
二、大型系統與簡單系統設計的區別
從系統的簡易程度可以將系統分爲複雜系統或簡單系統。我們這裏成複雜系統爲大型系統,大型系統是複雜系統,一般是指規模大、複雜度高的系統。而簡單系統是指規模小,複雜度也不高的系統,一般是單體,也可能是分佈式架構的簡單系統。簡單的對比如下:
三、大型系統設計不就是分佈式設計嗎
通俗講,大型系統是有多個單體系統或簡單系統組成的。一般都是分佈式系統。爲什麼不用分佈式系統呢?因爲分佈式已經到了技術層面,而系統的設計,應該從非技術到技術。而不是本末倒置。有沒有遇到這樣的情況,分佈式技術學了一大堆,結果沒搞清楚,如何進行架構設計,難道架構就是技術的堆砌嗎?
四、如何進行大型系統設計
面對複雜問題,一般採用 “分而治之” 的思想,將大問題分解爲小問題,解決掉小問題,大問題自然迎刃而解。對於系統設計來說,就是將系統拆分到適當的粒度,再組合的過程。分佈式系統,微服務架構都是 “分而治之” 思想的體現。事物是變化的,深一點講,如果掌握了事物的本質,自然不必爲問題而煩惱了。
一般系統的設計,需要考慮幾個層面,1 是業務層面,2 是系統層面,3 是技術層面。業務層面是把要解決的問題搞清楚,系統層面進行系統的設計,技術層面確定使用什麼使用實現。
寫到這裏,突然發現沒什麼可寫的了,採用分而治之思想,針對業務,系統,技術三個層面進行設計就可以了。(微笑)簡單系統也是這麼設計呀?(微笑)簡單思考是這麼回事,遇到的問題類型類似,但是設計的深度不一樣,規模不一樣呀。比如:管理一個公司和一個國家,都是管理,兩者的管理一樣嗎?
以上是知道了該做什麼?那怎麼做呢?
4.1 大型系統的設計步驟
大型複雜系統的設計不是一開始就進行架構設計,核心也不完全是分佈式技術架構。而是要從業務開始,進行逐步設計的過程。其實簡單系統也是類似的邏輯,這也就是麻雀雖小,五臟俱全的道理吧。
本文的核心是想通過引入企業架構的概念,打通很多技術人員不知道如何進行設計的問題(這也是筆者進行長時間架構學習和探索的感悟)。基本的架構設計步驟,如下:
業務架構設計,系統架構設計,技術架構設計,輸出解決方案,其中系統架構又包括應用架構和數據架構,以上統稱爲企業架構。在進行了以上設計的基礎上,纔會進入單系統的設計(以 RUP 4+1 視圖爲參考)。
五、業務架構
系統建設是爲業務服務的,所有的系統建設都是爲了解決業務問題。因此,首先做的是進行戰略分析和業務架構設計。
業務架構是企業治理結構、商業能力與價值流的正式藍圖。明確定義了企業的治理結構,業務能力,業務流程、業務數據。業務能力定義企業做什麼,業務流程定義企業怎麼做。
(1)企業治理結構一般是指組織架構,包括組織結構,業務渠道和合作夥伴。
(2)業務能力包括價值鏈,功能域和功能子域。
(3)業務流程可以細分爲主幹流程,分支流程和業務規則。
(4)業務數據是支撐業務的簡單數梳理,包括數據域,數據模型和數據規則。
六、應用架構
應用架構是一組應用系統及其交互關係的描述,每個應用系統都是一個 “邏輯功能組”,用於支撐業務功能、管理數據資產。
(1)應用架構不關注應用內部的結構,主要是識別業務和數據需要哪些系統支撐。
(2)應用架構很好的體現了 “分而治之” 的思想,在將功能識別後,分配到不同的應用。
(3)分析業務需要支撐的功能和服務,將功能和服務分配到組件和應用,設計應用之間的交互和協作。
從服務層面對業務進行支撐,主要是識別功能和服務,劃分應用系統,並完成應用系統的交互設計以及應用相關的管理工作。
七、數據架構
數據架構是設計數據資產管理藍圖,用於指導如何分析數據需求,如何進行數據架構設計。包括數據的分類和來源,邏輯數據資產,物理數據資產,數據管理,以及數據的結構和交互。
這塊可能有點繞口,看着熟悉卻不知道做什麼。簡單講就是建立數據模型,數據存儲和分佈設計,進行數據的管理。
八、 技術架構
確定系統建設的技術體系,包括技術需求,技術選型,技術架構設計和技術管理等。
技術選型:平臺選型(運行平臺,開發平臺),技術產品(框架,中間件,產品),物理選型(硬件,網絡)等;
架構設計:組件架構,網絡架構,部署架構等;
技術管理:技術大圖,選型標準,技術案例等;
九、 解決方案
綜合業務架構,應用架構,數據架構,技術架構完整整體方案的設計,可分爲《業務架構》和《技術架構》兩個文檔,《技術架構》包含應用架構,數據架構和技術架構。
十、參考資料
本文是閱讀《業務架構 · 應用架構 · 數據架構實戰》以及結合過往經驗和理解的總結,未深入談具體的架構設計方案。不足之處在所難免,歡迎留言討論。
花名:明心
多年研發和管理經驗,熟悉架構設計,設計模式,分佈式(微服務)系統,中間件領域,最近在學習企業架構和 DDD 領域驅動設計。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/k9TQiB1gkAZ3hvJshYtFuA