软件架构设计三步曲
??軟件架構設計由軟件需求驅動。架構設計分為三個階段:需求把握階段、概念架構設計階段、架構細化階段。
????第一階段,需求把握階段。
????要求架構師參與需求分析,但不對需求分析結果負責,在這階段架構師主要是理解需求,對需求進行分類。軟件需求分為三個層次:業務級(組織級)需求、用戶級需求、行為級(系統開發級)需求,該劃分方法有別于RUP。從別的角度來看需求包括了:功能要求、質量要求和約束。同前面的三個層次組成二維需求矩陣,架構師在這階段的設計可以借助于該矩陣來理清楚需求間關系,和發現衍生需求。
????-----------------------------------------------------------------------------
???????????????|????????功能????????|????????質量?????????|?????????約束
????-----------|--------------------|---------------------|----------------------
????業務級需求 |????????????????????|?????????????????????|
????-----------|--------------------|---------------------|----------------------
????用戶級需求 |????????????????????|?????????????????????|?
????-----------|--------------------|---------------------|----------------------
????開發級需求 |????????????????????|?????????????????????|
????-----------------------------------------------------------------------------
????架構設計之前就要抓住重點關鍵質量目標,第一時間判斷關鍵質量目標之間的沖突,制定權衡取舍的策略。例如,性能優先還是擴展性優先。
????需求決定架構,對架構有影響因素多而雜,我們需要把這些影響因素分類整理,建立全面有序的理解。然后針對約束、質量、功能這3類需求開展相應工作:分析約束影響,識別隱含的需求;確定關鍵質量,識別關鍵質量之間的關系,以及他們之間的沖突,制定權衡取舍的策略;確定關鍵功能,便于有針對性地分配有限的設計時間。這階段的需求分析總結為以下四步:
????1、需求結構化
????2、分析約束影響
????3、確定重點質量
????4、確定重點功能
?
????第二階段,概念架構設計階段。
????將重大需求、特色需求、高風險需求做為架構設計的入口,進行初步設計,然后綜合初步設計確定高層分割,并考慮非功能需求做出相應的策略。概念架構的設計是大型系統設計的關鍵。在這階段可以借助魯棒圖、架構模式、目標-場景-決策表來思考問題。
????第一步,初步設計,該階段主要通過對重大需求用例進行魯棒圖分析,識別出功能職責協作鏈的各個組成部分。簡單的說就是“發現職責”。
????第二步,進行高層分割,高層分割的方法主要有兩種:分系統為系統,分系統為子系統。
????分析統為多個系統,再對各個系統進行架構設計。
????分系統為子系統最常見的方式就是:邏輯分層(Layer分層)、物理分層(Tier分層)、按通用性分層、技術堆疊。
????邏輯分層重視職責的劃分,職責之間常常是上層調用下層的關系,這種分層根本不關心上層和下層是否“能分布”在不同機器上。最典型的就是四層結構:表現層、業務層、數據層、集成層(對外接口層)。
????物理分層,Tier是指“能分布”在不同機器上的軟件層。不同層之間必須有跨機器訪問的能力——可以通過遠程調用或使用通信協議等。
????按通用性分層,其實也是一種Layer。這種分層主要強調通用性,通用程度越大的層就越靠下,如:應用層、操作系統層、硬件驅動程序層。
????技術堆疊,是綜合多種分層方式的一種分層。
????第三步,考慮非功能性需求。?考慮非功能性需求,修改之前的成果,可以使用目標-場景-決策表來幫助設計。
????
????第三階段,架構細化階段。
????從概念架構繼續深入細化架構設計,在架構設計的中間產物中加入非功能性要求,對架構進行測試和驗證,不斷的對架構進行修改提升,使架構能夠滿足質量要求。質量要求是架構設計優化的驅動力!這階段要從軟件體系五個視圖來考慮架構設計:邏輯視圖、運行視圖、數據視圖、開發視圖、物理視圖。設計要從這五個方面考慮問題,要滿足五個方面的要求。
????需求的每一個功能都能對應到一個責任鏈(多個角色共同協作完成一個功能,在這個協作過程中每個角色都承擔著不同的責任)。首先,劃分子系統,對子系統的職責進行定義,并定義系統之間的接口,畫出實現每一功能的協作圖。
????這階段可以借助包圖、包接口圖、灰盒包圖、時序圖、目標-場景-決策表來思考問題。
????第一,邏輯架構設計
????邏輯架構設計可以從以下三步來實現:1、根據職責劃分結構單元。2、將結構單元組織起來完成功能,3、根據功能和質量要求對設計進行質疑,完善設計,并確定他們之間的接口。
????其中劃分結構單元的原則有以下4個:1、職責不同的單元分在不同的子系統。2、不同的通用性的單元分在不同的子系統。3、需要的技術不同,分在不同的子系統。4、根據工作量均衡原則對工作量大的子系統再做細分。
????劃分手段則有3個:1、分層。2、引入分區。3、提取機制。
????有時我們對邏輯單元中的重要類要做些深入的設計,可以采用灰盒包圖。
????邏輯架構設計的時候應該使結構設計和行為設計相分離,這樣才利于更有效的思維。
????第二,物理架構設計
????物理架構設計可以從以下三步來實現:1、選取硬件和拓撲結構。2、將邏輯單元影射到物理節點。3、關注非功能性要求,對架構進行優化。
????目標要實現“攻”/“守”6個指標。以“降低開銷”/“避免爭用”4個指標為思維方向。最終落實到“物理節點、網絡、軟件單元、數據單元”等內容上。
????*攻:高性能、持續可用性、可伸縮性
????*守:經濟性、技術可行性、可維護性
????*降低開銷:降低節點內計算開銷、降低節點間通信開銷
????*避免爭用:避免節點內cpu、內存、磁盤資源的爭用,避免節點間網絡帶寬的爭用。
????第三,運行架構設計
????該設計為可選項,但對于系統復雜,有多任務并發或嵌入式系統等情況,則要求做。主要涉及進程、線程或中斷程序的設計,包括以下工作:
????1、確定引入那些控制流
????2、確定每條控制流的任務
????3、控制流的創建、銷毀問題
????4、控制流之間的同步關系、通信機制如何,如果有資源競爭的話還要引入加鎖機制。
????第四,開發架構設計
????開發架構設計主要工作:1、邏輯單元和程序單元的影射。2、選用什么開發語言和開發工具。3、工程的劃分如何,目錄結構如何,程序單元之間的關系如何,編譯與依賴關系如何?
????* 大粒度的單元重用可以減少類似bug重復修改次數。為從根本上降低成本,重用測試是關鍵。
????第五,數據架構設計
????數據庫架構設計很關鍵,常常影響系統的成敗。
????數據分布方式有6種:
????1、獨立schema
????2、集中式
????3、分區
????4、復制
????5、子集
????6、數據重組
????其中推薦優先考慮獨立schema方式,因為該方式具備容易維護的優點:
????——————————————————————
????數據分布方式???????????優點
????——————————————————————
????獨立schema????????通信開銷少、可管理性好
????——————————————————————
????集中式?????????????數據一致性高、可管理性好
????——————————————————————
????分區方式???????????擴展性高
????——————————————————————
????復制???????????????安全性高
????——————————————————————
????子集
????——————————————————————
????數據重組
????——————————————————————
????但實際應用中還是要根據具體情況來確定,有時常常是多種分布方式一起使用。
???
????那么架構設計需要進行到什么程度呢?答案是:1、可以為開發人員帶來指導和約束。2、按項目情況適當調整深度。3、業務層、通用機制應該更深入的設計。
????業務層決定軟件的擴展性,通用機制決定軟件的穩定性。
????領域模型設計是業務層設計的核心。
????總之,架構設計概括起來就分為上面的三個階段,各個階段側重點不同,但非功能性需求都要考慮的,它貫穿了整個設計。可以借助“目標-場景-決策表”(場景技術)來幫助對非功能性設計的思維。
總結
- 上一篇: 详解SOA五种基本架构模式
- 下一篇: 软件架构视图—4+1模式