作者: Anders小明  


一、            
架構(gòu)是什么

通常關(guān)于架構(gòu)的第一個問題是架構(gòu)是什么,很自然也很正常,本文也不能免俗。然而關(guān)于這個問題卻沒有一致性答案,同時也要注意到不同應(yīng)用的架構(gòu)實質(zhì)上存在不同差異性。

(一) 架構(gòu)的定義

架構(gòu),雖然人們一直在討論它,甚至于每天都在同其工作,然而這個詞并沒有一個被業(yè)界廣泛認(rèn)可的定義。

大致而言,架構(gòu)的定義分為三類:

類別

定義

結(jié)構(gòu)論

牛津高階詞典: The design an structure of a computer system

韋氏大辭典: The way in which the parts of a computer are organized

IEEE: The fundamental organisation of a system embodied in its components, their relationships to each other, and to the environment,and the principle guiding its design and evolution

關(guān)鍵論

架構(gòu)是系統(tǒng)中最關(guān)鍵的20%,關(guān)注在系統(tǒng)非功能性需求

文化論

架構(gòu)是關(guān)于系統(tǒng)一些的決策

 

(二) 架構(gòu)的分類

架構(gòu)由于應(yīng)用的不同而存在不同。大體而言,我們可以將當(dāng)前的應(yīng)用分為如下四種:互聯(lián)網(wǎng)應(yīng)用、企業(yè)應(yīng)用、桌面/移動應(yīng)用和游戲。

需要一提的是,雖然幾種應(yīng)用的存在一定的模糊性,某種技術(shù)為多種應(yīng)用所共用,例如很多的企業(yè)應(yīng)用基于互聯(lián)網(wǎng)技術(shù)SaaS,以及移動設(shè)備的支持。但依然存在很大的不同。

 

特別的,對于企業(yè)架構(gòu),大體存在如下幾種流派:

1.       TOGAF, OpenGroup組織提出,圍繞業(yè)務(wù)、應(yīng)用、技術(shù)和數(shù)據(jù)四個方面描述架構(gòu);

2.       DoDAF/MoDAF,美國和英國國防部提出的架構(gòu)方案;

3.       Zachman Framework, 根據(jù)不同角色的5W1H來審視架構(gòu);

4.       4+1視圖,由Philippe Kruchten提出,并被RUP采納;

 

(三) 架構(gòu)的關(guān)鍵非功能指標(biāo)

通常來講,架構(gòu)所關(guān)注的非功能需求可以分為三個角度5個特性,如下:

角度

特性

說明

運營角度

伸縮性

主要為水平擴(kuò)展能力

可靠性

包括容錯性、可用性和安全性等;

開發(fā)角度

維護(hù)性

 

擴(kuò)展性

能否快速應(yīng)對業(yè)務(wù)的變化

應(yīng)用角度

易用性

對最終用戶是否友好

非功能性指標(biāo)當(dāng)然不止這些,如下是一些參考:

1.         ISO 9126提出的質(zhì)量特性:

        

2.         或者通過如下三個視圖來進(jìn)行:

                               i.        業(yè)務(wù)視角

Time To MarketCost and BenefitsProjected life timeTargeted MarketIntegration with Legacy SystemRoll back Schedule

                             ii.        最終用戶視角

PerformanceAvailabilityUsabilitySecurity

                            iii.        開發(fā)視角

MaintainabilityPortabilityReusabilityTestability

3.         也可以通過諸如:簡潔性、清晰和一致性等指標(biāo)。

 

不同類型的應(yīng)用關(guān)注點會有很大不同,例如:互聯(lián)網(wǎng)應(yīng)用由于面臨大量的最終用戶,會特別關(guān)注于伸縮性、可靠性和易用性,這并不是說互聯(lián)網(wǎng)應(yīng)用不關(guān)注維護(hù)性和擴(kuò)展性,只是會更加強(qiáng)調(diào)另外三個特性;而企業(yè)應(yīng)用由于關(guān)注于數(shù)據(jù)、流程以及業(yè)務(wù)的適應(yīng)性,會更多得強(qiáng)調(diào)維護(hù)性和擴(kuò)展性,而其他特性如易用性相對弱化(面對內(nèi)部用戶,強(qiáng)制使用),伸縮性(內(nèi)部用戶訪問量少,大部分情況下通過現(xiàn)有硬件即可支持)。同時,企業(yè)應(yīng)用對數(shù)據(jù)一致性和準(zhǔn)確性要求非常高,而互聯(lián)網(wǎng)應(yīng)用相對可以容忍一定的不一致性和錯誤。因此,一個企業(yè)應(yīng)用的架構(gòu)師可能無法設(shè)計互聯(lián)網(wǎng)應(yīng)用的架構(gòu)。

 

