之前查了一些設計模式,突然發現了架構設計模式,所以本文介紹下幾種常見的架構模式及其簡要介紹、用法和優缺點:
1.分層模式(Layered Architecture)
- 用法:將系統劃分為多個邏輯層次,每一層提供服務給上一層,並使用下一層的服務。典型的例子包括表示層、業務邏輯層和數據訪問層。
-
優點:
- 易於分工協作,降低耦合度。
- 每一層可獨立開發、測試和維護。
- 提供清晰的責任分離和模塊化結構。
-
缺點:
- 層與層之間的通信可能導致性能開銷。
- 可能產生過多的抽象層級,導致複雜性增加。
- 不適用於需要高度靈活性或快速迭代響應的場景。
2.客户端-服務器模式(Client-Server Pattern)
- 用法:在分佈式系統中,客户端發起請求,服務器處理請求並返回結果。例如Web應用、數據庫查詢等。
-
優點:
- 客户端和服務器職責明確,易於擴展和升級。
- 支持多用户同時訪問。
-
缺點:
- 單點故障問題(服務器端),需要高可用解決方案。
- 網絡延遲可能影響性能。
- 難以實現複雜的交互邏輯和狀態共享。
3.主從設備模式(Master-Slave Pattern)
- 用法:用於數據庫複製、分佈式計算等場景,一個主節點負責管理整個系統,多個從節點執行任務或者存儲數據的副本。
-
優點:
- 能夠實現負載均衡和容錯。
- 通過讀寫分離提高性能。
-
缺點:
- 主節點失效可能導致整個系統的中斷。
- 數據同步可能存在延時問題。
- 從節點數量增加會加大管理和協調複雜度。
4.管道-過濾器模式(Pipeline-Filter Pattern)
- 用法:數據流經一系列處理單元(過濾器),每個過濾器對數據進行特定的處理後再傳遞給下一個。在多媒體處理、日誌處理等領域廣泛應用。
-
優點:
- 易於添加、移除或修改單個處理步驟。
- 並行處理能力較強,支持流水線併發執行。
-
缺點:
- 如果過濾器之間有緊密依賴,可能會限制其重用性。
- 處理過程中錯誤的傳播和控制較為複雜。
5.代理模式(Proxy Pattern)
- 用法:為其他對象提供一種代理以控制對該對象的訪問,比如遠程代理、虛擬代理、保護代理等。
-
優點:
- 通過間接訪問隱藏真實對象的複雜性。
- 增強安全性,可以添加額外的權限驗證和監控功能。
- 支持延遲加載和優化資源消耗。
-
缺點:
- 添加了額外的間接訪問開銷。
- 設計不當可能增加整體設計的複雜性。
6.點對點模式(Peer-to-Peer Pattern)
- 用法:網絡中的所有節點地位平等,可以直接與其他節點通信和交換信息,如文件共享網絡、區塊鏈技術等。
-
優點:
- 高度分散化,無中心節點故容錯能力強。
- 擴展性好,隨着節點增多,整體性能可能提升。
-
缺點:
- 控制和管理困難,容易出現一致性問題。
- 對網絡安全和隱私要求較高。
7.事件總線模式(Event Bus Pattern)
- 用法:作為一種消息傳遞機制,允許系統各組件發佈和訂閲事件,從而解耦組件間的直接聯繫。
-
優點:
- 提高系統的鬆耦合程度。
- 支持異步處理和分佈式系統集成。
-
缺點:
- 系統行為難以跟蹤和調試。
- 如果不正確地管理事件,可能導致內存泄漏或消息積壓。
8.模型-視圖-控制器模式(Model-View-Controller Pattern, MVC)
- 用法:在軟件工程中用於構建用户界面,將數據模型、用户界面展示以及處理用户輸入的邏輯分離成三個相互協作的部分。
-
優點:
- 提高代碼可複用性和可維護性。
- 易於進行前後端分離開發。
-
缺點:
- 當項目變得龐大時,MVC邊界可能模糊不清。
- 過於嚴格的分離可能導致額外的通信開銷。
9.黑板模式(Blackboard Pattern)
- 用法:主要用於解決複雜、不確定性問題,多個知識源觀察並更新全局黑板上的數據,尋找解決問題的最佳方案。
-
優點:
- 非確定性問題求解的有效方式。
- 各個組件相對獨立,易於擴展和重構。
-
缺點:
- 控制和協調各個組件較複雜。
- 適用場景有限,非通用架構模式。
10.解釋器模式(Interpreter Pattern)
- 注意:解釋器模式通常屬於軟件設計模式而非體系架構模式,它主要用於設計語言解釋器或表達式解析器。
- 用法:定義語法或表達式的文法,並創建一個解釋器來解釋這些語法結構。
-
優點:
- 便於擴展新的語法規則。
- 把複雜的問題轉換為簡單的解釋規則集合。
-
缺點:
- 僅在特定情況下有效,如解析簡單語言或表達式時。
- 對於複雜的文法,維護和執行效率較低。
其他的待再詳細瞭解:
- 分層模式
- 客户端-服務器模式
- 主從模式
- 管道-過濾器模式
- 代理模式
- 對等模式
- 事件總線模式
- 模型-視圖-控制器模式
- 黑板模式
- 解釋器模式
- 事件驅動架構
- 微內核架構
- 微服務架構
- 基於空間的架構
- 面向對象風格
- 倉庫風格
- 基於規則的系統風格
- 黑板系統風格
- C2風格
- 正交架構風格
- 異構風格
- 管道過濾器風格
在《軟件架構理論與實踐》這本書中對上述架構模式有更詳細的描述,大家有空可以再看下。