解讀 5 種軟件架構(gòu)模式
當一些人開始涉足軟件工程領(lǐng)域,總有一天他會需要學習軟件架構(gòu)模式的基本知識。在我第一次接觸編程的時候,我并不知道如何才能了解到現(xiàn)有的架構(gòu)模型,這樣就不會過于詳盡,也不會讓人感到混亂,而是非常抽象和簡單的理解。
在我發(fā)現(xiàn) Mark Richards 的 Software Architecture Patterns(《軟件架構(gòu)模式》,暫無中譯本)一書之前,這個問題就一直存在。在此,我將與你分享這本書的最重要部分和架構(gòu)模式。(要了解更多信息,我強烈建議你閱讀這本書或他的報告)
為什么作為軟件工程師,至少要學習基本的架構(gòu)模式?
我肯定有許多文章可以解答這個問題,但是我會告訴你一些原因。首先,如果你了解架構(gòu)模式,你將更容易遵循架構(gòu)師的要求。其次,理解這些模式可以幫助你在代碼中作出決策:比如,如果你的應(yīng)用設(shè)計是基于事件驅(qū)動的微服務(wù),作為一名軟件工程師,如果你注意到現(xiàn)有服務(wù)中邏輯的復(fù)雜性和責任的增加,你就必須把你的代碼解耦到一個單獨的服務(wù)中。(不懂的話,就跟著文中的內(nèi)容走,這種模式在本文中已經(jīng)做了一個簡要的說明。)
Mark Richards 在他著的書中,描述了 5 種模式:
分層架構(gòu)
驅(qū)動架構(gòu)
微內(nèi)核架構(gòu)(或插件架構(gòu))
微服務(wù)架構(gòu)
基于空間的架構(gòu)(或云架構(gòu)模式)
1. 分層架構(gòu)
它是單體應(yīng)用最常見的架構(gòu)。該模式的基本思想是將應(yīng)用程序的邏輯劃分為若干層,每層都封裝了特定的角色。例如,持久層將負責應(yīng)用程序與數(shù)據(jù)庫引擎之間的通信。
圖 1:分層架構(gòu)模式
2. 事件驅(qū)動架構(gòu)
這種模式背后的思想是將應(yīng)用邏輯解耦為單一用途的事件處理組件,以異步方式接收和處理事件。這是一種廣受歡迎的分布式異步架構(gòu)模型,它以高可擴展性和適應(yīng)性而聞名。
圖 2:事件驅(qū)動架構(gòu)代理拓撲
3. 微內(nèi)核架構(gòu)
微內(nèi)核架構(gòu),也被稱為插件架構(gòu),這種設(shè)計模式包含兩大部分:核心系統(tǒng)和插件模塊(或擴展)。Web 瀏覽器就是一個很好的例子,它相當于核心系統(tǒng),可以讓你無限地安裝擴展(或者插件)。
圖 3:微內(nèi)核架構(gòu)
4. 微服務(wù)架構(gòu)
微服務(wù)架構(gòu)由單獨部署的服務(wù)組成,每個服務(wù)最好都有一個單一的責任。這些服務(wù)彼此之間是相互獨立的,當其中一個服務(wù)出現(xiàn)故障時,其他服務(wù)不會因此中斷。
圖 4:微服務(wù)架構(gòu)
5. 基于空間的架構(gòu)
基于空間的模式背后的主要思想是分布式共享內(nèi)存,以緩解經(jīng)常發(fā)生在數(shù)據(jù)庫層面的問題。它的假設(shè)是,通過使用內(nèi)存數(shù)據(jù)處理大部分操作,這樣我們就可以避免在數(shù)據(jù)庫中進行額外的操作,從而避免未來可能由此產(chǎn)生的任何問題(例如,如果你的用戶活動數(shù)據(jù)實體發(fā)生了變化,你不需要改變一堆代碼來持久化和從數(shù)據(jù)庫中檢索這些數(shù)據(jù))。
基本的方法是將應(yīng)用程序分離成處理單元(可以根據(jù)需求自動擴大和縮?。?,數(shù)據(jù)將在這些單元之間進行復(fù)制和處理,無需持久化到中央數(shù)據(jù)庫(雖然當系統(tǒng)發(fā)生故障時,也會有本地存儲)。
圖 5:基于空間的架構(gòu)
你可以在我的 GitHub 賬戶中找到其中一些架構(gòu)模式的最簡單例子。以下是鏈接:
分層模式(使用 Java)
微內(nèi)核或插件模式(使用 Go 或 Golang)
微服務(wù)模式(使用 Go)
作者介紹:
Orkhan Huseynli,軟件工程師。
原文鏈接:
https://orkhanscience.medium.com/software-architecture-patterns-5-mins-read-e9e3c8eb47d2