5種主要的軟件架構模式


譯者:王延飛
譯文連接:https://dzone.com/articles/5-major-software-architecture-patterns
web


在全球軟件架構峯會上,咱們討論了不少軟件架構模式,所以我決定寫一篇有關它的文章,重點介紹知名的軟件架構師的看法。
數據庫

什麼是軟件架構模式?

軟件架構模式是通過驗證的,具備良好設計結構的方法。更具體地說,架構模式是在實踐中概括總結的一組設計決策,具備明肯定義的屬性,並能夠重複使用。緩存

軟件開發有時能夠看做是選擇,定製和組合架構模式的過程。軟件架構師必須決定如何採用哪幾種架構模式,如何使這些架構模式與軟件系統特定的上下文相適應。服務器

Mark Richards他寫了一本書,名爲《軟件架構模式》,其中主要介紹了5種軟件架構模式:微內核模式(Microkernel Pattern),微服務模式 (Microservices Pattern ),分層架構模式( Layered Architecture Pattern),基於事件的模式(Event-based Pattern),基於空間的架構模式(Space-based Pattern)。微信

5種主要的軟件架構模式

1.微內核模式(Microkernel Pattern)

微內核架構模式也稱爲插件模式。這種模式容許你將其餘應用程序功能做爲插件添加到核心應用程序,從而提供可擴展性以及功能分離。網絡

微內核架構模式由兩種類型的架構組件組成:核心系統和插件模塊。架構

  • 插件模塊,提供應用程序功能和自定義處理邏輯的可擴展性,靈活性和隔離性。併發

  • 傳統上,微內核架構模式的核心繫統僅包含使系統運行所需的最小功能。app

微內核架構模式的最佳示例是Eclipse IDE。下載基本的Eclipse產品爲你提供的只是一個編輯器功能。可是,一旦開始添加插件,它就會成爲高度可定製和有用的產品。

優勢:

  • 極大的靈活性和可擴展性運維

  • 一些插件容許在應用程序運行時添加

  • 良好的便攜性

  • 易於部署

  • 可以快速響應不斷變化的環境

  • 插件模塊能夠單獨進行測試。

  • 高性能,由於你能夠自定義和簡化應用程序以僅包括所需的那些功能。

  • 應用場景

  1. 從不一樣來源獲取數據,轉換數據並將其輸出到不一樣地方的應用程序

  2. 工做流應用程序

  3. 任務類應用程序

2.微服務模式 (Microservices Pattern )

當你將應用程序做爲一組微服務編寫時,實際上就是在編寫能夠協同工做的多個應用程序。其中每一個微服務都有本身的職責,團隊能夠獨立於其餘微服務進行開發。這些微服務之間惟一的依賴就是通訊。當微服務彼此通訊時,你必須確保它們之間發送的消息可以向後兼容。

優勢:

  • 能夠分別編寫,維護和部署每一個微服務

  • 易於擴展,由於你能夠僅擴展須要擴展的微服務

  • 更新迭代應用程序的各個部分比較容易,由於它們較小,而且與其餘部分的耦合較少

  • 團隊成員能快速響應且富有成效

  • 高度可維護和可測試–微服務模式知足快速頻繁的開發和部署

  • 可獨立部署–無需與其餘團隊協調便可部署其服務

應用場景:

  • 小型網站

  • 邊界明確的企業數據中心

  • 快速發展的業務

  • 多部門協做的開發團隊

3.分層架構模式( Layered Architecture Pattern)

最多見的架構模式是分層架構模式。分層體系架構模式是n層模式,其中軟件系統組件根據職責被設計在不一樣的層中。

這是大多數軟件的傳統設計方法,而且具備獨立性。這意味着全部組件都是互連的,但彼此之間不依賴。分層體系架構模式的每一層在應用程序中都有特定的角色和職責。例如,顯示層將負責處理用戶界面交互邏輯,而業務層將負責執行與請求關聯的特定業務規則。

分層體系架構模式的強大功能之一是,組件之間職責分離。特定層中的組件僅處理與該層有關的邏輯。

優勢:

  • 高可測試性,每一層均可以單獨測試。

  • 高度易於開發,由於這種模式衆所周知,而且實現起來並不太複雜,並且大多數公司都經過逐層分離技能來開發應用程序,這種模式已經成爲大多數業務應用程序開發的天然選擇。

  • 可維護

  • 易於單獨更新某一層

應用場景:

  • 標準業務線應用程序,其功能不僅是CRUD操做

  • 須要快速構建的新應用程序

  • 適用於經驗不足的開發團隊

  • 須要嚴格的可維護性和可測試性的應用

4.基於事件的模式(Event-based Pattern)

這是用於開發高度可擴展系統、最多見的分佈式異步架構模式。該架構模式由用於監聽並異步處理事件的一系列組件組成。事件驅動的架構模式構建了一個接收全部數據的中央單元,而後將其委託給處理特定類型的單獨模塊。

優勢:

  • 容易適應複雜,常常混亂的環境

  • 彈性伸縮

  • 當出現新的事件類型時,很容易擴展

應用場景:

  • 具備異步數據流的異步系統

  • 用戶界面交互

5.基於空間的架構模式(Space-based Pattern)

基於空間的架構模式,能夠專門用於解決軟件系統的伸縮性和併發性問題。

對於用戶訪問量常常發生變化、偶爾出現高併發的應用程序,這是一種有用的軟件架構模式。這種模式,經過消除中央數據庫約束,並使用複製基於內存的數據網格來實現伸縮性。

基於空間的架構模式旨在經過在多個服務器之間拆分處理和存儲數據,來避免高負載下的軟件系統功能崩潰。

優勢:

  • 可以快速響應不斷變化的環境。

  • 儘管基於空間的架構模式一般不是分佈式,但它們是動態的,而且基於雲的複雜工具容許將應用程序輕鬆「推送」到服務器,從而簡化了部署。

  • 經過內存中的數據訪問和此模式中內置的緩存機制可實現高性能。

  • 高可伸縮性來自於對集中式數據庫的依賴很小或根本沒有依賴的事實,所以提升了可伸縮性。

應用場景

  • 數據量大的應用程序,例如用戶日誌

  • 低價值數據,偶爾可能丟失而不會形成嚴重後果

  • 社交類的應用程序



後臺回覆「加羣」,帶你進入高手如雲交流羣


推薦閱讀:

5個基本Linux命令行工具的現代化替代品

齊全了!Linux開發運維經常使用調試排障工具

幾款實時查看網卡流量的工具

從零認識 iptables

Linux經常使用命令 &  實用命令萬字總結

容易被遺忘的10個Linux命令,很實用!

阿里雲出品的《深刻淺出k8s》手冊下載

用動圖展現 10 大 Git 命令

經典!服務端TCP鏈接的TIME_WAIT過多

Linux萌新和老司機都必備命令查詢工具

8 個問題完全搞透 DNS 協議

三張圖完全搞懂iptables和netfilter

別再說你不懂Linux內存管理了

強烈安利的幾款畫圖工具

故障排查:K8s中Pod沒法正常解析域名

網絡排錯大講解~

HTTP/3 原理實戰

Linux 下10個幫助你調試的命令

OVS 和 OVS-DPDK 對比

微軟出品的最新K8S學習指南3.0下載



喜歡,就給我一個「在看」



10T 技術資源大放送!包括但不限於:雲計算、虛擬化、微服務、大數據、網絡、Linux、Docker、Kubernetes、Python、Go、C/C++、Shell、PPT 等。在公衆號內回覆「1024,便可免費獲取!!

本文分享自微信公衆號 - Linux雲計算網絡(cloud_dev)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索