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