深入解析 18 種軟件架構設計模式 (2)

本文爲第二篇,包含軟件分層架構、管道與過濾器架構、主從架構。

軟件架構模式捕獲了各類系統和軟件要素的設計結構,使其可以被複用。在編寫代碼的過程中,開發者往往在項目內、公司內乃至職業生涯中多次遇到類似問題。通過創建設計模式,工程師們可以藉助一種可複用的方法來解決問題,結構化地實現項目目標。

  1. 軟件分層架構 Layered Architecture ==============================

在複雜軟件系統設計中,分層架構是一種常見且有效的設計方法。這種方法將系統劃分爲多個層,每一層負責特定的功能。這種結構化的方式有助於組織代碼,使系統更易於維護和隨時間的變化進行修改。

一個典型的分層架構通常包含三個主要層次:表示層業務邏輯層數據訪問層

表示層(Presentation Layer)

表示層的職責是向用戶展示信息並收集用戶輸入。該層包含用戶界面及其他直接與用戶交互的組件。用戶界面是用戶所看到並與之交互的部分,例如按鈕、文本框和菜單。表示層還包括與用戶界面相關的邏輯,如事件處理器和驗證機制。

簡單來說,表示層負責:

  1. 展示信息:將數據以用戶友好的形式呈現。

  2. 收集輸入:通過界面元素獲取用戶的輸入。

  3. 處理用戶邏輯:驗證用戶輸入並響應用戶操作。

表示層是用戶與系統的橋樑,是用戶體驗設計和用戶交互邏輯的核心。

業務邏輯層(Business Logic Layer)

業務邏輯層負責實現應用的業務規則和核心邏輯。該層包含處理和操作數據的代碼,以及其他與應用功能相關的邏輯。

這是軟件實現 “智能” 的地方,核心職責包括:

  1. 計算:執行各種算法和數據處理任務。

  2. 決策:根據業務規則作出判斷和決策。

  3. 任務執行:完成具體的功能任務,如生成報告、處理交易等。

業務邏輯層是軟件系統的 “大腦”。它決定了系統的實際功能表現,同時將用戶界面層與數據存儲層隔離開,從而保證代碼的可維護性和擴展性。

數據訪問層(Data Access Layer)

數據訪問層負責與數據庫或其他外部數據源交互。該層的代碼用於從數據庫中讀取數據或向數據庫寫入數據。

核心功能包括:

  1. 數據檢索:從數據庫中提取所需信息。

  2. 數據修改:對現有數據進行增刪改操作。

  3. 數據持久化:將更新後的數據保存到數據庫中。

數據訪問層是軟件系統的 “橋樑”,連接了業務邏輯層和底層數據存儲。這一層的設計直接影響到系統的數據可靠性和性能,是軟件功能實現的關鍵部分。

總結

分層架構通過清晰的分層,將系統複雜度降到最低:

  1. 表示層:用戶與系統交互的入口,專注於用戶體驗和界面邏輯。

  2. 業務邏輯層:系統核心功能的實現地,負責業務規則的執行。

  3. 數據訪問層:數據交互和存儲的紐帶,保證數據的正確性和一致性。

    這種架構設計不僅提高了代碼的可讀性,還使系統具有良好的擴展性和維護性。

  4. 管道與過濾器架構 Pipes and Filters Architecture ==========================================

管道與過濾器架構是一種設計模式,它通過將處理任務分解爲獨立的組件來實現對數據的處理。這種架構特別適用於需要處理大量數據的系統。它能夠顯著提升系統的性能、可擴展性和可維護性。

核心組件

1. 數據源(Data Source) 數據源是管道的起點,負責接收輸入數據並將其傳遞到管道中。它的主要職責是爲整個數據處理流程提供原始數據。

2. 管道(Pipe) 管道是連接其他組件的媒介,主要用於在組件之間傳輸和緩衝數據。功能包括:傳輸數據:從上游組件傳遞數據到下游組件。數據緩衝:在處理數據時提供臨時存儲。同步:協調相鄰過濾器之間的活動。

3. 過濾器(Filter) 過濾器是獨立的數據處理步驟,負責對數據執行轉換功能。它從上游的管道接收數據,對數據進行處理,然後將轉換後的數據傳遞給下游的管道。

特點:

自包含:每個過濾器只專注於完成特定的任務。

