架構(gòu)設(shè)計(jì)之如何寫(xiě)架構(gòu)設(shè)計(jì)說(shuō)明書(shū)
架構(gòu)設(shè)計(jì)是需求分析到軟件實(shí)現(xiàn)的橋梁,也是決定軟件質(zhì)量的關(guān)鍵。編制架構(gòu)設(shè)計(jì)說(shuō)明書(shū)是開(kāi)發(fā)人員向架構(gòu)師轉(zhuǎn)變必定會(huì)經(jīng)歷的過(guò)程。在架構(gòu)師整個(gè)的成長(zhǎng)過(guò)程中,必定會(huì)經(jīng)歷編制架構(gòu)設(shè)計(jì)說(shuō)明書(shū)、評(píng)審架構(gòu)設(shè)計(jì)說(shuō)明書(shū)以及根據(jù)業(yè)務(wù)需求分析設(shè)計(jì)系統(tǒng)架構(gòu)的三個(gè)過(guò)程。作為一個(gè)架構(gòu)師,我想嘗試一下根據(jù)這三個(gè)過(guò)程對(duì)不同能力需要,寫(xiě)一次系列文章,包括《架構(gòu)設(shè)計(jì)三部曲之如何寫(xiě)架構(gòu)設(shè)計(jì)說(shuō)明書(shū)》、《架構(gòu)設(shè)計(jì)三部曲之如何評(píng)審架構(gòu)設(shè)計(jì)說(shuō)明書(shū)》以及《架構(gòu)設(shè)計(jì)三部曲之如何做架構(gòu)設(shè)計(jì)》,一來(lái)可以幫助自己整理思路,重新審視架構(gòu)設(shè)計(jì),二來(lái)也可以與大家分享心得,聽(tīng)取大家的意見(jiàn),共同進(jìn)步。本篇屬于系列中的***篇。
那么到底如何編寫(xiě)架構(gòu)設(shè)計(jì)說(shuō)明書(shū)?該說(shuō)明書(shū)應(yīng)該包括哪些方面的內(nèi)容呢?我們知道,架構(gòu)設(shè)計(jì)說(shuō)明書(shū)是闡述系統(tǒng)架構(gòu)具體內(nèi)容的,根據(jù)我之前的文章《我的架構(gòu)觀-架構(gòu)未來(lái)的發(fā)展》我們明白架構(gòu)的本質(zhì)是呈現(xiàn)三大能力:即系統(tǒng)如何面向最終用戶(hù)提供支撐能力、如何面向外部系統(tǒng)提供交互能力、如何面向企業(yè)數(shù)據(jù)提供處理能力。因此從這個(gè)角度看,對(duì)架構(gòu)設(shè)計(jì)說(shuō)明書(shū)的章節(jié)的設(shè)置及章節(jié)內(nèi)容安排應(yīng)該要能說(shuō)明清楚系統(tǒng)架構(gòu)到底是如何呈現(xiàn)這三種能力的,讓我們逐個(gè)分析:
系統(tǒng)如何面向最終用戶(hù)提供支撐能力:這一點(diǎn)是要從系統(tǒng)自身的能力來(lái)看,即本系統(tǒng)到底應(yīng)該具備哪些功能,各功能間如何協(xié)作以滿(mǎn)足支撐最終用戶(hù)的使用,其實(shí)就是要講系統(tǒng)的功能架構(gòu)或邏輯架構(gòu),回答系統(tǒng)從功能粒度上劃分了幾個(gè)功能模塊或子系統(tǒng),各模塊或子系統(tǒng)之間的內(nèi)部接口關(guān)系如何等問(wèn)題。當(dāng)然還有一個(gè)需要考慮的問(wèn)題,在縱向維度上,隨著架構(gòu)設(shè)計(jì)理念的不斷發(fā)展, 邏輯架構(gòu)模型從最初的展示-數(shù)據(jù)兩層模型,到展示-邏輯-數(shù)據(jù)(所謂的MVC)三層模型,甚至到展示-調(diào)用接口-邏輯-數(shù)據(jù)接口-數(shù)據(jù)五層模型,不同層次表明系統(tǒng)內(nèi)部設(shè)計(jì)的精細(xì)程度,因此在邏輯架構(gòu)設(shè)計(jì)中也需要針對(duì)實(shí)際情況加上這種分層設(shè)計(jì)的內(nèi)容。尤其是對(duì)于powser/Server架構(gòu)模式的MIS類(lèi)系統(tǒng),這種層次更為常見(jiàn)。另外,用戶(hù)相對(duì)于機(jī)器來(lái)說(shuō)對(duì)系統(tǒng)提供的能力是有個(gè)人喜好要求的,不僅要求系統(tǒng)能提供支撐,而且還要更加穩(wěn)定的、更方便的、靈活的、快速的等提供,這就需要在架構(gòu)設(shè)計(jì)說(shuō)明書(shū)中增加所謂非功能性的設(shè)計(jì),即需要描述系統(tǒng)的性能、高可用、可擴(kuò)展性、可維護(hù)、安全性、可移植性等。
系統(tǒng)如何面向外部系統(tǒng)提供交互能力:這一點(diǎn)是要把系統(tǒng)當(dāng)成一個(gè)完整的整體,闡述它如何與外部的系統(tǒng)發(fā)生調(diào)用關(guān)系,外部系統(tǒng)為它提供了哪些開(kāi)放接口,它又為外部系統(tǒng)提供了哪些外部接口和能力,同時(shí),在這種相互的調(diào)用關(guān)系中它處于整個(gè)IT架構(gòu)的何種位置,這其實(shí)就是在說(shuō)系統(tǒng)的整體架構(gòu)。另外,如果我們把操作系統(tǒng)和硬件服務(wù)器也當(dāng)成一類(lèi)特殊的外部系統(tǒng)的話(huà),就需要說(shuō)明系統(tǒng)如何基于操作系統(tǒng)利用硬件服務(wù)器來(lái)提供計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)等能力,系統(tǒng)如何把自己拆分成不同的部分以便部署在服務(wù)器上,這其實(shí)說(shuō)的是部署架構(gòu)。
如何面向企業(yè)數(shù)據(jù)提供處理能力:信息系統(tǒng)的原始驅(qū)動(dòng)力就是人們需要借助計(jì)算機(jī)的強(qiáng)大計(jì)算能力來(lái)輔助處理大量數(shù)據(jù),從而形成可理解的信息,并最終形成可掌握的知識(shí)。因此數(shù)據(jù)處理是系統(tǒng)的根本目的,至關(guān)重要,在架構(gòu)設(shè)計(jì)說(shuō)明書(shū)中需要單獨(dú)描述系統(tǒng)對(duì)數(shù)據(jù)的處理能力,即我們所謂的系統(tǒng)數(shù)據(jù)架構(gòu)。這還是可以從對(duì)外和對(duì)內(nèi)兩個(gè)角度來(lái)看,對(duì)外即需要說(shuō)明本系統(tǒng)處理的數(shù)據(jù)在整個(gè)企業(yè)數(shù)據(jù)流中所處的位置,與相關(guān)的上下游數(shù)據(jù)之間的關(guān)系,本系統(tǒng)需要從數(shù)據(jù)上游的外部系統(tǒng)獲取哪些數(shù)據(jù)?又需要為數(shù)據(jù)下游的系統(tǒng)提供哪些數(shù)據(jù);對(duì)內(nèi)需要說(shuō)明本系統(tǒng)根據(jù)業(yè)務(wù)需求設(shè)計(jì)了哪些關(guān)鍵數(shù)據(jù)表,它們之間是何種主外鍵關(guān)系,是否需要從外部導(dǎo)入數(shù)據(jù)為系統(tǒng)做數(shù)據(jù)初始化等。當(dāng)然還有對(duì)數(shù)據(jù)管理的描述,包括如何做數(shù)據(jù)冗余設(shè)計(jì),備份機(jī)制,數(shù)據(jù)安全管理機(jī)制等。
好,分析完這三種能力,我們幾乎就找出了架構(gòu)設(shè)計(jì)說(shuō)明書(shū)中應(yīng)該包括的內(nèi)容,包括整體架構(gòu)、邏輯架構(gòu)、數(shù)據(jù)架構(gòu)、部署架構(gòu)、內(nèi)外部接口、非功能性設(shè)計(jì)等,如果純把架構(gòu)設(shè)計(jì)作為理論研究,有這些也就夠了。但是現(xiàn)實(shí)中我們編制架構(gòu)設(shè)計(jì)說(shuō)明書(shū)畢竟是用來(lái)指導(dǎo)我們后續(xù)系統(tǒng)開(kāi)發(fā)的,是需要真正落地實(shí)施的,因此就會(huì)涉及使用何種技術(shù)實(shí)現(xiàn)?有哪些關(guān)鍵技術(shù)?用到了何種成熟或開(kāi)源技術(shù)組件?復(fù)用了哪些之前的技術(shù)成果?等等,同時(shí)也包括對(duì)技術(shù)風(fēng)險(xiǎn)的考慮與預(yù)防措施。所有這些就是技術(shù)架構(gòu)的內(nèi)容。
綜上,我們就可以得到一份完整的架構(gòu)設(shè)計(jì)說(shuō)明書(shū)的結(jié)構(gòu)及應(yīng)該包含的內(nèi)容,其大致章節(jié)應(yīng)該是這樣的:
文檔概述:包含項(xiàng)目背景、項(xiàng)目目標(biāo)、文檔版本信息、目標(biāo)讀者、參考文檔、名詞解釋之類(lèi)的一般文檔都會(huì)有的章節(jié);
整體架構(gòu):主要從整個(gè)IT層描述系統(tǒng)所處的位置,與周邊關(guān)聯(lián)系統(tǒng)之間的調(diào)用關(guān)系;
邏輯架構(gòu):系統(tǒng)內(nèi)部功能模塊的劃分以及各模塊功能介紹、相互之間的關(guān)系表述;
接口設(shè)計(jì):包括系統(tǒng)間的接口設(shè)計(jì)以及內(nèi)部功能模塊之間的接口設(shè)計(jì);
數(shù)據(jù)架構(gòu):本系統(tǒng)與上下游系統(tǒng)間的數(shù)據(jù)流關(guān)系,以及本系統(tǒng)關(guān)鍵數(shù)據(jù)表設(shè)計(jì)、數(shù)據(jù)管理策略等;
技術(shù)架構(gòu):實(shí)施此架構(gòu)需要用到哪些技術(shù)能力,有哪些復(fù)用能力及風(fēng)險(xiǎn);
部署架構(gòu):系統(tǒng)如何部署,網(wǎng)絡(luò)拓?fù)渖嫌泻我?,?duì)硬件服務(wù)器有何要求,需要幾臺(tái),是否需要優(yōu)化服務(wù)器參數(shù);
非功能性設(shè)計(jì):性能、高可用、可擴(kuò)展性、可維護(hù)、安全性、可移植性等。
其他說(shuō)明:如特別約束條件、風(fēng)險(xiǎn)考慮、進(jìn)度要求、政策限制、環(huán)境影響等;
以上,便是我認(rèn)為一份較為完整的架構(gòu)設(shè)計(jì)說(shuō)明書(shū)應(yīng)該包括的內(nèi)容了。