經典軟件架構模式

目錄

軟件架構模式

架構模式是常見問題的案。
軟件架構模式是通過驗證的、針對特定場景的,具備良好設計結構的、通用的、可重用的解決方案。更具體地說,架構模式是在實踐中概括總結的一組設計決策,具備明肯定義的屬性,並能夠重複使用。
數據庫

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

分層架構模式(Layered Architecture Pattern)

分層架構模式是最多見的架構模式,此模式用於可分解爲子任務的結構化程序,每一個子任務都位於特定的抽象層級,每一層都爲上一層提供服務。服務器

分層體系架構模式的每一層在應用程序中都有特定的角色和職責,這意味着全部組件都是互連的,但彼此之間不依賴。分層體系架構模式的強大功能之一是,組件之間職責分離。特定層中的組件僅處理與該層有關的邏輯。網絡

例如,通常信息系統最多見的 4 個層次:多線程

  1. 表示層(也稱爲 UI 層)
  2. 應用層(也稱爲服務層)
  3. 業務邏輯層(也稱爲領域層)
  4. 數據訪問層(也稱爲持久層)

優勢:架構

  • 高可測試性,每一層均可以單獨測試。
  • 高度易於開發,由於這種模式衆所周知,而且實現起來並不太複雜,並且大多數公司都經過逐層分離技能來開發應用程序,這種模式已經成爲大多數業務應用程序開發的天然選擇。
  • 可維護性。
  • 易於單獨更新某一層。

應用場景:併發

  • 標準業務線應用程序,其功能不僅是 CRUD 操做。
  • 須要快速構建的新應用程序。
  • 適用於經驗不足的開發團隊。
  • 須要嚴格的可維護性和可測試性的應用。

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

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

這種模式也被稱爲訂閱發佈模式,有 4 個主要組件:事件源、事件監聽者、通道和事件總線。事件源將消息發佈到事件總線上的特定通道,監聽者訂閱特定的通道,消息發佈到監聽者以前訂閱的通道,監聽者將收到消息的通知。異步

優勢:編輯器

  • 容易適應複雜,常常混亂的環境。
  • 彈性伸縮。
  • 當出現新的事件類型時,很容易擴展。

應用場景:

  • 具備異步數據流的異步系統。
  • 用戶界面交互。
  • 通知服務。
  • 註冊中心。

在這裏插入圖片描述

微內核模式(Microkernel Pattern)

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

微內核架構模式主要由兩種組件構成:

  1. 核心系統組件:僅包含使系統運行所需的最小功能。
  2. 插件模塊:提供應用程序功能和自定義處理邏輯的可擴展性,靈活性和隔離性。

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

優勢:

  • 極大的靈活性和可擴展性。
  • 一些插件容許在應用程序運行時添加。
  • 良好的便攜性。
  • 易於部署。
  • 可以快速響應不斷變化的環境。
  • 插件模塊能夠單獨進行測試。
  • 高性能,由於你能夠自定義和簡化應用程序以僅包括所需的那些功能。

應用場景:

  • 從不一樣來源獲取數據,轉換數據並將其輸出到不一樣地方的應用程序。
  • 工做流應用程序。
  • 任務類應用程序。

微服務模式(Microservices Pattern)

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

優勢:

  • 能夠分別編寫,維護和部署每一個微服務。
  • 易於擴展,由於你能夠僅擴展須要擴展的微服務。
  • 更新迭代應用程序的各個部分比較容易,由於它們較小,而且與其餘部分的耦合較少。
  • 團隊成員能快速響應且富有成效。
  • 高度可維護和可測試–微服務模式知足快速頻繁的開發和部署。
  • 可獨立部署,無需與其餘團隊協調便可部署其服務。

應用場景:

  • 邊界明確的企業數據中心。
  • 快速發展的業務。
  • 多部門協做的開發團隊。

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

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

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

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

優勢:

  • 可以快速響應不斷變化的環境。
  • 儘管基於空間的架構模式一般不是分佈式,但它們是動態的,而且基於雲的複雜工具容許將應用程序輕鬆 「推送」 到服務器,從而簡化了部署。
  • 經過內存中的數據訪問和此模式中內置的緩存機制可實現高性能。
  • 高可伸縮性來自於對集中式數據庫的依賴很小或根本沒有依賴的事實,所以提升了可伸縮性。

應用場景:

  • 數據量大的應用程序,例如:用戶日誌。
  • 低價值數據,偶爾可能丟失而不會形成嚴重後果。
  • 社交類的應用程序。

