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