常見的五種軟體架構
一、軟體架構是個什麼概念,架構的定義:
1.軟體架構是一個系統的草圖。
2.軟體架構描述的物件是直接構成系統的抽象元件。
3.各個元件之間的連線則明確和相對細緻地描述元件之間的通訊。
4.在實現階段,這些抽象元件被細化為實際的元件,比如具體某個類或者物件。
5.在物件導向領域中,元件之間的連線通常用介面來實現。
二、架構師有細分,基本上可以分為三類:
系統架構師:伺服器負載,可靠性,伸縮,擴充套件,資料庫切分,快取應用等。
應用架構師:理解業務,梳理模型,設計模式,介面,資料互動等。
業務架構師:也可以叫業務領域專家、行業專家、產品諮詢師、資深顧問通常我們說的架構師是1和2的結合。
三、常見的五種軟體架構
軟體架構(software architecture)就是軟體的基本結構。
合適的架構是軟體成功的最重要因素之一。大型軟體公司通常有專門的架構師職位(architect),只有資深程式設計師才可以擔任。
1、分層架構
分層架構(layered architecture)是最常見的軟體架構,也是事實上的標準架構。如果你不知道要用什麼架構,那就用它。
這種架構將軟體分成若干個水平層,每一層都有清晰的角色和分工,不需要知道其他層的細節。層與層之間通過介面通訊。
雖然沒有明確約定,軟體一定要分成多少層,但是四層的結構最常見。
表現層(presentation):使用者介面,負責視覺和使用者互動
業務層(business):實現業務邏輯
持久層(persistence):提供資料,SQL 語句就放在這一層
資料庫(database) :儲存資料
有的軟體在邏輯層和持久層之間,加了一個服務層(service),提供不同業務邏輯需要的一些通用介面。
使用者的請求將依次通過這四層的處理,不能跳過其中任何一層。
優點
結構簡單,容易理解和開發
不同技能的程式設計師可以分工,負責不同的層,天然適合大多數軟體公司的組織架構
每一層都可以獨立測試,其他層的介面通過模擬解決
缺點
一旦環境變化,需要程式碼調整或增加功能時,通常比較麻煩和費時
部署比較麻煩,即使只修改一個小地方,往往需要整個軟體重新部署,不容易做持續釋出
軟體升級時,可能需要整個服務暫停
擴充套件性差。使用者請求大量增加時,必須依次擴充套件每一層,由於每一層內部是耦合的,擴充套件會很困難
二、事件驅動架構
事件(event)是狀態發生變化時,軟體發出的通知。
事件驅動架構(event-driven architecture)就是通過事件進行通訊的軟體架構。它分成四個部分。
事件佇列(event queue):接收事件的入口
分發器(event mediator):將不同的事件分發到不同的業務邏輯單元
事件通道(event channel):分發器與處理器之間的聯絡渠道
事件處理器(event processor):實現業務邏輯,處理完成後會發出事件,觸發下一步操作
對於簡單的專案,事件佇列、分發器和事件通道,可以合為一體,整個軟體就分成事件代理和事件處理器兩部分。
優點
分散式的非同步架構,事件處理器之間高度解耦,軟體的擴充套件性好
適用性廣,各種型別的專案都可以用
效能較好,因為事件的非同步本質,軟體不易產生堵塞
事件處理器可以獨立地載入和解除安裝,容易部署
缺點
涉及非同步程式設計(要考慮遠端通訊、失去響應等情況),開發相對複雜
難以支援原子性操作,因為事件通過會涉及多個處理器,很難回滾
分散式和非同步特性導致這個架構較難測試
三、微核架構
微核架構(microkernel architecture)又稱為"外掛架構"(plug-in architecture),指的是軟體的核心相對較小,主要功能和業務邏輯都通過外掛實現。
核心(core)通常只包含系統執行的最小功能。外掛則是互相獨立的,外掛之間的通訊,應該減少到最低,避免出現互相依賴的問題。
優點
良好的功能延伸性(extensibility),需要什麼功能,開發一個外掛即可
功能之間是隔離的,外掛可以獨立的載入和解除安裝,使得它比較容易部署,
可定製性高,適應不同的開發需要
可以漸進式地開發,逐步增加功能
缺點
擴充套件性(scalability)差,核心通常是一個獨立單元,不容易做成分散式
開發難度相對較高,因為涉及到外掛與核心的通訊,以及內部的外掛登記機制
四、微服務架構
微服務架構(microservices architecture)是服務導向架構(service-oriented architecture,縮寫 SOA)的升級。
每一個服務就是一個獨立的部署單元(separately deployed unit)。這些單元都是分散式的,互相解耦,通過遠端通訊協議(比如REST、SOAP)聯絡。
微服務架構分成三種實現模式。
RESTful API 模式:服務通過 API 提供,雲服務就屬於這一類
RESTful 應用模式:服務通過傳統的網路協議或者應用協議提供,背後通常是一個多功能的應用程式,常見於企業內部
集中訊息模式:採用訊息代理(message broker),可以實現訊息佇列、負載均衡、統一日誌和異常處理,缺點是會出現單點失敗,訊息代理可能要做成叢集
優點
擴充套件性好,各個服務之間低耦合
容易部署,軟體從單一可部署單元,被拆成了多個服務,每個服務都是可部署單元
容易開發,每個元件都可以進行持續整合式的開發,可以做到實時部署,不間斷地升級
易於測試,可以單獨測試每一個服務
缺點
由於強調互相獨立和低耦合,服務可能會拆分得很細。這導致系統依賴大量的微服務,變得很凌亂和笨重,效能也會不佳。
一旦服務之間需要通訊(即一個服務要用到另一個服務),整個架構就會變得複雜。典型的例子就是一些通用的 Utility 類,一種解決方案是把它們拷貝到每一個服務中去,用冗餘換取架構的簡單性。
分散式的本質使得這種架構很難實現原子性操作,交易回滾會比較困難。
五、雲架構
雲結構(cloud architecture)主要解決擴充套件性和併發的問題,是最容易擴充套件的架構。
它的高擴充套件性,主要原因是沒使用中央資料庫,而是把資料都複製到記憶體中,變成可複製的記憶體資料單元。然後,業務處理能力封裝成一個個處理單元(prcessing unit)。訪問量增加,就新建處理單元;訪問量減少,就關閉處理單元。由於沒有中央資料庫,所以擴充套件性的最大瓶頸消失了。由於每個處理單元的資料都在記憶體裡,最好要進行資料持久化。
這個模式主要分成兩部分:處理單元(processing unit)和虛擬中介軟體(virtualized middleware)。
處理單元:實現業務邏輯
虛擬中介軟體:負責通訊、保持sessions、資料複製、分散式處理、處理單元的部署。
虛擬中介軟體又包含四個元件。
訊息中介軟體(Messaging Grid):管理使用者請求和session,當一個請求進來以後,決定分配給哪一個處理單元。
資料中介軟體(Data Grid):將資料複製到每一個處理單元,即資料同步。保證某個處理單元都得到同樣的資料。
處理中介軟體(Processing Grid):可選,如果一個請求涉及不同型別的處理單元,該中介軟體負責協調處理單元
部署中介軟體(Deployment Manager):負責處理單元的啟動和關閉,監控負載和響應時間,當負載增加,就新啟動處理單元,負載減少,就關閉處理單元。
優點
高負載,高擴充套件性
動態部署
缺點
實現複雜,成本較高
主要適合網站類應用,不合適大量資料吞吐的大型資料庫應用
較難測試
相關文章
- 10種常見的軟體架構模式架構模式
- 架構成長之路:常見的五種MySQL高可用方案分析架構MySql
- 【軟體架構篇】常見可擴充套件模式架構套件模式
- 常見的五種三列布局
- 幾種常見的軟體開發模型分析模型
- 常見的五種MySQL高可用方案分析MySql
- 軟體架構五大模式詳解架構模式
- 軟體架構師或解決方案架構師必讀的五本書 - javarevisited架構Java
- 惡意軟體開發——shellcode執行的幾種常見方式
- 幾種常見的Python資料結構Python資料結構
- python實現常見的五種排序演算法Python排序演算法
- 常見的五種 NFT 騙局,千萬別中招了
- 簡單介紹常見的三種架構設計模式及其優缺點!架構設計模式
- 常見軟體的預設埠號
- 軟體架構師應避免的7種行為 - Daniel Watts架構TTS
- 寫爬蟲時常見的五種字串編碼特徵爬蟲字串編碼特徵
- 架構之:軟體架構漫談架構
- 大資料架構師必讀:常見的七種Hadoop和Spark專案案例大資料架構HadoopSpark
- 軟體體系架構的認識架構
- 常見的網站伺服器架構有哪些?網站伺服器架構
- 軟體架構風格——規則架構架構
- 軟體架構模式之微服務架構架構模式微服務
- Linux常見的軟體包管理任務Linux
- Python五種常見的演算法,你都瞭解麼Python演算法
- 五種常見的DNS攻擊型別及應對方式DNS型別
- 關於軟體架構和業務架構的思考架構
- 軟體架構的核心思想架構
- MySQL 中常見的幾種高可用架構部署方案MySql架構
- 軟體架構簡介架構
- 架構:軟體成本估算架構
- 軟體架構指南 - martinfowler架構
- Java常見知識點彙總(⑮)——Jvm架構JavaJVM架構
- TOGAF企業架構與軟體架構的對應圖架構
- 軟體架構, 軟體框架,設計模式的區別架構框架設計模式
- 區塊鏈中五種常見共識演算法區塊鏈演算法
- 【架構與設計】常見微服務分層架構的區別和落地實踐架構微服務
- 『網際網路架構』軟體架構-mybatis體系結構(14)架構MyBatis
- 常見訊息中介軟體之RocketMQMQ