CS 模式(Client-server pattern)

這種模式由兩部分組成:服務器和多個客戶端。服務器將向多個客戶端提供服務。客戶端從服務器請求服務,服務器向這些客戶端提供相關服務。此外,服務器繼續偵聽客戶端請求。

應用場景:

  • 電子郵件、文檔共享和銀行等在線應用程序。
  • 基於 IPC 的應用程序。

在這裏插入圖片描述

主從模式(Master-slave pattern)

這種模式由兩部分組成:主節點和從節點。主節點將工做分配給相同的從節點,並根據從節點返回的結果計算最終結果。

應用場景:

  • 在數據庫複製中,主數據庫被視爲權威源數據庫,從數據庫與之同步。
  • 經過總線鏈接到計算機系統(主驅動器和從驅動器)的外圍設備。
  • 進程內的多線程應用。

在這裏插入圖片描述

管道-過濾器模式(Pipe-filter pattern)

這種模式可用於構造生成和處理數據流的系統,每一個處理步驟都包含一個過濾器組件。要處理的數據經過管道傳遞,這些管道可用於緩衝或同步目的。

應用場景:

  • 編譯器。連續過濾器執行詞法分析、詞法解析、語義分析和代碼生成。
  • 生物信息學的工做流。
  • 工具鏈式的應用程序。
  • 網絡數據面處理軟件。

在這裏插入圖片描述

代理模式(Broker pattern)

這種模式經過解耦組件來構造分佈式系統,這些組件能夠經過遠程服務調用彼此交互,代理組件負責協調組件之間的通訊。

服務器向代理髮布功能(服務和特徵),客戶端向代理請求服務,而後代理將客戶端重定向到合適的服務。

注意:Broker,Agent,Proxy 以及 Delegate 之間的的區別。

應用場景:

  • 消息代理軟件,例如:Apache ActiveMQ、Apache Kafka、RabbitMQ 和 JBoss 消息傳遞。
  • 網絡傳輸中的代理軟件。

在這裏插入圖片描述

P2P 模式(Peer-to-peer pattern)

在這種模式中,每一個組件都稱爲對等節點。對等節點既能夠做爲客戶機(從其餘對等節點請求服務),也能夠做爲服務器(向其餘對等節點提供服務)。對等節點能夠充當單個客戶機或服務器,也能夠同時充當客戶機和服務器,而且能夠隨着時間變化動態地更改角色。

使用場景:

  • 文件共享網絡,例如:Gnutella 和 G2 等。
  • 多媒體協議,如:P2PTV 和 PDTP。

在這裏插入圖片描述

MVC 模式(Model-view-controller pattern)

MVC 模式將一個交互應用程序分爲三個部分:

  1. 模型:包含核心功能和數據。
  2. 視圖:向用戶顯示信息(能夠定義多個視圖)。
  3. 控制器:處理來自用戶的輸入。

這樣作是爲了將信息的內部表示、信息呈現給用戶的方式、接受用戶輸入的方式分離開來。這種模式解耦組件並容許有效的代碼重用。

應用場景:

  • 通常的 Web 應用程序,例如:Django 和 Rails 等框架。
  • 通常的 GUI 應用程序。

在這裏插入圖片描述

黑板模式(Blackboard pattern)

這種模式對於沒有肯定解決方案策略的問題很是有用。

黑板圖案由三個主要部分組成:

  1. 黑板:一個結構化的全局內存,包含來自解決方案空間的對象。
  2. 知識源:具備本身表示形式的專門化模塊。
  3. 控制組件:選擇、配置和執行模塊。

全部的組件均可以到達黑板。組件能夠生成添加到黑板上的新數據對象,組件在黑板上查找特定類型的數據,並經過與現有的知識源進行模式匹配找到這些數據。

應用場景:

  • 語音識別。
  • 車輛識別及追蹤。
  • 蛋白質結構識別。
  • 聲納信號的解釋。

在這裏插入圖片描述

解釋器模式(Interpreter pattern)

這種模式用於設計一個解釋專用語言編寫的程序組件,它主要指定如何評估每一行程序,即用特定語言編寫的句子或表達式。其基本思想是語言的每一個符號都有一個類。

應用場景:

  • 數據庫查詢語言,如:SQL。
  • 用於描述通訊協議的語言。

在這裏插入圖片描述

相關文章
相關標籤/搜索