架構師修煉系列【SOA架構】

2020-09-19 12:04:18

SOA的背景

SOA 提出的背景是企業內部的 IT 系統重複建設且效率低下, 主要體現在:

  • 企業各部門有獨立的 IT 系統,比如人力資源系統、財務系統、銷售系統 ,這些系統可能都涉及人員管理,各 IT 系統都需要重複開發人員管理的功能
  • 隨著業務的發展,複雜度越來越高,更多的流程和業務需要多個IT系統合作完成
  • 各個獨立的 IT 系統可能採購於不同的供應商,實現技術不同,企業自己也不太可能基於這些系統進行重構

SOA詳解

為了應對傳統 IT 系統存在的問題, SOA 提出了 三個關鍵概念

  • 服務:所有業務功能都是一項服務,服務就意味著要對外提供開放的能力,當其他系統需要使用這項功能時,無須客製化化開發,服務可大可小,可簡單也可複雜
    例如,人力資源管理可以是一項服務,包括人員基本 資訊管理、請假管理、組織結構管理等功能;而人員基本資訊管理也可以作為一項獨立 的服務,組織結構管理也可以作為一項獨立的服務 。 到底是劃分為粗粒度的服務,還是 劃分為細粒度的服務,需要根據企業的實際情況進行判斷
  • ESB:Enterprise Service Bus,中文翻譯為「企業服務匯流排」。從名字就可以看出,ESB 參考了計算機匯流排的概念 。計算機中的匯流排將各個不同的裝置連線在一起,ESB 將企業中各個不同的服務連線在一起。因為各個獨立的服務是異構的,如果沒有統一的標準,則各個異構系統對外提供的介面是各式各樣的 。SOA使用ESB來遮蔽異構系統對外提供各種不同的介面方式,以此來達到服務間高效的互聯互通
  • 鬆糯合:鬆輯合的目的是減少各個服務間的依賴和互相影響 。因為採用SOA架構後,各個服務是相互獨立執行的,甚至都不清楚某個服務到底有多少對其他服務的依賴。如果做不到鬆禍合,某個服務一升級,依賴它的其他服務全部故障,這樣肯定是無法滿足業務需求的,但實際上真正做到鬆輔合併沒有那麼容易,要做到完全後向相容,是一項複雜的任務

典型的SOA架構

在這裡插入圖片描述
SOA 架構是比較高層級的架構設計理念,一般情況下我們可以說某個企業採用了 SOA 的 架構來構建 IT 系統,但不會說某個獨立的系統採用了 SOA 架構
例如,某企業採用 SOA 架構, 將系統分為「人力資源管理服務」「考勤服務」「財務服務」,但人力資源管理服務本身不會再使 用 SOA 進行設計,也不會再重新使用獨立的一套 ESB

SOA解決了傳統IT系統重複建設和擴充套件效率低的問題,但其本身也引入了更多的複雜性,SOA 最廣為人垢病的就是 ESB, ESB 需要實現與各種系統間的協定轉換、資料轉換、透明的動態路由等功能 。例如,下圖中ESB將JSON轉換為Java
在這裡插入圖片描述
下圖中 ESB 將阻ST 協定轉換為 RMI 和 AMQP 兩個不同的協定
在這裡插入圖片描述
ESB雖然功能強大,但現實中的協定有很多種,如JMS、WS、HTTP、RPC 等,資料格式 也有很多種,如 XML、JSON 、二進位制、HTML等 。ESB要完成這麼多協定和資料格式的互相轉換,工作量和複雜度都很大,而且這種轉換是需要耗費大量計算效能的,當ESB承載的訊息太多時,ESB本身會成為整個系統的效能瓶頸