福田公司簡介網(wǎng)站seo排名培訓(xùn)
最近牽頭在梳理部門的系統(tǒng)架構(gòu)合理性,開始工作之前,我首先想到的是如何定義架構(gòu)合理性?
從研發(fā)的角度來看如果系統(tǒng)上下文清晰、應(yīng)用架構(gòu)設(shè)計(jì)簡單、應(yīng)用拆分合理應(yīng)該稱之為架構(gòu)合理。
基于以上的定義可以從以下三個(gè)方面來梳理評估:
1、系統(tǒng)的上下文清晰:明確的知道和周圍系統(tǒng)的調(diào)用關(guān)系,數(shù)據(jù)同步機(jī)制;
2、應(yīng)用架構(gòu)設(shè)計(jì)簡單:架構(gòu)分層合理,功能定位清晰,不會出現(xiàn)功能邊界之外事情;
3、應(yīng)用拆分合理:系統(tǒng)內(nèi)的應(yīng)用粒度在一個(gè)合理的范圍內(nèi);應(yīng)用間調(diào)用鏈路不應(yīng)過長。
系統(tǒng)的上下文清晰
系統(tǒng)上下文圖一詞最早是從Simon Brown的C4模型中借用而來的,該模型”通過在不同的抽象層次重新定義方框和虛線來抽象表達(dá)架構(gòu)的含義“。
C4模型把系統(tǒng)分為四層,每層都代表著不同的視圖架構(gòu),關(guān)注點(diǎn)不同。第一層,講的系統(tǒng)上下文,系統(tǒng)高層次的抽象。
如下圖顯示個(gè)人銀行賬號在瀏覽賬戶過程中發(fā)生不同的系統(tǒng)之間交互。 如果把Internet Banking Sysytem 當(dāng)成我們的目標(biāo)系統(tǒng),那么E-mail System、MarinFrame Banking Sytem 就是它的伴生系統(tǒng),也可以稱為外部系統(tǒng),它給Internet Banking Sysytem 提供系統(tǒng)價(jià)值,屬于系統(tǒng)外,是黑盒。
系統(tǒng)上下文明確了目標(biāo)系統(tǒng)和外部系統(tǒng)的關(guān)系,它和外部系統(tǒng)一起給目標(biāo)用戶提供價(jià)值。繪制系統(tǒng)上下文的時(shí)候,需要注意目標(biāo)系統(tǒng)和外部系統(tǒng)之間的依賴方向。北向依賴意味著外部系統(tǒng)調(diào)用目標(biāo)系統(tǒng)的服務(wù),需要考慮目標(biāo)系統(tǒng)定義了什么樣的服務(wù)契約;南向依賴意味著目標(biāo)系統(tǒng)調(diào)用了外部系統(tǒng)的的服務(wù),需要了解外部系統(tǒng)的接口、調(diào)用方式,通信機(jī)制,甚至當(dāng)外部系統(tǒng)出現(xiàn)故障時(shí),目標(biāo)系統(tǒng)該如何處理。
除了參考以上的畫法,也可以用業(yè)務(wù)序列圖表示。它脫胎與UML的序列圖。序列圖可以從左側(cè)的角色開始,體現(xiàn)消息傳遞的次序。這隱含這一種驅(qū)動力:我們從左側(cè)的參與對象開始,尋找與之協(xié)作的執(zhí)行步驟,然后層層傳進(jìn)地推導(dǎo)出整個(gè)完整的協(xié)作流程。
企業(yè)序列圖,代表了企業(yè)級系統(tǒng)的抽象,目標(biāo)系統(tǒng)和外部系統(tǒng)之間的協(xié)作關(guān)系,參與的系統(tǒng)是一個(gè)完整的整體,所以不需要也不應(yīng)該參與系統(tǒng)的內(nèi)部實(shí)現(xiàn)的細(xì)節(jié),消息的方向更多的代表系統(tǒng)的責(zé)任。業(yè)務(wù)序列圖如下所示:
應(yīng)用架構(gòu)設(shè)計(jì)簡單
應(yīng)用本身是有架構(gòu)分層的,Martin Fowler 在《企業(yè)應(yīng)用架構(gòu)模式》 提出合理的系統(tǒng)分層應(yīng)該包括表現(xiàn)層,領(lǐng)域邏輯層,數(shù)據(jù)源層。 表現(xiàn)層主要提供服務(wù),處理用戶請求。領(lǐng)域?qū)邮翘幚磉壿?#xff0c;是系統(tǒng)的核心。數(shù)據(jù)源層與數(shù)據(jù)層、消息系統(tǒng),與其他軟件包通信。
后續(xù)發(fā)展的領(lǐng)域驅(qū)動架構(gòu)設(shè)計(jì),演變成四層,在表現(xiàn)層下加入了應(yīng)用層,同時(shí)把數(shù)據(jù)源層改為基礎(chǔ)設(shè)施層,突破了數(shù)據(jù)庫管理系統(tǒng)的限制。
基于以上的系統(tǒng)分層,無論你是采用的三層架構(gòu)還是四層架構(gòu),應(yīng)用代表著功能邊界,提供那些核心的能力,能做那些事情,那些事情不能做。
一個(gè)好的實(shí)踐經(jīng)驗(yàn)是參考領(lǐng)域驅(qū)動設(shè)計(jì)的業(yè)務(wù)域的方法論,梳理好系統(tǒng)的一二三級域,最多不超過四級,做好各級域的定義。好的域的定義代表著系統(tǒng)能力的邊界,讓你明白那些事情能做,那些事情不能做。
基于以上梳理好的系統(tǒng)業(yè)務(wù)域的定義和能力邊界,我們在梳理的時(shí)候通常會兩類系統(tǒng),第一類是現(xiàn)有存量的系統(tǒng)且需求迭代相對頻繁的系統(tǒng),這類系統(tǒng)關(guān)鍵是要梳理出有哪些核心的能力,是否在上述系統(tǒng)的域的定義范圍內(nèi)的,是否其他系統(tǒng)有類似的能力,如果有的話,需要考慮合并。另外還需要考慮核心能力公開化、文檔化,至少讓部門內(nèi)知道,有地可查,避免系統(tǒng)的重復(fù)造輪子。
遇到第二類系統(tǒng)是存量系統(tǒng)且沒有需求迭代,業(yè)務(wù)上基本沒有調(diào)用量的。這類系統(tǒng)需要和業(yè)務(wù)溝通是否有下線計(jì)劃,是否有類似的系統(tǒng)可以替代,給業(yè)務(wù)決策提供技術(shù)參考。
應(yīng)用拆分合理
需求開發(fā)中,一個(gè)項(xiàng)目或者需求的實(shí)現(xiàn)可能需要多個(gè)目標(biāo)系統(tǒng)協(xié)同來實(shí)現(xiàn),這涉及到目標(biāo)系統(tǒng)的拆分的粒度,系統(tǒng)拆分成應(yīng)用的粒度沒有統(tǒng)一標(biāo)準(zhǔn),但是要在相對合理范圍內(nèi),可以參考的因素包括業(yè)務(wù)規(guī)劃,系統(tǒng)調(diào)用量級,基于業(yè)務(wù)規(guī)劃的架構(gòu)設(shè)計(jì),部門內(nèi)的人數(shù)及分工。過多過少都是不好的。
如果一個(gè)新業(yè)務(wù)短期內(nèi)看不到大的發(fā)展,在初步規(guī)劃應(yīng)用的時(shí)候,可以先粗粒度拆分,部門內(nèi)人數(shù)平均不能應(yīng)該超過2-3個(gè)應(yīng)用,再多必然面臨著一個(gè)需求實(shí)現(xiàn)的時(shí)候不同系統(tǒng)的切換成本。如果后續(xù)業(yè)務(wù)發(fā)展起來,部門內(nèi)人數(shù)增多,因?yàn)榉止じ?xì),可以考慮更細(xì)粒度的拆分,系統(tǒng)拆分必然會帶來另一個(gè)問題,系統(tǒng)之間該如何的協(xié)同以及系統(tǒng)的調(diào)用鏈路的長度。
基于以上講的系統(tǒng)分層的概念,部門內(nèi)系統(tǒng)可以分為兩類,一類系統(tǒng)是業(yè)務(wù)網(wǎng)關(guān),一類是通用的業(yè)務(wù)能力。業(yè)務(wù)網(wǎng)關(guān)面向用戶,用來協(xié)同應(yīng)用的活動,不包含業(yè)務(wù)邏輯,不保留業(yè)務(wù)對象的狀態(tài),相當(dāng)于領(lǐng)域驅(qū)動設(shè)計(jì)應(yīng)用層+表現(xiàn)層,有人稱作它為業(yè)務(wù)SOA,或者BFF層。
通用業(yè)務(wù)能力相當(dāng)于領(lǐng)域邏輯層+基礎(chǔ)設(shè)施層,作為軟件的核心所在,保留了業(yè)務(wù)對象的狀態(tài),對業(yè)務(wù)對象的持久化被委托給基礎(chǔ)設(shè)施層,基礎(chǔ)設(shè)施層作為其他層的支撐層,實(shí)現(xiàn)了和其他系統(tǒng)的通信,實(shí)現(xiàn)業(yè)務(wù)對象的持久化。
在以上兩類系統(tǒng)中,業(yè)務(wù)網(wǎng)關(guān)是依賴通用業(yè)務(wù)能力層,業(yè)務(wù)網(wǎng)關(guān)是北向依賴,通用業(yè)務(wù)能力層是南向依賴。 在一個(gè)功能的實(shí)現(xiàn)不建議鏈路長度不超過2。同時(shí)也要注意到系統(tǒng)之間相互依賴的情況,要重視,此點(diǎn)是系統(tǒng)穩(wěn)定性的風(fēng)險(xiǎn)點(diǎn)。
成本量化:
基于以上三方面分析,梳理出的交付物:1、系統(tǒng)的上下文依賴;2、 系統(tǒng)的業(yè)務(wù)域定義及能力規(guī)劃地圖。3、應(yīng)用調(diào)用鏈路的長度及相互的依賴關(guān)系;4、應(yīng)用拆分粒度合理性的評估;5、系統(tǒng)中能力的下沉或者合并;6、業(yè)務(wù)量少的系統(tǒng)列表。
其中1-4,可以看作系統(tǒng)的行動指南或者原則,5-6是下一步的行動,更簡單的說是我們常做的系統(tǒng)的關(guān)停并轉(zhuǎn)。在業(yè)務(wù)部門系統(tǒng)關(guān)停并轉(zhuǎn)還需要考慮到成本問題,做好成本的量化。
首先需要評估關(guān)停并轉(zhuǎn)的付出的成本,其次要評估系統(tǒng)日常維護(hù)1-3年的成本包括人力成本和機(jī)器資源的成本,前者和后者的三年累計(jì)值相減,如果大于零,系統(tǒng)建議暫時(shí)不動,如果少于零,可以考慮關(guān)停并轉(zhuǎn)的計(jì)劃。
以上是我從研發(fā)角度系統(tǒng)架構(gòu)合理性的思考。
架構(gòu)合理性如果從業(yè)務(wù)角度來評估,可能就變成以下三個(gè)方面:一是能解決當(dāng)下業(yè)務(wù)需求和問題。2、高效完成業(yè)務(wù)需求: 能以優(yōu)雅且可復(fù)用的方式解決當(dāng)下所有業(yè)務(wù)問題。3、前瞻性設(shè)計(jì): 能在未來一段時(shí)間都能以第2種方式滿足業(yè)務(wù),從而不會每次當(dāng)業(yè)務(wù)進(jìn)行演變時(shí),導(dǎo)致架構(gòu)翻天覆地的變化。
視角的不同必然代表著大家對同一件事情的看法不同。
作者:京東零售?高田林
來源:京東云開發(fā)社區(qū) 轉(zhuǎn)載請注明來源