5種主要的軟件架構(gòu)模式
程序員的成長之路互聯(lián)網(wǎng)/程序員/技術(shù)/資料共享?關(guān)注
閱讀本文大概需要 4.5 分鐘。
譯者:王延飛譯文鏈接:https://dzone.com/articles/5-major-software-architecture-patterns在全球軟件架構(gòu)峰會上,我們討論了很多軟件架構(gòu)模式,因此我決定寫一篇有關(guān)它的文章,重點介紹知名的軟件架構(gòu)師的見解。
什么是軟件架構(gòu)模式?
軟件架構(gòu)模式是經(jīng)過驗證的,具有良好設(shè)計結(jié)構(gòu)的方法。更具體地說,架構(gòu)模式是在實踐中歸納總結(jié)的一組設(shè)計決策,具有明確定義的屬性,并可以重復(fù)使用。軟件開發(fā)有時可以看作是選擇,定制和組合架構(gòu)模式的過程。軟件架構(gòu)師必須決定如何采用哪幾種架構(gòu)模式,如何使這些架構(gòu)模式與軟件系統(tǒng)特定的上下文相適應(yīng)。Mark Richards他寫了一本書,名為《軟件架構(gòu)模式》,其中主要介紹了5種軟件架構(gòu)模式:微內(nèi)核模式(Microkernel Pattern),微服務(wù)模式 (Microservices Pattern ),分層架構(gòu)模式( Layered Architecture Pattern),基于事件的模式(Event-based Pattern),基于空間的架構(gòu)模式(Space-based Pattern)。5種主要的軟件架構(gòu)模式
1.微內(nèi)核模式(Microkernel Pattern)
微內(nèi)核架構(gòu)模式也稱為插件模式。這種模式允許你將其他應(yīng)用程序功能作為插件添加到核心應(yīng)用程序,從而提供可擴展性以及功能分離。微內(nèi)核架構(gòu)模式由兩種類型的架構(gòu)組件組成:核心系統(tǒng)和插件模塊。插件模塊,提供應(yīng)用程序功能和自定義處理邏輯的可擴展性,靈活性和隔離性。
傳統(tǒng)上,微內(nèi)核架構(gòu)模式的核心系統(tǒng)僅包含使系統(tǒng)運行所需的最小功能。
優(yōu)點:
極大的靈活性和可擴展性
一些插件允許在應(yīng)用程序運行時添加
良好的便攜性
易于部署
能夠快速響應(yīng)不斷變化的環(huán)境
插件模塊可以單獨進行測試。
高性能,因為你可以自定義和簡化應(yīng)用程序以僅包括所需的那些功能。
應(yīng)用場景
從不同來源獲取數(shù)據(jù),轉(zhuǎn)換數(shù)據(jù)并將其輸出到不同地方的應(yīng)用程序
工作流應(yīng)用程序
任務(wù)類應(yīng)用程序
2.微服務(wù)模式 (Microservices Pattern )
當你將應(yīng)用程序作為一組微服務(wù)編寫時,實際上就是在編寫可以協(xié)同工作的多個應(yīng)用程序。其中每個微服務(wù)都有自己的職責(zé),團隊可以獨立于其他微服務(wù)進行開發(fā)。這些微服務(wù)之間唯一的依賴就是通信。當微服務(wù)彼此通信時,你必須確保它們之間發(fā)送的消息能夠向后兼容。優(yōu)點:
可以分別編寫,維護和部署每個微服務(wù)
易于擴展,因為你可以僅擴展需要擴展的微服務(wù)
更新迭代應(yīng)用程序的各個部分比較容易,因為它們較小,并且與其他部分的耦合較少
團隊成員能快速響應(yīng)且富有成效
高度可維護和可測試–微服務(wù)模式滿足快速頻繁的開發(fā)和部署
可獨立部署–無需與其他團隊協(xié)調(diào)即可部署其服務(wù)
應(yīng)用場景:
小型網(wǎng)站
邊界明確的企業(yè)數(shù)據(jù)中心
快速發(fā)展的業(yè)務(wù)
多部門協(xié)作的開發(fā)團隊
3.分層架構(gòu)模式( Layered Architecture Pattern)
最常見的架構(gòu)模式是分層架構(gòu)模式。分層體系架構(gòu)模式是n層模式,其中軟件系統(tǒng)組件根據(jù)職責(zé)被設(shè)計在不同的層中。這是大多數(shù)軟件的傳統(tǒng)設(shè)計方法,并且具有獨立性。這意味著所有組件都是互連的,但彼此之間不依賴。分層體系架構(gòu)模式的每一層在應(yīng)用程序中都有特定的角色和職責(zé)。例如,顯示層將負責(zé)處理用戶界面交互邏輯,而業(yè)務(wù)層將負責(zé)執(zhí)行與請求關(guān)聯(lián)的特定業(yè)務(wù)規(guī)則。分層體系架構(gòu)模式的強大功能之一是,組件之間職責(zé)分離。特定層中的組件僅處理與該層有關(guān)的邏輯。優(yōu)點:
高可測試性,每一層都可以單獨測試。
高度易于開發(fā),因為這種模式眾所周知,并且實現(xiàn)起來并不太復(fù)雜,而且大多數(shù)公司都通過逐層分離技能來開發(fā)應(yīng)用程序,這種模式已經(jīng)成為大多數(shù)業(yè)務(wù)應(yīng)用程序開發(fā)的自然選擇。
可維護
易于單獨更新某一層
應(yīng)用場景:
標準業(yè)務(wù)線應(yīng)用程序,其功能不只是CRUD操作
需要快速構(gòu)建的新應(yīng)用程序
適用于經(jīng)驗不足的開發(fā)團隊
需要嚴格的可維護性和可測試性的應(yīng)用
4.基于事件的模式(Event-based Pattern)
這是用于開發(fā)高度可擴展系統(tǒng)、最常見的分布式異步架構(gòu)模式。該架構(gòu)模式由用于監(jiān)聽并異步處理事件的一系列組件組成。事件驅(qū)動的架構(gòu)模式構(gòu)建了一個接收所有數(shù)據(jù)的中央單元,然后將其委托給處理特定類型的單獨模塊。優(yōu)點:
容易適應(yīng)復(fù)雜,經(jīng)?;靵y的環(huán)境
彈性伸縮
當出現(xiàn)新的事件類型時,很容易擴展
應(yīng)用場景:
具有異步數(shù)據(jù)流的異步系統(tǒng)
用戶界面交互
5.基于空間的架構(gòu)模式(Space-based Pattern)
基于空間的架構(gòu)模式,可以專門用于解決軟件系統(tǒng)的伸縮性和并發(fā)性問題。對于用戶訪問量經(jīng)常發(fā)生變化、偶爾出現(xiàn)高并發(fā)的應(yīng)用程序,這是一種有用的軟件架構(gòu)模式。這種模式,通過消除中央數(shù)據(jù)庫約束,并使用復(fù)制基于內(nèi)存的數(shù)據(jù)網(wǎng)格來實現(xiàn)伸縮性。基于空間的架構(gòu)模式旨在通過在多個服務(wù)器之間拆分處理和存儲數(shù)據(jù),來避免高負載下的軟件系統(tǒng)功能崩潰。優(yōu)點:
能夠快速響應(yīng)不斷變化的環(huán)境。
盡管基于空間的架構(gòu)模式通常不是分布式,但它們是動態(tài)的,并且基于云的復(fù)雜工具允許將應(yīng)用程序輕松“推送”到服務(wù)器,從而簡化了部署。
通過內(nèi)存中的數(shù)據(jù)訪問和此模式中內(nèi)置的緩存機制可實現(xiàn)高性能。
高可伸縮性來自于對集中式數(shù)據(jù)庫的依賴很小或根本沒有依賴的事實,因此提高了可伸縮性。
應(yīng)用場景
數(shù)據(jù)量大的應(yīng)用程序,例如用戶日志
低價值數(shù)據(jù),偶爾可能丟失而不會造成嚴重后果
社交類的應(yīng)用程序
推薦閱讀:
太贊了,竟然用SpringBoot打造一款網(wǎng)頁版的IM,進行聊天...
知乎高贊:為什么像王者榮耀這樣的游戲Server不愿意使用微服務(wù)?
微信掃描二維碼,關(guān)注我的公眾號
寫留言朕已閱?![]()
