<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    瘋狂

    STANDING ON THE SHOULDERS OF GIANTS
    posts - 481, comments - 486, trackbacks - 0, articles - 1
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    如何定義和建立架構(gòu)

    Posted on 2010-10-31 23:04 瘋狂 閱讀(222) 評(píng)論(0)  編輯  收藏

    在牛津高階詞典(第7版)中,架構(gòu)(architecture)一詞的解釋是:the design an structure of a computer system。這個(gè)解釋實(shí)際上已經(jīng)描述了架構(gòu)的本質(zhì):架構(gòu)是關(guān)于怎么做(構(gòu)成系統(tǒng))的,而非做什么的。更進(jìn)一步,架構(gòu)是由人來(lái)設(shè)計(jì)實(shí)施,因此架構(gòu)實(shí)際上是一個(gè)文化(culture)——我們?cè)趺凑J(rèn)識(shí)或理解系統(tǒng)/產(chǎn)品的,并且我們準(zhǔn)備怎么做,在做的過(guò)程中我們認(rèn)為什么是好的,什么是好的等等。

    任何系統(tǒng)都有架構(gòu),無(wú)論多小的系統(tǒng)都有。區(qū)別在于其架構(gòu)是否是經(jīng)過(guò)明確設(shè)計(jì)并表達(dá)。一個(gè)合理的架構(gòu)無(wú)疑是經(jīng)過(guò)精心設(shè)計(jì)和維護(hù)的,而進(jìn)行架構(gòu)設(shè)計(jì),或者說(shuō)定義/建立一個(gè)架構(gòu)可以分為如下幾個(gè)步驟。 

    特別的,本文針對(duì)于企業(yè)應(yīng)用架構(gòu),其他應(yīng)用未必適用。

    基線準(zhǔn)備

    如果建立第一版架構(gòu)(即從零開始)可以跳過(guò)此步,但對(duì)于建立第n版(n>=2)架構(gòu),則需要進(jìn)行基線準(zhǔn)備。通常從上一個(gè)架構(gòu)設(shè)計(jì)開始,去除不在必要的內(nèi)容作為基線。

     

    非功能性需求的收集、分析和細(xì)化

    這步驟非常關(guān)鍵,本質(zhì)上架構(gòu)關(guān)注的是系統(tǒng)的非功能性需求,雖然不是系統(tǒng)的全部,但無(wú)疑是最重要的20%,而這也是不同公司/產(chǎn)品的架構(gòu)差異性的根源。

    一個(gè)完整的非功能性需求列表不僅僅來(lái)自業(yè)務(wù)部門(系統(tǒng)客戶),還需要包括開發(fā)/研發(fā)管理層以及開發(fā)團(tuán)隊(duì)。實(shí)踐中可以如下檢查列表來(lái)幫助收集:

    l         目標(biāo)應(yīng)用,企業(yè)應(yīng)用和互聯(lián)網(wǎng)應(yīng)用就不太相同

    l         目標(biāo)環(huán)境,系統(tǒng)部署的硬件環(huán)境、網(wǎng)絡(luò)環(huán)境等,更有云計(jì)算環(huán)境和傳統(tǒng)服務(wù)器環(huán)境的差異。

    l         常見技術(shù)指標(biāo)

    n         穩(wěn)定性/可用性,主要是MTBFMTBR指標(biāo)要求

    n         性能,如Web應(yīng)用下單次操作1/5/10原則,相關(guān)并發(fā)壓力要求等

    n         容量,主要是數(shù)據(jù)容量,此外有時(shí)還要考慮內(nèi)存的限制

    n         實(shí)時(shí)性,涉及到數(shù)據(jù)同步/復(fù)制/消息傳播/異步操作

    n         易用性,這個(gè)指標(biāo)不容易衡量

    l         系統(tǒng)/項(xiàng)目/產(chǎn)品自身,來(lái)自客戶

    l         管理指標(biāo),主要來(lái)自管理層

    n         成熟度/培訓(xùn)招聘成本

    n         產(chǎn)品化/定制化

    n         組件化

    n         領(lǐng)域化

    n         標(biāo)準(zhǔn)性

    n         平臺(tái)化/小型中間件

    n         集成性/兼容/遷移能力

    涉及遺留系統(tǒng),關(guān)于兼容需要明確的兼容方式和兼容模式。兼容方式包括:語(yǔ)義兼容/源代碼(語(yǔ)言級(jí)/API級(jí))兼容/運(yùn)行時(shí)兼容(運(yùn)行庫(kù)/二進(jìn)制);兼容模式:向前兼容/向后兼容。

    n         1.4.6 容錯(cuò)性

    包括速錯(cuò)能力和消除易錯(cuò)機(jī)制(error-prone mechanism

    n         1.4.7 升級(jí)性

    以上列表略顯草根性,實(shí)際過(guò)程中也可以從架構(gòu)評(píng)估角度反向進(jìn)行非功能性需求收集,可以參考《Attribute Based Architectural Evaluation》。

    一次性完整地收集非功能性需求并不是件容易的事,因此在架構(gòu)發(fā)布后也要不停的進(jìn)行改進(jìn)。

     

    架構(gòu)定義

    完成非功能性需求并明確后,就可以進(jìn)行架構(gòu)定義了。架構(gòu)定義可以分為三個(gè)部分:設(shè)計(jì)、選型以及構(gòu)建和評(píng)估。

     

    架構(gòu)設(shè)計(jì)

    這個(gè)階段相對(duì)務(wù)虛,但卻是整個(gè)架構(gòu)定義的基礎(chǔ),決定了所有的后續(xù)工作。主要包括如下三個(gè)工作內(nèi)容:

    l         確定架構(gòu)手段,包括架構(gòu)的原則、規(guī)范、模式、工具、框架/平臺(tái)和語(yǔ)言,以及這些手段的適用范圍,哪些問(wèn)題應(yīng)用工具來(lái)解決,而另一些問(wèn)題采用哪個(gè)框架/平臺(tái)完成,還有一些通過(guò)原則或規(guī)范處理。

    l         確定組織分工和流程,不同的工作通過(guò)組織內(nèi)不同角色完成。

    l         確定結(jié)構(gòu)化范圍,區(qū)分系統(tǒng)內(nèi)和系統(tǒng)外,并非所有非功能性需求都是通過(guò)系統(tǒng)的手段解決,適當(dāng)采用系統(tǒng)外手段甚至更簡(jiǎn)單和準(zhǔn)確。

     

    技術(shù)選型/預(yù)研

    紙面上的架構(gòu)其約束性和可操作性非常低,為了讓架構(gòu)從三萬(wàn)英尺的高空落地有兩種辦法:流程和平臺(tái)。其中,流程是由組件分工完成,而平臺(tái)構(gòu)建通常不會(huì)從零開始,實(shí)踐中會(huì)盡可能利用已有成果:商業(yè)產(chǎn)品和開源產(chǎn)品。因此技術(shù)選型以及預(yù)研工作則顯得非常重要。

    進(jìn)行技術(shù)選型需要注意兩個(gè)關(guān)鍵點(diǎn):

    u       評(píng)估單項(xiàng)技術(shù)的有用性(技術(shù)功能)和可用性(非功能性需求,即使用成本)

    有用性是指相應(yīng)的技術(shù)功能點(diǎn)是否解決架構(gòu)所面臨的功能性和非功能性需求;

    可用性是指是否滿足整體的非功能性需求,如性能、容量和穩(wěn)定性。以及管理層關(guān)注指標(biāo)(使用成本),如技術(shù)成熟度、標(biāo)準(zhǔn)性、培訓(xùn)招聘成本以及產(chǎn)品的生命周期,以及License費(fèi)用等。

    u       保持全局視角

    關(guān)注全局,木桶理論的再次應(yīng)用,避免某項(xiàng)技術(shù)存在的缺陷影響整體。

    主要的選型內(nèi)容如下:

    l         語(yǔ)言,不同語(yǔ)言所能提供的開發(fā)能力是不同。而且開發(fā)語(yǔ)言直接影響到后續(xù)技術(shù)的選型以及人員的招聘。

    l         框架/平臺(tái),提供運(yùn)行環(huán)境和集成環(huán)境。

    l         工具,古話說(shuō):磨刀不誤砍柴工。但要注意避免工具中心論,正確認(rèn)識(shí)工具的用于——工具是幫助我們解決一些臟活累活的,除此外無(wú)它。在整個(gè)架構(gòu)中,工具的作用是大大低于語(yǔ)言和框架/平臺(tái)。

    除去技術(shù)選型外,對(duì)于一些不確定的內(nèi)容,還需開展預(yù)研工作,驗(yàn)證其可行性或者進(jìn)行性能測(cè)試。

     

    架構(gòu)構(gòu)建和評(píng)估

    如前所述為了使架構(gòu)落地,在技術(shù)選型后完成后進(jìn)行架構(gòu)構(gòu)建,包括了定制化設(shè)計(jì)和開發(fā),并進(jìn)行質(zhì)量保證。

    架構(gòu)構(gòu)建的結(jié)果通常分為三個(gè)層次:

    l         集成環(huán)境,提供一個(gè)開發(fā)的腳手架,這個(gè)是最低層次。

    l         編程模型,提供一個(gè)統(tǒng)一的編程模型,包含了自定義框架和類庫(kù),并對(duì)底層技術(shù)提供了一定封裝和隱藏。當(dāng)前的趨勢(shì)是:提供一個(gè)POJO一致性的編程模型。

    l         運(yùn)行平臺(tái),提供了一個(gè)運(yùn)行平臺(tái),(勉強(qiáng))可以算做一個(gè)中間件產(chǎn)品。

     

    架構(gòu)構(gòu)建過(guò)程中應(yīng)注意如下內(nèi)容:

    l         應(yīng)用區(qū)分平臺(tái)系統(tǒng)和應(yīng)用開發(fā)接口

    應(yīng)用開發(fā)接口是給后續(xù)產(chǎn)品開發(fā)使用,接口一旦設(shè)計(jì)發(fā)布應(yīng)當(dāng)保持問(wèn)題性和兼容性;而平臺(tái)系統(tǒng)對(duì)后續(xù)系統(tǒng)開發(fā)不可見,避免兼容設(shè)計(jì)成本,有利后續(xù)升級(jí)和變化。

    l         簡(jiǎn)單的API,強(qiáng)大的功能,類似于高級(jí)語(yǔ)言

    l         可以擴(kuò)展的SPI,另一種形式的API

    l         消除易錯(cuò)機(jī)制(error-prone mechanism),避免當(dāng)錯(cuò)誤使用后的修正成本太高

    l         適應(yīng)變化和二八原則,避免在需求變化時(shí)后調(diào)整的成本過(guò)高

    l         隔離具體技術(shù),保持未來(lái)的遷移性和可升級(jí)性

    l         提供調(diào)用接口和模型應(yīng)具備一定抽象性

    l         分離關(guān)注點(diǎn),縱向的層次化抽象,以及橫向的模塊與切面

    l         提供申明式定義(如XML),由反向解析映射到具體技術(shù),關(guān)注于做什么而非怎么做。

     

    架構(gòu)完成構(gòu)建后,進(jìn)入架構(gòu)評(píng)估。

    架構(gòu)評(píng)估是確保架構(gòu)有效性的重要步驟,需要針對(duì)所收集到的非功能性需求——工作上形成一個(gè)閉環(huán),確保工作的有效性——因?yàn)榧軜?gòu)涉及系統(tǒng)中最重要的20%,應(yīng)該盡早驗(yàn)證,而不是簡(jiǎn)單地希望一切都好。

    架構(gòu)評(píng)估包括兩個(gè)工作:進(jìn)行驗(yàn)證和協(xié)助。

    可以根據(jù)非功能性需求列表來(lái)制定驗(yàn)證點(diǎn),這里列舉下主要的驗(yàn)證點(diǎn):

    l         技術(shù)點(diǎn)驗(yàn)證

    l         性能壓力驗(yàn)證

    l         穩(wěn)定性驗(yàn)證

    更正規(guī)的評(píng)估方法可以參考《Attribute Based Architectural Evaluation》。

     

    協(xié)助是架構(gòu)評(píng)估的另一項(xiàng)工作。架構(gòu)不是幾個(gè)人關(guān)在一個(gè)房間里整出來(lái)的與世隔絕的東西。需要項(xiàng)目/系統(tǒng)/產(chǎn)品的等相關(guān)利益者理解它。這項(xiàng)工作不應(yīng)是發(fā)布幾份文檔宣稱架構(gòu)如此如此(見后續(xù)《架構(gòu)發(fā)布》),它應(yīng)當(dāng)在架構(gòu)評(píng)估時(shí)進(jìn)行(雖然可以在架構(gòu)構(gòu)建時(shí)進(jìn)行,但是由于此時(shí)架構(gòu)并未成形,此時(shí)的效果有限)。

     

     

    架構(gòu)發(fā)布

    當(dāng)架構(gòu)構(gòu)建完成并通過(guò)評(píng)估,架構(gòu)就可以正式發(fā)布了。

    框架/平臺(tái)和工具

    毫無(wú)疑問(wèn),框架/平臺(tái)和工具是架構(gòu)發(fā)布主要內(nèi)容之一。

    文檔

    除去框架框架/平臺(tái)和工具,還有其他重要的內(nèi)容需要發(fā)布,文檔無(wú)疑必須的。但文檔也存在尷尬的情況,已知的工程實(shí)踐中已經(jīng)發(fā)布了太多無(wú)用的文檔、過(guò)期的文檔。

    應(yīng)努力保證所發(fā)布文檔的必要性和有效性,建議文檔如下:

    l         架構(gòu)介紹,可以參考RUP4+1視圖,部署視圖、運(yùn)行視圖、開發(fā)視圖等

    l         快速入門

    l         開發(fā)指南

    l         服務(wù)配置和使用介紹

    示例代碼

    完整可用的代碼,運(yùn)行腳本、注釋。完整豐富的示例代碼在很多時(shí)候比文檔更直接,尤其在展示細(xì)節(jié)問(wèn)題上。

    培訓(xùn)和指導(dǎo)

    很多時(shí)候,培訓(xùn)和指導(dǎo)被忽略了。相對(duì)于文檔和示例代碼,培訓(xùn)和指導(dǎo)更有互動(dòng)性,可以更深入討論,并可以深入到架構(gòu)設(shè)計(jì)背后的故事。

     

    架構(gòu)改進(jìn)

    如前所述,通常無(wú)法一次收集完整地非功能性需求;而隨著時(shí)間發(fā)展,更新更細(xì)節(jié)的非功能性需求會(huì)不斷的涌現(xiàn)和被發(fā)現(xiàn);還有一部分之前已識(shí)別但被暫時(shí)擱置的非功能性需求開始變得重要。因此架構(gòu)需要不斷發(fā)展,而此時(shí)的改進(jìn)通常是以小步快跑的方式進(jìn)行。

     

    下一個(gè)周期

    不能期望10年前的架構(gòu)能夠滿足今天的需求(它可能依然可以工作)。架構(gòu)發(fā)布后到一定階段,已經(jīng)無(wú)法通過(guò)小的改進(jìn)滿足新的要求,重新進(jìn)行架構(gòu)設(shè)計(jì)成為一個(gè)必然。而當(dāng)前的架構(gòu)設(shè)計(jì)可以轉(zhuǎn)為下一次設(shè)計(jì)的基線。

     

     

    常見的問(wèn)題

    l         試圖創(chuàng)建一個(gè)私有的編程模型標(biāo)準(zhǔn)

    很少有人這么干,不過(guò)有時(shí)還遇到這樣的做法。通常在封裝一些商業(yè)或開源產(chǎn)品,美名其曰——隔離實(shí)現(xiàn),這是一個(gè)危險(xiǎn)的做法,其實(shí)質(zhì)是創(chuàng)建一個(gè)私有編程模型標(biāo)準(zhǔn),如果業(yè)界沒有紙上標(biāo)準(zhǔn)或?qū)嶋H標(biāo)準(zhǔn),基于某個(gè)產(chǎn)品實(shí)現(xiàn)所建立的私有標(biāo)準(zhǔn)無(wú)法真正的遷移到別的產(chǎn)品實(shí)現(xiàn);如果有,那就根本不需要建立私有標(biāo)準(zhǔn)。

    另有一種封裝,其目的是為了簡(jiǎn)化商業(yè)或開源產(chǎn)品,這種封裝不打算屏蔽底層的實(shí)現(xiàn)——它只是讓工作更簡(jiǎn)單。

    如果一定要?jiǎng)?chuàng)建一個(gè)編程模型的話,應(yīng)該是POJO

    l         不那么正確的二八原理

    二八原理通常很有效,然而它有缺陷——他是基于統(tǒng)計(jì)的,這意味著是事后應(yīng)對(duì)。如果沒有已有實(shí)踐經(jīng)驗(yàn),那么在一開始很難做出正確判斷。

    而一旦做出錯(cuò)誤的決策導(dǎo)致的問(wèn)題,很可能出現(xiàn)“玻璃裂紋”現(xiàn)象——不斷的擴(kuò)散并破壞架構(gòu)設(shè)計(jì)——直到玻璃碎掉。

    更槽糕的是,很多時(shí)候所謂的二八劃分,基于的是感覺而非統(tǒng)計(jì)。

    l         過(guò)分關(guān)注在技術(shù)模型上

    雖然架構(gòu)針對(duì)的非功能性需求,關(guān)注在技術(shù)模型沒有問(wèn)題,但是實(shí)際上更應(yīng)關(guān)注的是信息模型。而在多數(shù)情況下,信息模型是以層的形式來(lái)表示。

    這里面最典型的是所謂的N層(n-tier)模型,實(shí)際上,N層(n-tier)模型就是一個(gè)技術(shù)模型,描述的一個(gè)分布式系統(tǒng)結(jié)構(gòu)。

    而真正的N層(n-layer)設(shè)計(jì)卻被忽視,分層Layer模式才是一個(gè)架構(gòu)模式(見POSA vol1),ISO-7層網(wǎng)絡(luò)協(xié)議是一個(gè)典型示例。
     轉(zhuǎn)載自:
    http://m.tkk7.com/AndersLin/archive/2010/10/31/336599.html


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 中国内地毛片免费高清| 国产午夜亚洲精品午夜鲁丝片| 精品无码国产污污污免费网站| 成在线人视频免费视频| 久久精品免费网站网| 国产免费久久精品99久久| 中文字幕的电影免费网站| 免费视频成人手机在线观看网址| 日本一道本不卡免费 | 亚洲毛片在线观看| 久久亚洲AV成人无码| 亚洲美女视频一区| 亚洲人成网站在线观看播放动漫| 亚洲三级在线视频| 亚洲人成未满十八禁网站| 精品久久久久亚洲| 五月婷婷免费视频| 中文无码成人免费视频在线观看| 久久久久久成人毛片免费看| 97在线观看永久免费视频| 在线观看人成视频免费| 国产亚洲精品免费| 国产成人综合亚洲亚洲国产第一页 | 成年大片免费高清在线看黄| 福利免费在线观看| 57pao一国产成视频永久免费| 福利免费观看午夜体检区| 日日AV拍夜夜添久久免费| 亚洲综合精品香蕉久久网| 久久精品国产亚洲77777| 亚洲欧美日韩中文无线码| 免费国产a理论片| 国产免费无码AV片在线观看不卡| 免费在线观看视频网站| 国产高清在线精品免费软件| 伊人久久大香线蕉亚洲五月天 | 亚洲中文字幕久久精品无码喷水| 亚洲AV成人一区二区三区AV| 亚洲AV成人影视在线观看| 国产日韩精品无码区免费专区国产| 2019中文字幕免费电影在线播放|