軟件架構入門-分層架構、事件驅動、微服務架構和雲原生架構

2019年07月10日07:00:17 科技 2732

軟件架構(software architecture)就是軟件的基本結構。

合適的架構是軟件成功的最重要因素之一。大型軟件公司通常有專門的架構師職位(architect),只有資深程序員才可以擔任。

O'Reilly 出版過一本免費的小冊子《Software Architecture Patterns》(PDF), 介紹了五種最常見的軟件架構,是非常好的入門讀物。

軟件架構入門-分層架構、事件驅動、微服務架構和雲原生架構 - 天天要聞

軟件架構就是軟件的基本結構。架構的本質是管理複雜性。如果你覺得架構不重要,可能是你做的事情不夠複雜,或者是你沒有管理好複雜性。架構模式雖多,經過抽象沉澱之後,也就那麼幾種:

1. 分層架構(比較傳統的單體架構)

2. 事件驅動架構 (一般適用於應用局部場景,用來實現異步解耦)

3. 微核架構(又稱插件架構,開發難度較高,一般用來做工具軟件開發,如Eclipse,不太適合分佈式業務場景)

4. 微服務架構(當前比較流行的服務化架構,解決單體架構面臨的問題,適合敏捷開發,快速迭代)

5. 雲架構(現在的說法是雲原生架構-Cloud Native,基於Docker、Kubernetes、Service Mesh 雲原生架構)

在原文的基礎上,小編按照自己的想法,進行了小幅調整。

一、分層架構

分層架構(layered architecture)是最常見的軟件架構,也是事實上的標準架構。如果你不知道要用什麼架構,那就用它。

這種架構將軟件分成若干個水平層,每一層都有清晰的角色和分工,不需要知道其他層的細節。層與層之間通過接口通信。

雖然沒有明確約定,軟件一定要分成多少層,但是四層的結構最常見。

軟件架構入門-分層架構、事件驅動、微服務架構和雲原生架構 - 天天要聞

  • 表現層(presentation):用戶界面,負責視覺和用戶互動
  • 業務層(business):實現業務邏輯
  • 持久層(persistence):提供數據,SQL 語句就放在這一層
  • 數據庫(database) :保存數據

有的軟件在邏輯層(business)和持久層(persistence)之間,加了一個服務層(service),提供不同業務邏輯需要的一些通用接口。

用戶的請求將依次通過這四層的處理,不能跳過其中任何一層。

軟件架構入門-分層架構、事件驅動、微服務架構和雲原生架構 - 天天要聞

優點

  • 結構簡單,容易理解和開發
  • 不同技能的程序員可以分工,負責不同的層,天然適合大多數軟件公司的組織架構
  • 每一層都可以獨立測試,其他層的接口通過模擬解決

缺點

  • 一旦環境變化,需要代碼調整或增加功能時,通常比較麻煩和費時
  • 部署比較麻煩,即使只修改一個小地方,往往需要整個軟件重新部署,不容易做持續發佈(因為是單體架構)
  • 軟件升級時,可能需要整個服務暫停
  • 擴展性差。用戶請求大量增加時,必須依次擴展每一層,由於每一層內部是耦合的,擴展會很困難(單體架構,需求調整會貫穿每一層)

二、事件驅動架構

事件(event)是狀態發生變化時,軟件發出的通知。

事件驅動架構(event-driven architecture)就是通過事件進行通信的軟件架構。它分成四個部分。

軟件架構入門-分層架構、事件驅動、微服務架構和雲原生架構 - 天天要聞

事件驅動架構(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),可以實現消息隊列、負載均衡、統一日誌和異常處理,缺點是會出現單點失敗,消息代理可能要做成集群

現在開源的微服務框架比較多,如常用的有Spring Cloud、Dubbo、ServiceComb等等。

軟件架構入門-分層架構、事件驅動、微服務架構和雲原生架構 - 天天要聞

優點

  • 擴展性好,各個服務之間低耦合
  • 容易部署,軟件從單一可部署單元,被拆成了多個服務,每個服務都是可部署單元
  • 容易開發,每個組件都可以進行持續集成式的開發,可以做到實時部署,不間斷地升級
  • 易於測試,可以單獨測試每一個服務

缺點

  • 由於強調互相獨立和低耦合,服務可能會拆分得很細。這導致系統依賴大量的微服務,變得很凌亂和笨重,性能也會不佳。
  • 一旦服務之間需要通信(即一個服務要用到另一個服務),整個架構就會變得複雜。典型的例子就是一些通用的 Utility 類,一種解決方案是把它們拷貝到每一個服務中去,用冗餘換取架構的簡單性。
  • 分佈式的本質使得這種架構很難實現原子性操作,交易回滾會比較困難。

