国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
如何定義和建立架構(gòu)

在牛津高階詞典(第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)用未必適用。

基線(xiàn)準(zhǔn)備

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

 

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

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

一個(gè)完整的非功能性需求列表不僅僅來(lái)自業(yè)務(wù)部門(mén)(系統(tǒng)客戶(hù)),還需要包括開(kāi)發(fā)/研發(fā)管理層以及開(kāi)發(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         常見(jiàn)技術(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)自客戶(hù)

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ì)從零開(kāi)始,實(shí)踐中會(huì)盡可能利用已有成果:商業(yè)產(chǎn)品和開(kāi)源產(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)所面臨的功能性和非功能性需求;

可用性是指是否滿(mǎn)足整體的非功能性需求,如性能、容量和穩(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ǔ)言所能提供的開(kāi)發(fā)能力是不同。而且開(kāi)發(fā)語(yǔ)言直接影響到后續(xù)技術(shù)的選型以及人員的招聘。

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

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

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

 

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

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

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

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

l         編程模型,提供一個(gè)統(tǒng)一的編程模型,包含了自定義框架和類(lèi)庫(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)用開(kāi)發(fā)接口

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

l         簡(jiǎn)單的API,強(qiáng)大的功能,類(lèi)似于高級(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ā)布幾份文檔宣稱(chēng)架構(gòu)如此如此(見(jiàn)后續(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)行視圖、開(kāi)發(fā)視圖等

l         快速入門(mén)

l         開(kāi)發(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í)擱置的非功能性需求開(kāi)始變得重要。因此架構(gòu)需要不斷發(fā)展,而此時(shí)的改進(jìn)通常是以小步快跑的方式進(jìn)行。

 

下一個(gè)周期

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

 

 

常見(jiàn)的問(wèn)題

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

很少有人這么干,不過(guò)有 時(shí)還遇到這樣的做法。通常在封裝一些商業(yè)或開(kāi)源產(chǎn)品,美名其曰——隔離實(shí)現(xiàn),這是一個(gè)危險(xiǎn)的做法,其實(shí)質(zhì)是創(chuàng)建一個(gè)私有編程模型標(biāo)準(zhǔn),如果業(yè)界沒(méi)有紙上標(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è)或開(kāi)源產(chǎn)品,這種封裝不打算屏蔽底層的實(shí)現(xiàn)——它只是讓工作更簡(jiǎn)單。

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

l         不那么正確的二八原理

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

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

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

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

雖然架構(gòu)針對(duì)的非功能性需求,關(guān)注在技術(shù)模型沒(méi)有問(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)模式(見(jiàn)POSA vol1),ISO-7層網(wǎng)絡(luò)協(xié)議是一個(gè)典型示例。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
向架構(gòu)師進(jìn)軍
Python+PyQt架構(gòu):Model/View結(jié)構(gòu)之QStringListModel編程示例
flask admin-簡(jiǎn)單且可擴(kuò)展的Flask管理界面框架
關(guān)于架構(gòu)的思考
系統(tǒng)設(shè)計(jì) | 如何表達(dá)技術(shù)架構(gòu)?(規(guī)劃篇)
Python 四大主流 Web 編程框架
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服