架構(gòu)這個(gè)概念,,和計(jì)算機(jī)科學(xué)(包括近幾年才成為一級(jí)學(xué)科的軟件工程)的其他術(shù)語(yǔ)類似,都是從傳統(tǒng)學(xué)科借用來(lái)的,。這是因?yàn)橛?jì)算機(jī)科學(xué)太年輕,、發(fā)展太快,來(lái)不及形成自己特有的術(shù)語(yǔ)和名詞,。因此,,在學(xué)習(xí)和思考方法上,我常常推薦類比法,,嘗試用一些耳熟能詳?shù)氖挛锶ダ斫夂徒忉層?jì)算機(jī)科學(xué)領(lǐng)域的概念,,以求“老嫗?zāi)芏钡男Ч?/span>
關(guān)于架構(gòu)概念的學(xué)習(xí)和理解,我建議從2個(gè)方面入手:
架構(gòu)工作可能是隱式的 有明確的架構(gòu)師,可能會(huì)使架構(gòu)工作更加專業(yè)化,,可能對(duì)提高架構(gòu)的質(zhì)量有幫助,;但并不是只有架構(gòu)師才可以做架構(gòu)工作。 我們應(yīng)該把架構(gòu)師當(dāng)成一種角色,,而不僅僅是一個(gè)頭銜,、一個(gè)位子。也許有很多人的工作頭銜是架構(gòu)師,,但其實(shí)際工作和架構(gòu)關(guān)系不大,,也可能有些人沒(méi)有架構(gòu)師頭銜,,但其在實(shí)際工作中為架構(gòu)正在做貢獻(xiàn)。
圖中,,TOGAF把企業(yè)架構(gòu)分為4個(gè)部分:
其中,,一個(gè)重要的理念是業(yè)務(wù)架構(gòu)與應(yīng)用架構(gòu)的映射關(guān)系(依賴,、推理)。應(yīng)用架構(gòu)要基于業(yè)務(wù)架構(gòu)來(lái)考慮,,而不是憑空想象,。應(yīng)用是業(yè)務(wù)能力的提供者。 我們?cè)谶@里重點(diǎn)關(guān)注數(shù)據(jù),。 這里強(qiáng)調(diào)數(shù)據(jù),,是因?yàn)閿?shù)據(jù)是對(duì)客觀世界的反映,而我們的每一個(gè)應(yīng)用,,不過(guò)是客觀世界的一個(gè)視圖,。 數(shù)據(jù)是最基本的。數(shù)據(jù)可以被處理,、解釋而得到各種信息,,而信息又可以被挖掘出有用的知識(shí)。我們也可以從中理解當(dāng)今所謂DT的重要性,,以及大數(shù)據(jù)時(shí)代,,數(shù)據(jù)就像工業(yè)時(shí)代的石油一樣重要,。 架構(gòu)是客觀存在的,不管我們是否有意識(shí)地考慮它,。架構(gòu)不是孤立存在的,,它是在具體的上下文環(huán)境中,為達(dá)到明確的目標(biāo)而存在的,。架構(gòu)不是“屠龍術(shù)”,。 “規(guī)劃-架構(gòu)-設(shè)計(jì)”這三者是緊密聯(lián)系的,常常被混為一體,。為了理解這些概念的聯(lián)系和區(qū)別,,我們可以與市政規(guī)劃進(jìn)行類比。巴西利亞的建城史,、華盛頓的城市規(guī)劃,,其理念值得我們?cè)诳紤]架構(gòu)時(shí)借鑒。 1,、規(guī)劃與架構(gòu) 這里把規(guī)劃提取出來(lái),,而不是與架構(gòu)混為一談,是為了有助于理解思考與實(shí)踐的不同階段和步驟,,幫助思維更加清晰,。從軟件工程與建筑工程的類比,更容易地理解架構(gòu)和規(guī)劃,。另外,,“自頂向下,逐步細(xì)化”的結(jié)構(gòu)化思想也清晰可見(jiàn),。我們推崇面向?qū)ο蟮姆椒?,因?yàn)樗c客觀世界的實(shí)際情況更接近,同時(shí),,我們也要繼承和發(fā)揚(yáng)結(jié)構(gòu)化方法,。 2、架構(gòu)與設(shè)計(jì)
我們選擇什么的模式,一方面要跟上技術(shù)發(fā)展的趨勢(shì),,另一方面要知道目的是什么,。 如果規(guī)模不大,采用分布式部署意義不大。
下圖展示一種不嚴(yán)格的解耦方法:
對(duì)于企業(yè)應(yīng)用架構(gòu)向“微”服務(wù)演化,,解耦是基礎(chǔ)。為此,,在程序?qū)崿F(xiàn)時(shí),,“單一職責(zé)”原則需要尊循。即使不走服務(wù)化道路,,降低耦合度也是好的,。 是否可以假定:一般情況下,對(duì)于特定的語(yǔ)言環(huán)境,,比如:java和C#,,較少的代碼行很難實(shí)現(xiàn)多個(gè)業(yè)務(wù)功能?于是以子程序(函數(shù),,過(guò)程,,方法)代碼行數(shù)對(duì)工程師執(zhí)行“單一職責(zé)”原則進(jìn)行度量。 對(duì)于不同語(yǔ)言,,建議對(duì)開(kāi)發(fā)小組的代碼行進(jìn)行統(tǒng)計(jì),,經(jīng)過(guò)一段時(shí)間的積累得出合適的經(jīng)驗(yàn)值。一般地,,這個(gè)代碼行數(shù)的經(jīng)驗(yàn)值是和小組的能力相關(guān)的,。
這里提到了用戶的真實(shí)需求,我也多說(shuō)幾句,。用戶的需求不應(yīng)該是我們作為BSA或者SME假設(shè)出來(lái)的,,而是我們通過(guò)各種有效的方法,比如訪談,,從用戶那里捕獲的。即使我們對(duì)用戶的建議是正確的,幫助用戶完善需求的,,也一定要取得用戶的完全理解并由用戶正式確認(rèn),。
其他協(xié)議,,也可以擔(dān)此大任。只是從復(fù)雜性,、使用難易程度,、普遍性等方面要多加考慮。比如傳統(tǒng)的web services,,其SOAP協(xié)議除了可以基于HTTP,,還可以基于 SMTP。
微服務(wù)所倡導(dǎo)的“單一職責(zé)”,,其實(shí)質(zhì)也是明確責(zé)任,,消除歧義。簡(jiǎn)單即美,,大道至簡(jiǎn),。單一職責(zé)恰恰符合這個(gè)原則。 從圖中這個(gè)對(duì)制造別針的分工的描述,,你會(huì)體會(huì)到并發(fā)現(xiàn),,很多基本道理是相通的,不論對(duì)于生產(chǎn)制造還是軟件開(kāi)發(fā),。這就是道法自然,。
缺少規(guī)劃則難于演化 單靠演化,即使能使架構(gòu)越來(lái)越優(yōu)化,,也可能需要很長(zhǎng)的周期,,而對(duì)于產(chǎn)品或者項(xiàng)目,時(shí)間這個(gè)約束條件往往是苛刻的,。 如前面所闡述,,迭代是有條件的。我的建議是:在有規(guī)劃的基礎(chǔ)上進(jìn)行演化,。我們無(wú)法得到普適的架構(gòu),,但可以得到確定領(lǐng)域的通用架構(gòu),可以在特定領(lǐng)域通過(guò)演化使應(yīng)用架構(gòu)逐步優(yōu)化,,逐步與業(yè)務(wù)架構(gòu)相適應(yīng),,提高匹配度。
針對(duì)靈活性差,,我們提出要降低耦合度,,這也是軟件工程中的一個(gè)基本原則。這樣的問(wèn)題,,反映出我們的軟件設(shè)計(jì),、開(kāi)發(fā)水平不高的現(xiàn)實(shí),專業(yè)性差,。很多時(shí)候,,很多開(kāi)發(fā)人員還分不清程序和軟件的區(qū)別,還只停留在功能實(shí)現(xiàn)的低水平上,。這不單是靠架構(gòu)優(yōu)化能解決的,,而是要靠提高整體開(kāi)發(fā)水平來(lái)解決。 針對(duì)交付時(shí)間長(zhǎng),,我們考慮從提高重用和構(gòu)件化等方面著手,,不斷積累企業(yè)應(yīng)用構(gòu)件庫(kù),。這好比我們燒磚建房,我們從實(shí)際需求出發(fā),,逐步建立并不斷更新有限的磚塊規(guī)格集合,,未來(lái)所有的房屋都使用標(biāo)準(zhǔn)件來(lái)搭建,。 針對(duì)性能問(wèn)題,,我們?cè)跇?gòu)件化的基礎(chǔ)上逐步地適度地服務(wù)化,這樣講是因?yàn)槲覀冋J(rèn)為,,不是所有的應(yīng)用系統(tǒng)都適合服務(wù)化,。有了這樣的基礎(chǔ),我們對(duì)系統(tǒng)的擴(kuò)展,,包括水平和垂直,,都會(huì)變得容易,分布式的部署水到渠成,。 通過(guò)前面的痛點(diǎn)及解決方案的分析,,我們總結(jié)了好的企業(yè)應(yīng)用架構(gòu)的三要素,同時(shí)也作為我們的三步走戰(zhàn)略:
服務(wù)化是和多進(jìn)程/多線程相關(guān)的,,是減小應(yīng)用部署粒度的過(guò)程,。而分布式部署,其基礎(chǔ)是進(jìn)程/線程間的通信,。要理解RPC,,最好首先理解IPC,這個(gè)前面已有論述,。 這是我們針對(duì)企業(yè)應(yīng)用系統(tǒng)服務(wù)化而開(kāi)發(fā)的模型,,考慮了多種邏輯和物理架構(gòu)。結(jié)合企業(yè)應(yīng)用,,基于多層分布式體系結(jié)構(gòu)而進(jìn)行的實(shí)例化,。我們希望該模型能夠覆蓋企業(yè)的全部應(yīng)用,包括基于package的二次開(kāi)發(fā)系統(tǒng)(如SAP,,Oracle),,基于SaaS的云應(yīng)用(如SFDC),以及基于Java/.Net自開(kāi)發(fā)的一些應(yīng)用,。我們正在實(shí)踐中逐步完善這個(gè)模型,,希望能為企業(yè)架構(gòu)的優(yōu)化助力。 |
|
來(lái)自: 過(guò)河卒沖 > 《技術(shù)架構(gòu)》