五、雲架構(雲原生-Cloud Native)

雲架構(cloud architecture,現在的說法是雲原生-Cloud Native)主要解決擴展性和並發的問題,是最容易擴展的架構。

它的高擴展性,主要原因是可以基於雲上計算資源彈性伸縮。然後,業務處理能力封裝成一個個處理單元(prcessing unit)。訪問量增加,就新建處理單元(Docker容器);訪問量減少,就關閉處理單元(Docker容器)。由於沒有中央數據庫,所以擴展性的最大瓶頸消失了。由於每個處理單元的數據都獨立分庫。

這個模式主要分成兩部分:處理單元(processing unit)和虛擬中間件(virtualized middleware)。

  • 處理單元:實現業務邏輯(類似於微服務架構中的微服務)
  • 虛擬中間件:負責通信、保持sessions、數據複製、分佈式處理、處理單元的部署。

軟件架構入門-分層架構、事件驅動、微服務架構和雲原生架構 - 天天要聞

虛擬中間件又包含四個組件:

  • 消息中間件(Messaging Grid):管理用戶請求和session,當一個請求進來以後,決定分配給哪一個處理單元;
  • 數據中間件(Data Grid):將數據複製到每一個處理單元,即數據同步。保證某個處理單元都得到同樣的數據;
  • 處理中間件(Processing Grid):可選,如果一個請求涉及不同類型的處理單元,該中間件負責協調處理單元;
  • 部署中間件(Deployment Manager):負責處理單元的啟動和關閉,監控負載和響應時間,當負載增加,就新啟動處理單元,負載減少,就關閉處理單元。

隨着Docker、Kubernetes等容器化技術的快速發展,上述關於雲架構描述有點陳舊了。當前最新的雲原生架構,以Docker+Kubernetes為核心,尤其是容器編排Kubernetes 已經成為事實上的行業標準。

軟件架構入門-分層架構、事件驅動、微服務架構和雲原生架構 - 天天要聞

雲原生架構圖的主要特徵:

  • 微服務應用運行支撐環境;
  • 以容器化應用的鏡像作為交付標準;
  • 通過資源調度服務快速申請、釋放資源;
  • 通過彈性伸縮快速擴展應用;
  • 狀態監控;

軟件架構入門-分層架構、事件驅動、微服務架構和雲原生架構 - 天天要聞

主要目標:

1. 讓開發人員聚焦業務邏輯的實現,其他交給容器雲平台來完成;

2. 支持業務系統的快速迭代,支撐業務的快速變化和發展;

3. 構建以共享服務體系為核心的業務中台;

下面是小編針對某新零售企業設計的雲原生架構圖,以雲和微服務架構為基礎構建雲原生應用,這裡雲可以是公有雲、私有雲、混合雲等等。

軟件架構入門-分層架構、事件驅動、微服務架構和雲原生架構 - 天天要聞

以上是從不同的視角,對架構進行了分類。實際應用中,各種架構並不是孤立的,可以根據業務環境和業務訴求,對各種架構進行綜合和嫁接。每種架構都有其優點和缺點。優點不必多說,缺點則幾乎都是通過工具工程(比如自動化發佈工具、自動化測試等等)能力的方法來規避,工具工程對軟件架構非常重要。

原文鏈接:

http://ruanyifeng.com/blog/2016/09/software-architecture.html

科技分類資訊推薦

未來智能駕駛圖鑑:車路協同成主流,道路兩側也安上雷達! - 天天要聞

未來智能駕駛圖鑑:車路協同成主流,道路兩側也安上雷達!

新能源汽車風口下,智能駕駛成為起飛的豬。國內供應鏈發展也十分迅猛,現在10萬級的車也能體驗智駕,那麼在未來,智能駕駛會達到什麼樣的狀態呢?答案是「車路協同」。車端智能是基礎現在帶智駕功能的車都有一定的硬件基礎做支撐,比如毫米波雷達、攝像頭、激光雷達、芯片等,通過這些硬件,可以採集車輛周圍的環境信息和信...
「英偉達已向中國三家企業通報」 - 天天要聞

「英偉達已向中國三家企業通報」

據台灣《工商時報》網站5月3日報道,在針對中國市場的H20芯片遭美國政府禁售後,美國芯片大廠英偉達正加緊開發另一款符合美國出口規定的人工智能(AI)芯片,以繼續保住其在中國的市場份額。
金舟投屏文件輸出目錄設置方法 - 天天要聞