二、             架構(gòu)有什么

架構(gòu)有什么,通常會來一張或者一堆好看的圖畫。既然本篇不討論具體應(yīng)用,故而也拿不出啥圖了,也不想討論這些。因為不同的應(yīng)用存在的差異,非本文所能涵蓋。這里就想討論下形形色色架構(gòu)圖的背后的內(nèi)容,以及隸屬架構(gòu)但未在架構(gòu)圖表達(dá)的內(nèi)容。

 

《易經(jīng)·系辭》有云:“形而上者謂之道,形而下者謂之器”,將架構(gòu)分為“形而上”和“形而下”兩個部分,如下圖:

      

(一) 形而上

形而上體系中,除去前置內(nèi)容,分為文化和支撐兩大塊。

其中,文化部分里最重要的就是原則方法論,例如:關(guān)注點分離原則(SoC),面向?qū)ο蠓治鲈O(shè)計和領(lǐng)域驅(qū)動設(shè)計等等。在此之下,就是架構(gòu)模式算法,常見架構(gòu)模式為:結(jié)構(gòu)化(分層、管道流、黑板)、分布式(代理和管道流)、交互系統(tǒng)(MVCPAC)和適配系統(tǒng)(微內(nèi)核、元數(shù)據(jù))。當(dāng)然還有更低一層次的設(shè)計模式(創(chuàng)建、結(jié)構(gòu)和行為)。

(二) 形而下

形而下分為三個部分,運行時、工具和文檔。

其中,運行時的內(nèi)容按照重要性依次為:語言、平臺/中間件、框架、類庫和工具,具體在企業(yè)應(yīng)用中就是:Java/C#Windows/LinuxApplication Server/DatabaseSpring/Hibernate等等。

如果說運行時決定最終能力,則工具就事關(guān)效率。工具中最常見的是集成開發(fā)環(huán)境了,此外還有配置、部署和測試工具。

文檔部分是另一個重要的內(nèi)容,應(yīng)包括:視圖(從不同角色出發(fā),可以參考4+1),范例和各種指導(dǎo)參考文檔。

 

三、             架構(gòu)如何設(shè)計

如果把“形而下”當(dāng)成架構(gòu)設(shè)計的產(chǎn)出,那么架構(gòu)設(shè)計往前追溯,就有輸入和加工過程。

(一) 架構(gòu)的輸入

架構(gòu)的輸入包括三個部分:目標(biāo)、需求和相應(yīng)約束。其中:目標(biāo)是大方向內(nèi)容,需求關(guān)注在細(xì)節(jié),而約束對目標(biāo)的達(dá)成提供了限定。特別的,關(guān)注在非功能性指標(biāo)上。

(二) 架構(gòu)的設(shè)計過程

架構(gòu)的設(shè)計從需求分析開始,結(jié)合參考模型或者已有架構(gòu)體系,結(jié)合原則、方法論等等作料。其主要活動有:技術(shù)選型、腳手架/框架/平臺搭建等等。

       關(guān)于具體過程的描述,可見《如何定義和建立架構(gòu)》。

 

四、             架構(gòu)如何評估

架構(gòu)設(shè)計出后一個重要的工作是對架構(gòu)(形而下部分)進(jìn)行評估,進(jìn)行架構(gòu)評估的必要性在:使得架構(gòu)設(shè)計工作形成閉環(huán),確保當(dāng)前架構(gòu)是合適和正確的。

大體上,架構(gòu)評估有三種方法:

·           ATAM: Architecture Tradeoff Analysis Method

·           SAAM: Software Architecture Analysis Method

·           ARID: Active Reviews for Intermediate Designs

在進(jìn)行架構(gòu)評估工作時,首先要確定架構(gòu)評估的參與人,包括相應(yīng)的干系人和獨立的評估隊伍;然后是確定評估的時機(jī):早期(在架構(gòu)設(shè)計期間就參與評估)和晚期(傳動的,在架構(gòu)設(shè)計完成后)。

評估內(nèi)容包括如下:

1.         首先是要滿足其輸入:目標(biāo)、需求和約束;

2.         各項的非功能性指標(biāo);

 

五、             小結(jié)

以如下思維導(dǎo)圖作為本文的小結(jié):