阮一峰的學習筆記《軟體架構入門》,記載了5種最常用的軟體架構:
1、分層架構
眾所周知
2、事件驅動架構
通過事件進行通訊的軟體架構
事件隊列(event queue):接收事件的入口
分發器(event mediator):將不同的事件分發到不同的商務邏輯單元
事件通道(event channel):分發器與處理器之間的聯絡渠道
事件處理器(event processor):實現商務邏輯,處理完成後會發出事件,觸發下一步操作
優點
分布式的非同步架構,事件處理器之間高度解耦,軟體的擴充性好
適用性廣,各種類型的項目都可以用
效能較好,因為事件的非同步本質,軟體不易產生堵塞
事件處理器可以獨立地載入和卸載,容易部署
缺點
涉及非同步編程(要考慮遠程通訊、失去響應等情況),開發相對複雜
難以支援原子性操作,因為事件通過會涉及多個處理器,很難復原
分布式和非同步特性導致這個架構較難測試
3、微核架構
又稱為外掛程式架構。指的是軟體的核心相對較小,主要功能和商務邏輯都通過外掛程式實現。
核心(core)通常只包含系統啟動並執行最小功能。外掛程式則是互相獨立的,外掛程式之間的通訊,應該減少到最低,避免出現互相依賴的問題。
優點
良好的功能延伸性(extensibility),需要什麼功能,開發一個外掛程式即可
功能之間是隔離的,外掛程式可以獨立的載入和卸載,使得它比較容易部署,
可定製性高,適應不同的開發需要
可以漸進式地開發,逐步增加功能
缺點
擴充性(scalability)差,核心通常是一個獨立單元,不容易做成分布式
開發難度相對較高,因為涉及到外掛程式與核心的通訊,以及內部的外掛程式登記機制
4、微服務架構
5、雲架構
不甚了了
這個模式主要分成兩部分:處理單元(processing unit)和虛擬中介軟體(virtualized middleware)。
處理單元:
實現商務邏輯
虛擬中介軟體:
負責通訊、保持sessions、資料複製、分散式處理、處理單元的部署。
虛擬中介軟體又包含四個組件:
訊息中介軟體(Messaging Grid):系統管理使用者請求和session,當一個請求進來以後,決定分配給哪一個處理單元。
資料中介軟體(Data Grid):將資料複製到每一個處理單元,即資料同步。保證某個處理單元都得到同樣的資料。
處理中介軟體(Processing Grid):可選,如果一個請求涉及不同類型的處理單元,該中介軟體負責協調處理單元
部署中介軟體(Deployment Manager):負責處理單元的啟動和關閉,監控負載和回應時間,當負載增加,就新啟動處理單元,負載減少,就關閉處理單元。
但前不久我讀架構師考試教材,裡面談到軟體的架構風格,分為5大類:
1、資料流風格
順序執行。包括批處理序列和管道/過濾器。
2、調用/返迴風格
系統採用了調用與返回機制,實質是一種分而治之的策略,主要思想為將複雜的大系統分解為若干子系統,降低複雜度,增加可修改性。
包括
1)主程式/子程式
2)物件導向風格
對象通過函數和方法進行互動。
3)階層風格
上層調用下層。
CS、BS、MVC、MVP都屬於階層。
3、獨立構件風格
強調系統中的每個構件都是相對獨立的個體,它們之間不直接通訊,以降低耦合度,提升靈活性。包括:
1)進程通訊
通過訊息傳遞來串連構件
2)事件子系統
基於事件的隱式調用風格。系統不直接調用構件,構件的過程註冊到事件,當事件被觸發,則註冊於其中的所有構件都被執行。觀察者模式。
我認為主要事件系統的優點在於調用和被調用沒有直接關聯,解耦。
4、虛擬機器風格
人為構建一個運行環境,系統運行於其中,可以解析與運行自訂的語言,增加架構的靈活性。包括
1)解譯器
2)以規則為中心
5、倉庫風格
一個中央資料庫,獨立的構件圍繞其上執行。
1)資料庫
2)超文本系統
3)黑板。黑板相當於共用資料。知識源通過黑板互動。
那麼教材裡說的軟體架構風格和阮一峰提到的5種常用架構是個什麼關係呢。
按照我的理解,軟體架構風格是軟體的種類;而架構則是軟體的結構類型。5種常用架構,可以試著歸類到相應的風格裡去:
1、分層結構 – 調用/返迴風格
2、事件驅動架構 – 獨立構件風格
3、微核架構 – 獨立構件風格
4、微服務架構 – 獨立構件風格
5、雲架構 – 獨立構件風格
這種歸類估計有錯,先記下來。