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