金舟投屏文件輸出目錄設置方法

金舟投屏文件輸出目錄怎麼設置?跟着我來操作。1、 打開金舟投屏應用2、 在金舟投屏窗口,點擊菜單按鈕。3、 在彈出的下拉菜單中,選擇設置選項。4、 進入設置窗口後,選擇點擊文件選項。5、 在文件窗口裡,點擊輸出目錄按鈕,於彈出窗口選擇文件輸出路徑,例如:D:文件保存金舟投屏。6、 點擊關閉即可完成操作(9777180)...
E-鑽文件加密大師:輕鬆加密文件保護數據安全 - 天天要聞

E-鑽文件加密大師:輕鬆加密文件保護數據安全

對電腦文件加密,能保護個人隱私與商業機密,提升重要文件安全性。1、 把重要文件放入一個文件夾,進行加密保護。2、 開啟E-鑽文件加密大師;3、 點擊加密按鈕,選擇要加密的文件夾,然後單擊確定。4、 選擇加密強度與模式;5、 請再次輸入密碼,然後點擊確認。6、 點擊加密文件,輸入密碼後即可打開。(9777179)...
Win7文件夾加密方法大全 - 天天要聞

Win7文件夾加密方法大全

如今,隱私的重要性日益凸顯。每個人都有自己的隱私,特別是在電腦中存儲了大量個人文件,其中一些是不想讓他人看到的重要資料。因此,我們需要為文件夾採取適當的保護措施。加密文件夾是最常用的方式之一,而加密方法多種多樣。這次我們將分享一種簡單易行的加密技巧,供大家參考使用。1、 在百度搜索強傑隱身俠下載,下載...
隱身俠的軟硬件區別 - 天天要聞

隱身俠的軟硬件區別

隱身俠是保障信息安全的利器,可用於保護和備份電腦、U盤、移動硬盤及加密雲盤中的重要文件與私密數據。它能有效防範因設備維修、丟失、被入侵或外借等情況導致的信息泄露或數據丟失風險,助您掌控信息資產,提升工作效率。此外,U型隱身俠還兼具普通U盤的存儲功能。1、 從使用方式來看,硬件版需將購入的隱身俠硬件PCKII插...
文件夾加密秘籍:使用加密軟件保護數據安全 - 天天要聞

文件夾加密秘籍:使用加密軟件保護數據安全

接下來,小編將1、 下載並安裝隱身俠應用查看2、 打開瀏覽器,搜索隱身俠,下載並安裝軟件,操作簡單,所示。3、 雙擊圖標開啟隱身俠4、 安裝軟件後,會提示重啟電腦,請重啟後再啟動隱身俠以使其生效,所示。5、 登錄賬號(若無賬號,註冊一個即可)。6、 請輸入賬號與密碼,參照下圖。7、 創建新的保險箱8、 登錄後,點擊...
隱身俠操作指南:簡單易懂的使用方法 - 天天要聞

隱身俠操作指南:簡單易懂的使用方法

隱身俠是一款保護電腦和移動存儲設備中重要文件與隱私信息的新一代信息安全產品。它能輕鬆加密硬盤、U盤等存儲設備中的數據,已通過多項權威認證。產品外形酷似小型U盤,不僅可作為普通U盤使用,還能充當電腦信息安全的防護工具,簡單易用,一分鐘學會操作,是保障個人電腦隱私安全的理想選擇。1、 首次設置使用2、 平常操...
金舟截圖軟件圖片輸出格式設置方法 - 天天要聞

金舟截圖軟件圖片輸出格式設置方法

1、 在右側彈出欄中,點擊程序設置選項。2、 在程序設置窗口,點擊圖片輸出格式按鈕,於彈出選項中選擇所需格式,例如JPEG。3、 點擊確定按鈕即可完成操作(9777181)...
解決Win10系統下隱身俠無法安裝的問題 - 天天要聞

解決Win10系統下隱身俠無法安裝的問題

隱身俠——您的信息保密專家。它能有效保護電腦、U盤、移動硬盤以及加密雲盤中的關鍵文件和機密數據,防範因設備維修、丟失、被盜用或黑客攻擊導致的信息泄露與損失風險,助您牢牢掌控核心資源,讓工作與生活更加安心無憂。此外,隱身俠本身也可作為普通U盤使用,兼具實用性與安全性。1、 請檢查您的Win10系統是否已啟用本...