2009年5月5日
一、什么是架構(gòu)
在牛津高階詞典(第7版)中,架構(gòu)(architecture)一詞的解釋是:the design an structure of a computer system,而架構(gòu)師(architect)一詞的解釋是:a person who is responsible for planning or creating an idea, an event or a situation。
針對(duì)于企業(yè)應(yīng)用,依據(jù)不同的關(guān)注點(diǎn),架構(gòu)可以分為如下幾類:
業(yè)務(wù)架構(gòu)(Business Architecture):關(guān)注于業(yè)務(wù)及其流程;
應(yīng)用架構(gòu)(Application Architecture):關(guān)注于應(yīng)用系統(tǒng)設(shè)計(jì);
基礎(chǔ)架構(gòu)(Infrastructure Architecture):關(guān)注于基礎(chǔ)技術(shù);
數(shù)據(jù)架構(gòu)(Data Architecture):關(guān)注于數(shù)據(jù)存儲(chǔ)及其規(guī)劃;
這里所說(shuō)的企業(yè)應(yīng)用架構(gòu),即屬于應(yīng)用架構(gòu),包括如下幾個(gè)部分:
1.目標(biāo)和愿景。即應(yīng)用系統(tǒng)所面臨的問(wèn)題域。
2.評(píng)價(jià)指標(biāo)。從哪些緯度和指標(biāo)來(lái)評(píng)價(jià)和度量解決方案。
3.原則和方法論。為解決這些問(wèn)題,所采用的原則及其方法論。
4.技術(shù)架構(gòu)。架構(gòu)的技術(shù)層面,給出相應(yīng)的設(shè)計(jì)以及結(jié)構(gòu),描述應(yīng)用系統(tǒng)。
5.組織因素。架構(gòu)的組織層面,組織的各個(gè)部分如何參與。
二、架構(gòu)的目標(biāo)和愿景
1. 架構(gòu)的問(wèn)題來(lái)源
1. 外部,客戶要求包括了業(yè)務(wù)和技術(shù)上。
2. 內(nèi)部,組織管理、項(xiàng)目管理和技術(shù)發(fā)展上。
特別的,架構(gòu)需要解決的非業(yè)務(wù)問(wèn)題包括如下:
A.系統(tǒng)目標(biāo):系統(tǒng)性能,穩(wěn)定性等。
B.項(xiàng)目目標(biāo):開(kāi)發(fā)成本,項(xiàng)目質(zhì)量等
C.項(xiàng)目過(guò)程:需求的不確定性和開(kāi)發(fā)過(guò)程的團(tuán)隊(duì)協(xié)作性,即所謂的開(kāi)發(fā)管理。
2. 架構(gòu)的核心問(wèn)題
問(wèn)題可分解為兩種類型,業(yè)務(wù)上和技術(shù)上。
1. 業(yè)務(wù)上。問(wèn)題域分解為,邏輯的縱向抽象層次,以及邏輯的橫向模塊分解和集成。
2. 技術(shù)上。問(wèn)題域分解為,縱向的技術(shù)主題,以及橫向的技術(shù)職責(zé)的分解和集成。
A.領(lǐng)域化
傳統(tǒng)的架構(gòu)模式是三層或者四層模式,雖然從技術(shù)上有效的橫向分解系統(tǒng)結(jié)構(gòu),但對(duì)業(yè)務(wù)模型如何建立,如何進(jìn)行層次間傳遞,模型間關(guān)聯(lián)關(guān)系,以及與服務(wù)邏輯耦合等問(wèn)題沒(méi)有給出進(jìn)一步的細(xì)化,也帶來(lái)了很多問(wèn)題。
此外,在傳統(tǒng)設(shè)計(jì)方法下,分析模型和設(shè)計(jì)模型的轉(zhuǎn)換也是一個(gè)大的問(wèn)題。
B.組件化
實(shí)施組件化或者說(shuō)模塊化,其需求分為兩個(gè)層面。
1.內(nèi)部管理,可以幫助開(kāi)發(fā)過(guò)程中進(jìn)行業(yè)務(wù)切分,幫助控制進(jìn)度,降低風(fēng)險(xiǎn),以及財(cái)務(wù)分析;對(duì)于大型復(fù)雜的項(xiàng)目,也有利于知識(shí)的傳遞和積累。
2.銷售需要,All in one的系統(tǒng)因不符合發(fā)展趨勢(shì)而不利于銷售;組件化有助于產(chǎn)品銷售,可以針對(duì)客戶,將若干組件打包銷售,同時(shí)減少集成的風(fēng)險(xiǎn)。
C.產(chǎn)品化
C.1 定制化問(wèn)題
定制化問(wèn)題的由來(lái):1.面向行業(yè)的應(yīng)用通常沒(méi)有標(biāo)準(zhǔn),或者完備的標(biāo)準(zhǔn);2.通常產(chǎn)品的開(kāi)發(fā)是針對(duì)于通用或者公共需求,不針對(duì)于特定客戶;3.而一個(gè)確定的客戶,其自身的業(yè)務(wù)差異和管理差異導(dǎo)致需求的差異性。
這種現(xiàn)象尤其在缺乏標(biāo)準(zhǔn)的行業(yè)應(yīng)用中,以及系統(tǒng)的產(chǎn)品化過(guò)程中。
傳統(tǒng)的簡(jiǎn)單的解決方式是為每個(gè)客戶單獨(dú)維護(hù)一個(gè)系統(tǒng)分支,在此情況下提供維護(hù)和升級(jí),則維護(hù)成本巨大;因此如何解決領(lǐng)域的定制化就成為一個(gè)重大問(wèn)題。
C.2 升級(jí)問(wèn)題
領(lǐng)域需求每次進(jìn)一步的挖掘和實(shí)現(xiàn),都意味著領(lǐng)域的升級(jí)。但升級(jí)面臨的諸多問(wèn)題:數(shù)據(jù)遷移,舊版本的兼容問(wèn)題,依賴關(guān)聯(lián)等等,在組件化和定制化情況下,還面臨定制化兼容和沖突檢測(cè)。
C.3 國(guó)際化問(wèn)題
1.文本消息國(guó)際化
國(guó)際化消息沒(méi)有直接呈現(xiàn),而是中間存儲(chǔ)后呈現(xiàn);
2.布局國(guó)際化
阿拉伯人是從右到左;
3.業(yè)務(wù)時(shí)間,跨時(shí)區(qū);
4.計(jì)量單位,多幣種;
D.平臺(tái)化
應(yīng)用系統(tǒng)可以分為兩個(gè)內(nèi)容:應(yīng)用程序和基礎(chǔ)設(shè)施。應(yīng)用程序處理業(yè)務(wù)問(wèn)題,而基礎(chǔ)設(shè)施處理技術(shù)問(wèn)題。
來(lái)自客戶的要求是包含業(yè)務(wù)和技術(shù)兩個(gè)方面。其中技術(shù)上包括兩種“定型和定性”,其所需的知識(shí)和技能是不同于業(yè)務(wù)上的;
此外,內(nèi)部管理也提出相應(yīng)的要求。由于技術(shù)的發(fā)展和業(yè)務(wù)發(fā)展之間的不同步,對(duì)于一個(gè)產(chǎn)品而言,同時(shí)存在技術(shù)升級(jí)和業(yè)務(wù)升級(jí)兩個(gè)需求。而同時(shí)升級(jí)存在較大的成本和風(fēng)險(xiǎn)。
同時(shí)對(duì)于一個(gè)產(chǎn)品來(lái)說(shuō),技術(shù)方面需要較強(qiáng)的適應(yīng)性,能夠低成本上的適應(yīng)客戶的特別要求。
因此有效解藕技術(shù)和業(yè)務(wù)兩個(gè)部分成為必然。
3. 架構(gòu)的應(yīng)用問(wèn)題
A.事務(wù)管理
數(shù)據(jù)一致性問(wèn)題出現(xiàn)的原因通常是開(kāi)發(fā)過(guò)程中,由于錯(cuò)誤的并發(fā)和事務(wù)控制導(dǎo)致的;而在業(yè)務(wù)過(guò)程中也存在錯(cuò)誤的業(yè)務(wù)操作情況。
B.并發(fā)處理
不同的業(yè)務(wù)應(yīng)用存在不同的并發(fā)場(chǎng)景(并發(fā)度以及存在的業(yè)務(wù)依賴),因此業(yè)務(wù)上需要明確原則和方案;而不同平臺(tái)所支持的并發(fā)方式和能力也不相同,則采用一定框架支持有助于簡(jiǎn)化問(wèn)題。
C.集成能力
業(yè)務(wù)應(yīng)用所面臨的集成問(wèn)題不同,包括不同的集成環(huán)境:外部系統(tǒng),內(nèi)部系統(tǒng),遺留系統(tǒng)等;不同的集成模式:基于文件,基于數(shù)據(jù)庫(kù)表,基于消息等,導(dǎo)致所需的集成方法及其能力也不同。
4. 架構(gòu)的設(shè)計(jì)問(wèn)題
分析設(shè)計(jì)和開(kāi)發(fā)實(shí)現(xiàn)存在著一定的差異性:分析設(shè)計(jì)屬于知識(shí)級(jí),而開(kāi)發(fā)實(shí)現(xiàn)屬于操作級(jí)的。
分析設(shè)計(jì)是需求和實(shí)現(xiàn)的中間橋梁,因而設(shè)計(jì)必須解決系統(tǒng)邊界的合法性,內(nèi)部邏輯解藕的合理性和實(shí)現(xiàn)的可達(dá)性(設(shè)計(jì)的類方法為實(shí)現(xiàn)的30%-70%)。而開(kāi)發(fā)實(shí)現(xiàn)需不斷重構(gòu)代碼,采用約定和框架能力等技術(shù)手段解決開(kāi)發(fā)的實(shí)際問(wèn)題,解決程序級(jí)別的健壯性,可讀性,可維護(hù)性以及可測(cè)試性。
傳統(tǒng)的方式,分析設(shè)計(jì)存在于文檔中,而開(kāi)發(fā)實(shí)現(xiàn)存在于代碼中。兩者的割裂導(dǎo)致溝通的困難,也導(dǎo)致了開(kāi)發(fā)工程中具大的風(fēng)險(xiǎn)——分析設(shè)計(jì)和最終開(kāi)發(fā)實(shí)現(xiàn)的不一致性。
三、架構(gòu)的評(píng)價(jià)指標(biāo)
1. 財(cái)務(wù)角度
在傳統(tǒng)的財(cái)務(wù)核算機(jī)制中,系統(tǒng)或者產(chǎn)品的開(kāi)發(fā)通常屬于成本中心,對(duì)于IT企業(yè)來(lái)說(shuō),電腦設(shè)備,辦公室等屬于沉沒(méi)成本,而IT人員的工資屬于可變成本,是成本的核心部分,為了控制成本,就需要減少項(xiàng)目的開(kāi)發(fā)時(shí)間。
因此架構(gòu)一個(gè)重要的關(guān)注點(diǎn)在于控制開(kāi)發(fā)成本和維護(hù)成本,通常講維護(hù)成本是開(kāi)發(fā)成本的3倍。降低開(kāi)發(fā)成本核心,在于提高效率、提高適應(yīng)需求變化的能力。
2. 技術(shù)角度
技術(shù)角度評(píng)估架構(gòu)很難說(shuō)一個(gè)架構(gòu)行或者不行。技術(shù)角度需要給出的最大指標(biāo)是風(fēng)險(xiǎn)性。而風(fēng)險(xiǎn)性和各個(gè)指標(biāo)因數(shù)有很大相關(guān),但還需要結(jié)合相應(yīng)實(shí)際情況判斷。例如:如果決定了不可能換數(shù)據(jù)庫(kù),那么即便強(qiáng)綁定oracle也沒(méi)有特別的風(fēng)險(xiǎn)。
以下指標(biāo)參考了架構(gòu)的質(zhì)量特性,但進(jìn)行了裁減。
A.內(nèi)部指標(biāo)
1.侵入性。或者說(shuō)是可遷移性,即系統(tǒng)與外部資源的關(guān)聯(lián)關(guān)系,以及系統(tǒng)內(nèi)部的關(guān)聯(lián)關(guān)系。例如,如果架構(gòu)決定使用pl/sql,那么就意味著架構(gòu)和Oracle數(shù)據(jù)庫(kù)是強(qiáng)綁定。
2.重復(fù)性。雖然我們都知道關(guān)于重復(fù)的兩個(gè)原則(1.不要重復(fù),2.不要自己重復(fù)),但是有時(shí)重復(fù)看上去無(wú)法避免,那么就是判斷這個(gè)重復(fù)性帶來(lái)的問(wèn)題有多大。
3.擴(kuò)展性。即架構(gòu)提供何種條件下的何種擴(kuò)展和變化能力,及其成本。
4.平穩(wěn)性。在業(yè)務(wù)或技術(shù)擴(kuò)展時(shí)的,架構(gòu)所呈現(xiàn)的發(fā)展態(tài)性。
5.抽象性。即可視性,并包括了概念完整性。系統(tǒng)是否完整以及層次化的反映應(yīng)用問(wèn)題,能否明確的呈現(xiàn)和表達(dá)。
6.修改性。包括了可重構(gòu)性,代碼級(jí)別的侵入性以及單元測(cè)試能力。
7.診斷性。系統(tǒng)提供的實(shí)時(shí)觀測(cè)能力。
B.外部指標(biāo)
1.性能。
2.可靠度。
3.可用度。
3. 組織角度
組織角度涉及兩個(gè)方面:人和流程。
人的方面,架構(gòu)需要組織的角色參與(業(yè)務(wù)專家,技術(shù)專家)及其參與度,以及涉及到人力資源匹配情況。若架構(gòu)所需的技術(shù)如果太新或者太窄,將面臨人力資源的困境。
流程上,要看架構(gòu)是否與流程匹配。架構(gòu)原則指導(dǎo)下不同角色在不同階段關(guān)注點(diǎn)不同,而工程實(shí)踐中,不同流程階段需要提交的產(chǎn)出物也不同,此時(shí)就可能存在二者不匹配的情況。
四、架構(gòu)的原則和方法論
1. 原則
總原則是:關(guān)注點(diǎn)隔離。
在解決各類問(wèn)題都應(yīng)以此原則為指導(dǎo)。但針對(duì)于不同層面該原則的變化不同。針對(duì)于高層設(shè)計(jì)(概要設(shè)計(jì)):合理劃分邏輯邊界;針對(duì)于詳細(xì)設(shè)計(jì)層面是:任何改動(dòng)最多涉及一個(gè)接口和一個(gè)實(shí)現(xiàn)類(簡(jiǎn)單類職責(zé)的變體)。
2. 方法論
方法論有兩個(gè):自上而下,由內(nèi)而外。
其對(duì)應(yīng)的完整理論體系為:面向?qū)ο?面向方面,領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)以及測(cè)試驅(qū)動(dòng)設(shè)計(jì)。
3. 發(fā)展與演化
A.總結(jié)歸納型
這個(gè)方式最常見(jiàn)。程序員所需要面對(duì)的問(wèn)題是:在有限的時(shí)間、資源,面對(duì)有限的需求,在容錯(cuò)范圍內(nèi)的做出一定的產(chǎn)品。在這種有限條件下反復(fù)訓(xùn)練出來(lái)的決策機(jī)制,使得程序員對(duì)歸納法有著特殊的偏好。它對(duì)于程序員開(kāi)發(fā)的大部分工作都是行之有效的。
B. 技術(shù)思辨型
通過(guò)更廣泛的分析,獲取深刻的理解和普遍的關(guān)聯(lián),以創(chuàng)造新穎的技術(shù)。所謂大牛們正是如此。例如GC算法,例如AOP技術(shù)。
其對(duì)應(yīng)的完整理論體系為:面向?qū)ο?面向方面,領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)以及測(cè)試驅(qū)動(dòng)設(shè)計(jì)。