模塊化:可以根據需要添加或移除過濾器以擴展功能。

4. 數據終點(Data Sink) 數據終點是管道的終點,負責接收處理後的數據並作爲應用的輸出結果。它是最終數據的 “消費者”,可以將結果輸出到文件、數據庫或其他外部系統。

舉個例子:圖像處理流水線

圖像處理系統,任務是對圖像進行一系列的順序處理,例如調整大小、應用圖像濾鏡(如銳化或模糊),然後將處理後的圖像保存到存儲中。

過濾器:

  1. 調整大小過濾器(Resize Filter):將圖像調整爲指定的尺寸。

  2. 銳化過濾器(Sharpen Filter):增強調整後圖像的清晰度。

  3. 模糊過濾器(Blur Filter):對圖像應用模糊效果。

  4. 保存過濾器(Save Filter):將最終處理的圖像保存到存儲中。

處理流水線:

  1. 輸入:原始圖像。

  2. 處理步驟:原始圖像 → 調整大小過濾器 → 銳化過濾器 → 模糊過濾器 → 保存過濾器 → 輸出圖像。

優勢:

  1. 性能:可以通過並行處理提升處理效率。

  2. 可擴展性:容易添加新過濾器或調整現有的處理流程。

  3. 可維護性:由於組件獨立,修改或替換某個過濾器不會影響整個系統。

管道與過濾器架構尤其適合數據密集型的應用場景,例如音視頻處理、日誌分析和數據流處理系統。

  1. 主從架構 Master-Slave Architecture =================================

主從架構是一種分佈式系統設計模式,其中一個節點(主節點,Master)控制一個或多個節點(從節點,Slave)以執行特定任務。主節點負責將工作負載分配給從節點,並協調其活動。從節點沒有與主節點同等的控制權,僅執行主節點分配的任務。

優勢:

  1. 高效的工作負載分配 主從架構的核心優勢在於能夠將工作負載高效地分佈到多個節點上。這種分佈式處理減少了單個節點的負載,確保系統能夠應對海量數據和高併發流量。

  2. 容錯性 主從架構還具有良好的容錯能力。如果一個從節點出現故障,主節點可以將該從節點的工作重新分配給其他正常工作的從節點。這種機制保證即使某些節點失效,系統仍能正常運行。

實際案例

1. Web 服務器負載均衡

主從架構在 Web 服務器集羣中的負載均衡是一個典型的應用場景。假設有多個 Web 服務器處理客戶端的 HTTP 請求,主節點(負載均衡器)負責將請求高效地分配給不同的從節點(Web 服務器)。

主節點(負載均衡器):

  1. 接收來自客戶端的請求。

  2. 根據預定義規則(如輪詢、最小連接數等)決定哪個從節點(Web 服務器)處理請求。

  3. 將請求分配給對應的從節點。

從節點(Web 服務器):

  1. 接收主節點分配的任務(如 HTTP 請求)。

  2. 獨立處理任務,並將結果(HTTP 響應)通過主節點返回給客戶端。

這種架構優化了 Web 服務器集羣的資源利用率,並增強了系統的可用性和擴展性。

2. 主從數據庫配置

隨着數據量的快速增長,數據的可訪問性、可讀性和備份成爲關鍵問題。主從架構同樣在數據庫系統中廣泛應用,典型場景是主從數據庫配置。

主數據庫(Master Database):

  1. 負責所有寫操作(如插入、更新、刪除)。

  2. 將數據變更同步到從數據庫。

從數據庫(Slave Database):

  1. 負責處理讀操作,爲主數據庫減輕負擔。

  2. 同時作爲主數據庫的備份,在主數據庫失效時可作爲容災恢復的解決方案。

這種主從數據庫配置不僅提高了數據庫系統的性能,還增強了數據的可靠性和可用性。

總結

主從架構通過主節點的集中控制實現了以下目標:

  1. 高效分佈:將任務分配到多個從節點,減少單點瓶頸。

  2. 容錯性:在部分節點失效的情況下,保持系統的正常運行。

  3. 擴展性:可以通過增加從節點來擴展系統處理能力。

無論是在 Web 服務器的負載均衡場景,還是在數據庫系統中,主從架構都提供了靈活且高效的解決方案,適用於需要高性能、高可靠性的分佈式系統。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/DnSeaceVOdMWDBHDwS23sw