李志華


摘要:現(xiàn)代社會信息化發(fā)展速度日益加快,為了滿足不斷提升的服務(wù)需求,涌現(xiàn)了多種軟件架構(gòu)模式。然而,軟件架構(gòu)模式之間存在著相互交叉的情況,造成了模式之間的關(guān)系含糊。該文定義了軟件架構(gòu)層級,通過架構(gòu)層級的劃分,梳理常見的軟件架構(gòu)模式之間的關(guān)系,并通過分析這些架構(gòu)模式的產(chǎn)生動機(jī),進(jìn)一步解釋層級劃分,幫助軟件開發(fā)人員更好地識別和選擇軟件架構(gòu)模式。
關(guān)鍵詞:架構(gòu)模式;架構(gòu)層級;分層架構(gòu);六邊形架構(gòu);SOA;微服務(wù);事件驅(qū)動架構(gòu);服務(wù)網(wǎng)格
中圖分類號:TP311? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2021)23-0060-02
Abstract: With the rapid development of information technology in modern society, in order to meet the increasing demand for services, a variety of software architecture patterns have emerged. However, the software architecture patterns intersect with each other, resulting in the ambiguous relationship between the patterns. This paper defines the software architecture level, clarifies the relationship between common software architecture patterns through the division of architecture level, and further explains the hierarchy by analyzing the motivation of these architecture patterns, so as to help software developers better identify and select software architecture patterns.
Key words: architecture pattern; architecture level; layered architecture; hexagonal architecture;? SOA; microservice; event driven architecture; service mesh
1 背景
軟件架構(gòu)是軟件開發(fā)的初始階段就必須做的工作,并在軟件開發(fā)和維護(hù)的生命周期中持續(xù)產(chǎn)生影響。隨著軟件的發(fā)展,產(chǎn)生了多種軟件架構(gòu)模式,常見的有:分層架構(gòu)、六邊形架構(gòu)、SOA架構(gòu)、微服務(wù)架構(gòu)、事件驅(qū)動架構(gòu)、服務(wù)網(wǎng)格等。軟件架構(gòu)模式是逐步發(fā)展形成的,其最終形式往往和其他架構(gòu)模式有著一定的關(guān)系,導(dǎo)致一個軟件會同時使用多種架構(gòu)模式。若想將架構(gòu)模式和軟件開發(fā)完美結(jié)合,首先應(yīng)該了解架構(gòu)模式之間的關(guān)系,并對其有一個充分的認(rèn)識。從軟件架構(gòu)層級的角度進(jìn)行劃分,可以幫助開發(fā)人員更好地了解軟件架構(gòu)模式之間的關(guān)系,更好地完成軟件架構(gòu)。
2 軟件架構(gòu)層級
在架構(gòu)金字塔[1]中,將架構(gòu)分為了4級:系統(tǒng)級、應(yīng)用級、模塊級、代碼級。
代碼級的關(guān)注點(diǎn)在代碼細(xì)節(jié)上,由于關(guān)注點(diǎn)的抽象程度較低,不適合劃分為軟件架構(gòu)模式的層級。另外,不同層級受業(yè)務(wù)的影響程度也不同,引入了業(yè)務(wù)領(lǐng)域來輔助定義層級。最終,將軟件架構(gòu)層級分為了3級。
1) 系統(tǒng)級:不同業(yè)務(wù)領(lǐng)域的應(yīng)用在整個系統(tǒng)內(nèi)的關(guān)系。
系統(tǒng)是最高的抽象層級,代表了能夠提供價值的東西[2],這種價值,一般最終體現(xiàn)在業(yè)務(wù)上。因此,系統(tǒng)級的軟件架構(gòu)模式,是和業(yè)務(wù)領(lǐng)域相關(guān)的,與業(yè)務(wù)領(lǐng)域無關(guān)的架構(gòu)模式屬于更低的架構(gòu)層級。不同業(yè)務(wù)領(lǐng)域一般對應(yīng)了不同的組織,這是區(qū)分是否屬于同一業(yè)務(wù)領(lǐng)域的重要標(biāo)志。不同業(yè)務(wù)領(lǐng)域下的軟件應(yīng)用組合起來,形成了軟件系統(tǒng)。
常見的系統(tǒng)級軟件架構(gòu)模式:SOA、服務(wù)網(wǎng)格。
2) 應(yīng)用級:同一業(yè)務(wù)領(lǐng)域下的不同應(yīng)用之間的關(guān)系。
常見的應(yīng)用級軟件架構(gòu)模式:微服務(wù)架構(gòu)、事件驅(qū)動架構(gòu)。
3) 模塊級:應(yīng)用內(nèi)部的模塊關(guān)系。
常見的模塊級軟件架構(gòu)模式:分層架構(gòu)、六邊形架構(gòu)。
不同層級的架構(gòu)模式之間,存在著互相交叉的關(guān)系;而同一層級的架構(gòu)模式,存在互補(bǔ)的關(guān)系。
3 軟件架構(gòu)模式
3.1 分層架構(gòu)
分層架構(gòu)模式被認(rèn)為是所有架構(gòu)的始祖。在分解復(fù)雜的軟件系統(tǒng)時,使用最多的技術(shù)就是分層,在計(jì)算機(jī)本身的架構(gòu)中,到處都有分層的例子,不同的層從包含了操作系統(tǒng)調(diào)用的程序設(shè)計(jì)語言,到設(shè)備驅(qū)動程序和CPU指令集,再到芯片內(nèi)部的各種邏輯門[3]。
軟件,從一開始的單體系統(tǒng),逐步向分布式系統(tǒng)發(fā)展。單體系統(tǒng)中,出現(xiàn)了二層結(jié)構(gòu):客戶端和服務(wù)器端,然后又發(fā)展到更多層結(jié)構(gòu),分層對業(yè)務(wù)的依賴程度不高,是技術(shù)角度的架構(gòu)模式。在向分布式系統(tǒng)發(fā)展中,系統(tǒng)分解成了多個應(yīng)用,不依賴于業(yè)務(wù)的分層架構(gòu)漸漸無法滿足業(yè)務(wù)系統(tǒng),人們開始用微服務(wù)等新的架構(gòu)模式來架構(gòu)系統(tǒng),而分層架構(gòu)模式逐步向模塊級發(fā)展,被廣泛地交叉于其他各種架構(gòu)模式中。
3.2 六邊形架構(gòu)
軟件分層一般有三層:表現(xiàn)層、領(lǐng)域?qū)?、?shù)據(jù)源層,業(yè)務(wù)邏輯應(yīng)該存在于領(lǐng)域?qū)?,然而,由于沒有嚴(yán)格的代碼約束,實(shí)際的軟件中,業(yè)務(wù)邏輯會滲透到表現(xiàn)層的界面代碼中,這種耦合導(dǎo)致了難以白盒測試和服務(wù)難以重用的問題[4]。