面向服務的體系結構(SOA)深度解析
面向服務的體系結構(Service-Oriented Architecture, SOA)是一種以服務為核心的軟件架構范式,通過標準化接口實現異構系統間的高效集成與協作。以下從概念定義、發展脈絡、技術演進、參考架構四個維度,結合行業實踐與技術細節展開系統解析。
15.1 SOA的相關概念
15.1.1 SOA的定義:應用框架與組件模型的雙重內涵
1. 應用視角的定義
SOA是一種業務驅動的應用框架,其核心是將企業業務功能抽象為可復用的“服務”,通過標準化接口實現服務的靈活組合與部署。這些服務具備以下特性:
- 平臺無關性:服務接口獨立于硬件、操作系統和編程語言,支持跨平臺調用;
- 松耦合:服務間通過契約交互,避免強依賴,降低系統變更成本;
- 業務對齊:服務直接映射業務功能,支持業務流程的快速調整與創新。
2. 軟件原理視角的定義
SOA是一種組件模型,其核心是通過定義良好的接口和契約將應用功能單元(服務)連接起來。接口采用中立的描述方式(如WSDL),確保不同技術棧實現的服務可互操作。這種模型推動了服務的標準化與復用,例如:
- 企業可將客戶管理、訂單處理等功能封裝為獨立服務,供多個業務系統調用;
- 第三方開發者可通過開放API集成企業服務,拓展生態邊界。
15.1.2 業務流程與BPEL:服務編排的核心工具
1. 業務流程的數字化映射
業務流程是現實業務邏輯的計算機化表達,傳統依賴自然語言描述,存在歧義性與執行效率問題。SOA通過**BPEL(Business Process Execution Language for Web Services)**實現流程的標準化建模與自動化執行。
2. BPEL的核心功能
BPEL是一種基于XML的流程定義語言,其核心價值包括:
- 服務編排:將多個Web服務組合為復合服務,例如將“訂單創建→庫存校驗→支付處理”編排為端到端流程;
- 流程自動化:通過預定義規則控制流程執行順序,支持異常處理與事務補償;
- 跨系統集成:屏蔽服務底層實現細節,實現跨企業、跨平臺的流程協同。
15.2 SOA的發展歷史
15.2.1 技術演進的三個關鍵階段
1. 萌芽階段(20世紀90年代末-2000年):XML奠定基石
- 核心技術:XML(可擴展標記語言)提供跨系統數據交換的統一格式,XSLT實現數據轉換,XMLSchema保障數據完整性;
- 局限:缺乏統一的服務描述與調用規范,服務復用停留在數據層。
2. 標準化階段(2000-2005年):Web服務三劍客崛起
- 核心標準:
- SOAP:基于XML的遠程過程調用協議,支持跨防火墻通信;
- WSDL:服務接口的標準化描述語言,定義服務操作與消息格式;
- UDDI:服務注冊與發現中心,實現服務的動態查找與綁定;
- 應用爆發:電子商務推動Web服務普及,企業開始將核心業務功能封裝為Web服務對外提供。
3. 成熟應用階段(2005年至今):從Web服務到微服務
- 技術突破:
- SCA/SDO/WS-Policy:SCA(服務組件架構)定義編程模型,SDO(服務數據對象)統一數據訪問,WS-Policy規范服務交互策略;
- 企業服務總線(ESB):通過消息路由、協議轉換等功能實現服務集成,如IBM WebSphere ESB;
- 演進方向:SOA向更細粒度、更靈活的微服務架構過渡,解決傳統SOA的復雜性與供應商鎖定問題。
15.2.2 國內外發展對比:從系統整合到生態構建
1. 美國:遺留系統重構為主
- 核心任務:通過SOA整合主機時代積累的遺留系統,例如將銀行核心交易系統封裝為服務,與互聯網渠道集成;
- 技術挑戰:需平衡服務復用與業務靈活性,避免過度設計導致的復雜性。
2. 中國:新建與整合并行
- 典型場景:
- 電信、金融行業:以SCA/SDO為標準,構建細粒度服務(如用戶認證、計費),通過ESB實現系統間松耦合集成;
- 制造業:上汽集團投入3000億元建設汽車SOA平臺,整合中央域控制器與微服務,支持“軟件定義汽車”生態;
- 階段特征:部分領域仍處于XML標準化階段,少數領先企業已進入微服務化實踐。
15.2.3 微服務化發展:SOA的輕量化演進
1. SOA與微服務的核心差異
維度 | SOA | 微服務 |
---|---|---|
服務粒度 | 粗粒度(如訂單管理服務) | 細粒度(如訂單創建、庫存校驗獨立服務) |
接口協議 | 基于SOAP/WSDL的重量級協議 | 基于HTTP/RESTful的輕量級協議 |
部署方式 | 集中式ESB集成 | 去中心化容器化部署(Docker/Kubernetes) |
治理模式 | 集中式服務注冊與管理 | 分布式服務發現(如Eureka) |
2. 微服務解決的核心問題
- 復雜性:通過拆分服務降低系統耦合度,例如將單體電商系統拆分為用戶、訂單、支付等獨立服務;
- 供應商鎖定:采用開源技術棧(如Spring Cloud)替代專有中間件,降低對廠商的依賴;
- 敏捷性:支持獨立發布與彈性擴展,例如促銷期間單獨擴容訂單服務。
15.3 SOA的參考架構
IBM的Websphere業務集成參考架構(如圖15-2所示,以下稱參考架構)是典型的以服務為中心的企業集成架構,接下來的討論都將以此參考架構為背景進行。
以服務為中心的企業集成采用“關注點分離(Separation of Concern)”的方法規劃企業集成中的各種架構元素,同時從服務視角規劃每種架構元素提供的服務,以及服務如何被組合在一起完成某種類型的集成。這里架構元素提供的服務既包括狹義的服務(WSDL描述),也包括廣義的服務(某種能力)。從服務為中心的視角來看,企業集成的架構(如圖15-2所示)可劃分為6大類。
(1)業務邏輯服務(Business Logic Service):包括用于實現業務邏輯的服務和執行業務邏輯的能力,其中包括業務應用服務(Business Application Service)、業務伙伴服務(PartnerService)以及應用和信息資產(Application and Information asset)。
(2)**控制服務(Control Service)😗*包括實現人(People)、流程(Process)和信息(Infor-mation)集成的服務,以及執行這些集成邏輯的能力。
(3)連接服務(Connectivity Service):通過提供企業服務總線提供分布在各種架構元素中服務間的連接性。
(4)業務創新和優化服務(Business Innovation and Optimization Service):用于監控業務系統運行時服務的業務性能,并通過及時了解到的業務性能和變化,采取措施適應變化的市場。
(5)開發服務(Development Service):貫徹整個軟件開發生命周期的開發平臺,從需求分析,到建模、設計、開發、測試和維護等全面的工具支持。
(6)IT服務管理(IT Service Management):支持業務系統運行的各種基礎設施管理能力或服務,如安全服務、目錄服務、系統管理和資源虛擬化。
1. 連接服務——企業服務總線(ESB)
ESB是消息中間件的發展,以“總線”模式簡化應用集成拓撲,基于開放標準支持服務間動態互聯互通,核心特征包括:
- 服務元數據描述與注冊管理;
- 數據傳遞、轉換及同步/異步等交互模式支持;
- 服務發現、路由、匹配與選擇(解耦請求者和提供者);
- 高級能力:安全支持、服務質量保證、可管理性、負載平衡等。
ESB是架構模式(非特定技術/產品),需工具和運行時支持(如IBM的WebSphere ESB、WebSphere Message Broker及WebSphere Integration Developer)。
2. 業務邏輯服務
用于整合已有和新開發的應用,及外部業務伙伴系統:
-
整合已有應用——應用和信息訪問服務
通過適配器技術將已有系統(遺留應用、數據存儲等)的業務邏輯和數據包裝為ESB支持的格式,包括:- 可接入服務(On-Ramp Service):通過單向、請求/應答等模式包裝功能,供ESB訪問;
- 事件發現服務(Event Detect Service):發布系統變化事件到ESB。
-
整合新開發的應用——業務應用服務
支持新應用的開發和集成,包括:- 組件服務:管理可重用組件的運行時容器(如持久化、安全);
- 核心服務:提供內存管理、負載均衡等運行時支持;
- 接口服務:支持與其他系統(數據庫、消息系統等)的集成。
-
整合客戶和業務伙伴(B2C/B2B)——伙伴服務
支持與外部系統的異構集成,包括:- 社區服務:管理業務伙伴,支持集中式/自我管理;
- 文檔服務:支持文檔格式交換及流程管理(如RosettaNet、EDI);
- 協議服務:提供傳輸層支持(認證、路由等)。
3. 控制服務
用于數據整合、流程整合和用戶訪問整合:
-
數據整合——信息服務
解決數據分布性和異構性問題,包括:- 聯邦服務:聚合關系型/非關系型數據,數據仍獨立管理;
- 復制服務:實時復制遠程數據,本地維護副本;
- 轉換服務:實現數據源到目標格式的轉換;
- 搜索服務:支持結構化(數據庫)和非結構化(PDF)數據查詢。
-
流程整合——流程服務
將關聯業務活動組成自動化流程,包括:- 編排服務:控制流程執行,支持錯誤恢復;
- 事務服務:保證事務特性(短流程用兩階段提交,長流程用補償);
- 人工服務:集成人工活動,支持任務分派、授權等。
-
用戶訪問整合——交互服務
確保信息按需傳遞給用戶,包括:- 交付服務:支持多設備(桌面、PDA)和方式(圖形、語音)的交互;
- 體驗服務:通過個性化、單點登錄等增強用戶體驗;
- 資源服務:管理交互組件(安全配置、界面皮膚等)。
4. 開發服務
支持企業集成的全生命周期開發,需標準工具框架和服務開發技術(如SOMA方法學、SCA/SDO編程模型),按開發者角色分為:
- 建模服務:構建可視化業務流程模型;
- 設計服務:分解模型為服務組件并設計開發;
- 實現服務:部署服務組件到生產環境;
- 測試服務:支持單元測試和集成測試。
5. 業務創新和優化服務
以業務性能管理(BPM)為核心,支持業務優化,包括:
- 公共事件框架服務:激發、存儲和分類IT及業務事件;
- 采集服務:過濾和分析事件,識別關鍵信息;
- 監控服務:計算和管理關鍵性能指標(KPI),支持業務流程迭代優化。
6. IT服務管理
保障業務流程和服務的安全、高效運行,包括:
- 安全和目錄服務:企業級用戶認證、授權(如單點登錄);
- 系統管理和虛擬化服務:管理服務器、存儲、網絡等IT資源,部分服務通過ESB與其他服務集成,滿足性能、安全性等需求。
15.4 SOA主要協議和規范
Web服務是實現SOA服務的核心手段,相關標準多以“WS-*”為前綴,核心協議和規范包括以下幾類:
15.4.1 UDDI協議
UDDI(統一描述、發現和集成協議)是一個開放的行業計劃,核心作用是:
- 幫助商業實體彼此發現,定義互聯網上的交互方式,并在全球注冊體系中共享信息;
- 作為Web服務集成的體系框架,提供服務描述與發現的標準規范;
- 基于XML、HTTP、DNS等標準實現,早期采用SOAP規范的早期版本支持跨平臺設計。
15.4.2 WSDL規范
WSDL(Web服務描述語言)是描述Web服務及交互方式的XML語言,由Ariba、IBM、微軟等聯合提出,用于定義服務的三個核心屬性:
- 服務功能(提供的操作/方法);
- 訪問方式(數據格式和協議);
- 服務位置(如URL)。
WSDL文檔結構分為服務接口(Service Interface)和服務實現(Service Implementations),核心元素包括:
types
:定義服務使用的數據類型(基于XML Schema);message
:抽象定義通信消息的數據結構,引用types
中定義的類型;operation
:描述服務支持的操作(如請求/響應消息對);portType
:抽象集合,定義某個訪問入口點支持的操作;binding
:將抽象接口(portType
)綁定到具體協議和數據格式;port
:定義單個服務訪問點(綁定與網絡地址的組合);service
:包含一組相關的port
,代表服務訪問點的集合。
15.4.3 SOAP協議
SOAP是分布式環境中基于XML的信息交換協議,包含四個核心部分:
- SOAP封裝(Envelope):定義消息框架,描述內容、發送者、接收者及處理方式;
- SOAP編碼規則:規定應用程序數據類型的實例表示方式;
- SOAP RPC表示:定義遠程過程調用(RPC)和應答的格式;
- SOAP綁定:指定使用底層協議(如HTTP)交換信息的方式。
SOAP設計目標是簡單性和可擴展性,不包含分布式垃圾收集、成批消息傳送等傳統消息系統特性。
15.4.4 REST規范
REST(表述性狀態轉移)是一種軟件架構風格,由Roy Thomas Fielding提出,核心是通過統一標準實現不同系統的信息交互,微服務常以REST API暴露服務。RESTful指遵循REST設計思想的架構或應用,核心概念包括:
- 資源(Resource):互聯網中可被訪問的一切事物(如訂單、圖片),通過URI標識;一個資源可對應多個URI,但一個URI僅對應一種資源。
- 表述(Representational):描述資源在某一時刻的狀態,常用格式有JSON、XML、HTML等,客戶端與服務端通過表述交互。
- 狀態轉移(State Transfer):
- 應用狀態:客戶端維護的用戶會話信息快照,可結合緩存降低服務端壓力;
- 資源狀態:服務端保存的資源狀態快照,未被修改時,同一請求返回一致表述;
- 狀態轉移通過HTTP方法(GET、POST、DELETE等)實現。
- 超鏈接:資源表述中嵌入相關資源的URI,便于客戶端發現和訪問其他資源,由客戶端維護,動態生成。
REST是設計風格而非架構,RESTful應用需結合HTTP、JSON、URI等標準,通過HTTP方法操作資源狀態。
15.5 SOA設計的標準要求
15.5.1 文檔標準化
SOA服務需具備平臺獨立的自我描述XML文檔,WSDL是服務描述的標準語言。
15.5.2 通信協議標準
服務間通過消息通信,消息格式通常由XML Schema(XSD)定義,支持未知服務提供者環境下的交互,可作為企業內部關鍵商業文檔的交換載體。
15.5.3 應用程序統一登記與集成
企業內部的SOA服務通過登記處(Registry) 維護(類似目錄列表),應用程序通過登記處查找和調用服務,UDDI是服務登記的標準。
15.5.4 服務質量(QoS)
每項SOA服務均關聯QoS,涵蓋安全、可靠性、策略等關鍵元素,相關標準由W3C和OASIS等組織制定:
-
可靠性:
- 關鍵需求:消息“僅且僅傳送一次”“保證傳送”等;
- 標準:WS-Reliability和WS-Reliable Messaging(由OASIS管理)。
-
安全性:
- 規范內容:認證交換、消息完整性和保密性;
- 實現:基于現有標準(如SAML),由OASIS制定Web服務安全規范。
-
策略:
- 服務提供者通過“策略斷言”定義通信要求(如Kerberos認證);
- 標準:WS-Policy用于標準化服務間的策略通信。
-
控制:
- 用BPEL4WS(或WSBPEL)定義服務組合的業務流程,支持異步通信、數據轉換等。
-
管理:
- 標準:WSDM(Web Services for Distributed Management),支持對多環境下服務的統一管理;
- 其他:WS-Coordination和WS-Transaction規范描述服務協作和事務處理。
15.6 SOA的作用
SOA的核心價值是解決企業“信息孤島”問題,實現系統整合與業務靈活響應,具體作用包括:
-
打破信息孤島:
- 傳統EAI方式需為每個應用組合配置“翻譯”(EAI Server),數量隨應用增加呈幾何級增長,難以擴展;
- SOA通過將應用和資源轉換為標準服務,實現資源共享,減少集成復雜度。
-
保護IT投資:
- 支持模塊化添加或更新服務,無需重構現有系統,適配新業務需求;
- 可將現有應用封裝為服務,通過標準接口(如WSDL)與外部系統交互,降低更換合作伙伴的成本(如零售商快速切換供應商系統)。
-
業務與IT同步:
- 決策者可基于業務策略制定流程,直接調用現有服務,無需關注底層集成細節,提升業務響應速度。
15.7 SOA的設計原則
SOA繼承了對象和組件設計的核心原則,以保證服務的靈活性、松耦合和可重用性,關鍵原則包括:
- 無狀態:服務不依賴提供者的狀態,避免請求者對提供者狀態的依賴。
- 單一實例:避免功能冗余,確保服務功能的唯一性。
- 明確定義的接口:
- 接口由WSDL定義,明確公共接口與內部實現的邊界;
- 服務定義需長期穩定,避免隨意更改;私有數據對使用者不可見。
- 自包含和模塊化:
- 服務封裝穩定的業務活動和組件,可獨立部署、版本控制和自我管理。
- 粗粒度:
- 服務數量不宜過多,通過消息交互(而非RPC)通信,消息量大但交互頻率低。
- 松耦合:
- 使用者僅依賴服務接口,無需關注服務的位置、實現技術或狀態;私有數據對使用者不可見。
- 可重用性:服務設計需支持多場景復用。
- 互操作性與策略聲明:
- 通過WS-Policy定義服務的安全要求、服務級別等策略,確保交互時的語義兼容性。
15.8 SOA的設計模式
15.8.1 服務注冊表模式
服務注冊表(Service Registry)是SOA設計與運行中的核心組件,主要用于服務的注冊、發現和治理,是策略執行的關鍵節點。
-
核心功能:
- 支持服務合同、策略和元數據的開發、發布與管理,提供服務注冊和發現的主控制點(策略執行點PEP);
- 存儲服務的配置、遵從性和約束配置文件,任何支持服務信息檢索的信息庫、數據庫等均可視為注冊表。
-
廠商分類:
- 純SOA廠商:專注于服務、策略和元數據管理,如Flashline、Infravio、SOA Software等;
- SOA平臺廠商:將注冊表作為集成套件的一部分(含應用服務器、中間件等),如IBM、Microsoft、Oracle、SAP等。
-
關鍵標準與集成:
- UDDI(通用描述、發現與集成)是主要注冊標準,但非唯一;多數廠商支持UDDI v3等開放標準,實現與第三方注冊表的集成。
-
SOA治理功能:
- 服務注冊:服務提供者向注冊表公布服務合同(含身份、位置、方法、策略等),通過權限控制確保服務發布的規范性;
- 服務位置:服務消費者通過注冊表查詢符合需求的服務,控制訪問權限和暴露的服務屬性;
- 服務綁定:消費者基于檢索到的合同開發代碼,實現與服務的綁定和交互,工具支持自動適配協議和接口;
- 配置文件管理:通過配置文件記錄服務在生命周期各階段的參數(如開發、測試環境的機器和參數),支持服務在不同階段的平滑遷移,部分工具含嵌入式工作流,確保流程規范化(如審查、驗證和退回機制)。
15.8.2 企業服務總線模式(ESB)
ESB源于解決傳統點對點集成的復雜性(如高耦合、難管理、復用度低),是支持SOA的基礎軟件平臺,以中間件形式實現服務間的標準化交互。
-
定義:由中間件技術實現的底層架構,支持異構環境中服務以消息和事件驅動模式交互,并提供服務質量(QoS)和可管理性。
-
交互過程:
- 服務請求者生成標準化請求消息,發送至ESB;
- ESB根據消息中的服務名/接口名查找目標組件,轉發消息并將結果逆向返回;
- 實現“位置透明”和“協議透明”:組件無需了解其他組件的位置和協議,僅通過總線交互,最大限度解耦依賴。
-
核心功能:
- 位置透明的消息路由和尋址;
- 服務注冊與命名管理;
- 支持多種消息傳遞范型(如請求/響應、發布/訂閱);
- 兼容多種傳輸協議;
- 支持多種數據格式及轉換;
- 提供日志和監控功能。
-
優勢:
- 降低系統互連復雜性,支持異步/同步交互;
- 基于標準技術,提升集成效率并降低成本;
- 為EAI、B2B提供理想支撐平臺,廠商通常以ESB為基礎,提供包含預制組件、開發工具的完整集成環境。
15.8.3 案例研究:協同企業服務總線(SynchroESB)
SynchroESB是基于SOA和ESB的服務整合平臺,由西安協同時光軟件公司與西北工業大學聯合研發,獲國家高新技術產業化計劃支持,其架構分為四層:
- 服務總線層:底層基礎,提供ESB核心功能(路由、消息處理等),支撐整個EAI環境;
- 數據轉換與適配器層:解決與被集成系統的連接和數據接口問題,實現外部應用接入總線;
- 流程整合層:連接不同應用系統實現協同,提供業務流程設計、監控和管理功能;
- 用戶交互層:為用戶提供統一信息服務入口,整合內外部分散信息。
- 核心優勢:
- 支持組件化構建業務流程,采用“粗顆粒”組件編程模型,降低復雜應用開發難度;
- 基于標準和SOA,實現跨企業的應用與流程集成;
- 分布式架構+集中式管理,利用現有業務系統快速組建解決方案,事件驅動架構提升業務響應速度。
15.8.4 微服務模式
微服務是SOA的演進,弱化傳統SOA中重量級的ESB,將SOA思想滲透到單個業務系統內部,實現徹底的組件化。
1. 微服務架構概述
微服務將大型應用拆分為多個獨立的小型服務,每個服務可獨立開發、管理和迭代,通過統一接口交互,核心目標是實現敏捷開發與部署。
- 核心優勢:
- 復雜應用解耦:按業務邏輯拆分,每個服務專注單一功能,降低復雜度,便于小團隊維護;
- 獨立開發與部署:服務擁有獨立進程,變更時無需編譯/部署整個系統,測試范圍小,降低生產風險;
- 技術選型靈活:去中心化選型,團隊可根據業務需求選擇合適技術棧,架構轉型風險低;
- 容錯性強:單個服務故障被隔離,其他服務可通過重試、降級等機制容錯,避免全局癱瘓;
- 松耦合與易擴展:服務獨立擴展,按需分配資源,降低水平擴展成本。
2. 微服務架構模式方案
微服務無固定開發模式,需結合業務場景設計,常見模式包括:
-
聚合器微服務模式:
- 聚合器調用多個微服務,處理數據后直接展示,或增加業務邏輯后發布為新的組合服務(從消費者轉為提供者);
- 變種“代理微服務”:客戶端不聚合數據,僅由代理根據需求選擇調用不同服務,負責請求委派和數據轉換;
- 變種“分支微服務”:允許同時調用兩個獨立的服務鏈,互不影響。
-
鏈式微服務模式:
- 服務按鏈傳遞請求(如A→B→C),下游服務合并結果后返回上游,采用同步消息傳遞;
- 限制:調用鏈不宜過長,避免客戶端長時間阻塞。
-
數據共享微服務模式:
- 適用于單體架構向微服務過渡階段,允許強耦合的服務共享緩存和數據庫,解決SQL反規范化導致的數據重復與不一致問題。
-
異步消息傳遞微服務模式:
- 用消息隊列(如ActiveMQ、RabbitMQ)替代同步REST API,實現異步業務邏輯,提升響應速度;
- 注意:可能增加系統復雜性和降低可用性,需謹慎選型。
3. 微服務架構面臨的問題與挑戰
-
分布式復雜性:服務間需通過RPC或消息通信,服務發現和調用鏈跟蹤難度大;
-
分區數據庫挑戰:不同服務可能使用獨立數據庫,受CAP原理限制,需放棄強一致性追求最終一致性,對開發人員要求高;
-
測試難度增加:測試需啟動所有依賴服務,復雜性遠高于單體應用;
-
運維挑戰:大規模部署中,監控、管理、擴容和分發難度大。
-
取舍原則:僅當現有架構無法擴展、數據庫增長過快,且團隊具備微服務思維時,收益才大于成本;否則無需盲目采用。
15.9 構建SOA架構時應該注意的問題
15.9.1 原有系統架構中的集成需求
構建企業級SOA架構時,需優先分析和整理原有系統的集成需求,核心原則是重用現有資源而非替換遺留系統,以降低成本和風險。
-
集成需求的范圍:
集成不僅限于組件化應用的集成,還需考慮以下具體類型:- 應用程序集成需求;
- 終端用戶界面集成需求;
- 流程集成需求;
- 已有系統信息集成需求。
-
關鍵注意事項:
- 不同企業的集成復雜度差異顯著(如航運EDI系統需處理大量數據源,集成需求復雜;部分企業數據源少,需求簡單);
- 架構師需全面評估所有可能的集成需求,確保架構能適應企業發展;
- 集成功能應由服務提供,而非依賴特定應用程序,以保證靈活性和可擴展性。
15.9.2 服務粒度的控制以及無狀態服務的設計
服務是SOA的核心元素,構建時需重點關注服務粒度和無狀態設計:
-
服務粒度的控制
- 推薦原則:外部暴露的服務采用粗粒度接口,內部服務可使用細粒度接口。
- 粗粒度接口:對應服務的完整執行(如網上商店的“提交購買表單”),保證外部請求者以一致方式使用服務,降低交互模式的易變性;
- 細粒度接口:實現粗粒度服務的內部操作(如“創建購買記錄”“更新數據庫”),提供靈活性但需避免直接暴露給外部(避免請求者難以適應頻繁變化)。
- 實現方式:通過BPEL將細粒度操作組合為粗粒度服務接口,平衡靈活性與一致性。
- 推薦原則:外部暴露的服務采用粗粒度接口,內部服務可使用細粒度接口。
-
無狀態服務的設計
- 核心要求:服務應是獨立、自包含的請求,不依賴前序請求的狀態或其他服務的上下文,即“無狀態”。若存在依賴關系,建議定義為業務流程(BPEL)。
- 實現機制:
- 推薦使用無狀態Session Bean實現粗粒度服務,通過Web Service技術暴露為外部可調用的服務(將Session Facade模型轉化為EJB的Web服務端點);
- 優勢:
- 利用現有EJB組件的業務邏輯,減少重復開發;
- EJB容器自動提供并發支持(串行化對Bean實例的請求)、安全與事務管理(無需手動編寫相關代碼);
- 支持集群和資源池化,提升系統可伸縮性和可靠性,應對高負載。
15.10 SOA實施的過程
15.10.1 選擇SOA解決方案
選擇合適的解決方案是SOA實施成功的前提,需從以下三方面考量:
-
全局規劃
- 全面評估現有系統:明確可復用資源、需改造部分、新增系統需求及預算;
- 分階段選擇工具和技術:根據實施步驟(如先改造某系統)匹配產品;
- 邊學習邊實踐:開發過程中積累經驗,逐步優化。
-
結合企業自身需求
- SOA的價值(如業務流程優化、創新)隨時間逐步體現,前期投資需著眼長期效益;
- 實施進度和資金投入取決于企業IT應用沉淀(如遺留系統數量)和目標層次(如基礎集成 vs 業務創新)。
-
技術考察
- 平臺選擇:優先考慮開放性和對標準的支持(如兼容WSDL、SOAP等);
- 實施方法:參考六大要素——業務戰略和流程、基礎架構、構建模塊、項目和應用、成本和效益、規劃和管理;
- 供應商選擇:評估產品是否匹配需求、成功案例、客戶評價及專業服務能力(如現狀分析、建設性建議)。
15.10.2 業務流程分析
業務流程分析是SOA實施的核心環節,包括建立服務模型和業務流程:
-
建立服務模型
通過三種方法發現和驗證服務候選者,形成服務目錄:-
自頂向下分解法:
- 從端到端業務流程入手,逐層分解至最小業務活動,結合業務組件模型(按職責劃分業務領域、組件)確定服務候選者;
- 進行變化分析,區分易變與穩定部分,確保架構適應未來變化,補充新發現的服務候選者。
-
業務目標分析法(目標服務建模):
- 從企業業務目標出發,分解為子目標,再分派給服務實現,形成“目標服務樹”,確保每個服務可回溯到具體業務目標(基于關鍵性能指標分析)。
-
自底向上分析法(遺留資產分析):
- 梳理已有系統(如遺留應用、套裝軟件)的功能模塊,發現重復或可復用的模塊,包裝為服務;
- 分析技術局限性,驗證服務實現的可行性。
-
-
建立業務流程
-
步驟1:建立業務對象
業務對象是數據處理的抽象組件,分為三類:- 實體業務對象:對應業務中的人、物、概念(如客戶、訂單);
- 過程業務對象:對應業務處理或工作流程(如訂單處理);
- 事件業務對象:對應系統操作產生的事件(如訂單提交事件);
- 價值:提升架構抽象層次,實現知識重用(如復用多貨幣處理對象)。
-
步驟2:建立服務接口
- 設計原則:接口包含語義相關的多個操作,避免過粗(少量服務含大量操作)或過細(單個服務含少量操作);
- 交互模式:優先無狀態接口(請求消息包含所有必要信息,不受調用順序影響),減少依賴;有狀態接口(如會話型)需謹慎使用。
-
步驟3:建立業務流程
- 流程定義:指定活動順序,包含輸入、輸出及業務價值(如技術文檔搜索流程);
- 建模要點:
- 分解為子流程,明確組件、服務、數據、策略及測量指標;
- 捕獲正常操作、異常及不同領域需求,使用工具(如IBM Rational Requisite Pro、WebSphere Business Integration Modeler)編碼模型;
- 定義控制流(連接活動與決策點),決策點基于業務規則(轉換條件)確定流程路線;
- 復用流程元素(可復用的流程段構件)加速建模,確保模型可被分析員(戰略決策)和開發人員(解決方案實現)理解。
-
補充