1. 程式人生 > >SOA與EAI的比較

SOA與EAI的比較

在一家銀行基於ESB產品做企業應用整合專案,自然要言必稱SOA。客戶對SOA也比較感興趣,他們有EAI產品和專案經驗。一日問SOAEAI到底什麼區別,SOAEAI究竟多了哪些東西。當時就自己的理解和客戶描述了一番,回來總結整理成文。這裡不是給客戶做PreSale, 儘可能從本質的層面來分析比較這兩個技術解決方案和思想。花開兩朵,各表一支,我們先概括一下EAISOA。

1. EAI的概述 

    先來概括一下EAI的解決方案的中心思想。EAI企業應用整合即基於已有系統應用開發新的業務應用系統。面對的現狀是:

  • 各個系統的不同介面,可能是不同程式語言的API,訊息,或者訪問資料庫。
  • 不同系統的介面有不同的呼叫規範,即呼叫順序,上下文關係,Session等。
  • 不同的資料。包含資料型別,資料格式,資料業務語義的不同。
  • 新業務流程的編寫。

    那麼如果自己寫程式開發一個跨多個已有系統的新業務時,需要在新業務實現中呼叫這些系統的不同介面,需要做這些系統之間的資料轉換。這是一個很大而且煩瑣的工作。可能在程式中既要呼叫Java介面,又要呼叫C++介面;可能要在這些系統兩兩之間做資料轉換,需要做C2n=n(n-1)/2次轉換。顯然這不是一個好的方式。 

    為了簡化這些工作,EAI平臺的解決方法是:

  • 定義了中間層資料型別,資料格式,介面規範,介面通訊方式和通訊協議。
  • 平臺去做已有系統和中間層之間的資料格式轉換。
  • 對已有系統介面的封裝,提供統一的介面。
  • 使用圖形工具進行流程編排,編寫資料轉換和對映規則。由EAI平臺引擎來執行。

    EAI中心的解決方案和思想是制定統一的資料和介面定義,使EAI應用的開發者能夠使用一種資料和介面定義來實現新的業務,由平臺來做統一的資料和介面與已有系統各種不同的資料和介面之間的適配。一般EAI軟體平臺都包含兩類產品:流程編排和驅動工具+介面卡。

  • 介面卡的主要功能是做已有系統和中間層之間的資料轉換;已有系統介面呼叫的封裝,統一介面和已有系統介面的適配。
  • 流程工具的主要功能是基於呼叫介面卡功能操作,編排自動的操作流程,編寫各個操作之間的資料計算和對映,引擎來執行這些流程。
     

    例如TIBCO的EAI平臺包含兩個產品流程工具Business Works, 介面卡Adapter。簡單的介面卡包含在Business Works中,提供一些簡單操作的封裝,如檔案操作,JMS訊息收發等;複雜介面卡封裝複雜的技術,軟體或者系統,如CORBA,MQ , SAP等,複雜介面卡有獨立於Business Works的引擎,兩者通過訊息中介軟體互動。Business Works提供這些操作的流程編排,操作之間基於XSLT的資料對映。

TIBCO EAI平臺結構圖 

2. SOA概述

    SOA不是一個產品,而是一個構建企業應用和整合企業已有系統的指導方法和思想。它將企業應用系統看作一個分散式系統,由很多獨立的,提供一定業務功能的服務組成。服務彼此通過標準的介面協議相互呼叫,可以方便地將多個服務編排組成一個新的業務流程。當出現新的業務需求時, 不需要從零開始實現, 只需將已有的服務進行編排裝配來實現新業務。快捷地實現新業務需求是企業保持競爭力,在未來高度競爭,服務專業化,定製化的環境下生存發展的關鍵所在。在設計上,SOA需要一個方法論來指導如何把一個系統劃分為粒度合適,高可複用性的服務集合;在技術上,SOA同樣要解決異構服務介面之間的互聯互通問題,連相容各種已有的資料和介面標準,來連線各種已有軟體和系統。為此SOA需要做的工作有:

  • 定義統一的服務介面描述,介面規範,介面訪問策略。 
  • 支援多種服務介面通訊方式和通訊協議。 
  • 支援多種服務流程邏輯實現方式 ,BPEL , java, C++ 。 
  • 支援多種已有元件技術,Web Service, EJB, COM,CORBA等。可以通過服務介面調  用元件功能,也可以通過元件介面呼叫服務功能。 
  • 定義統一的資料型別和資料格式。定義資料物件模型。 
  • 提供統一的資料訪問介面,支援多種型別的資料,關係資料庫記錄,EJB Entity Bean 。可以使用標準服務介面訪問不同型別的資料。 
  • 提供業務建模工具,定義企業資源,組織結構,業務流程。

    SOA技術提倡開放性的規範和標準,一系列屬於SOA範疇的規範和標準完成了以上所列的工作。

  • 服務元件架構規範-------SCA(Service Component Architecture) 定義了服務的元資料描述語法,包括服務介面(Interface),服務屬性(Property),服務實現方式(Implementation),服務訪問策略(Policy),服務通訊方式和通訊協議(Binding),服務之間的呼叫和被呼叫關係(Service and Reference)等。 
  • 服務資料訪問物件規範---SDO (Service Data Object)定義了統一的資料型別,資料格式,統一的資料訪問介面支援多種已有型別的資料,如關係資料庫記錄,EJB Entity Bean等。 
  • 服務流程編排執行規範---BPEL(Business Prosess Execution Language)定義了基於已有服務編排實現邏輯流程的語法。 
  • 服務實現規範-----------JBI (Java Business Integration) JBI是JAVA服務執行平臺實現的設計規範,定義了一組平臺提供商需要遵循的服務提供方介面。 
  • Web服務介面定義規範----WSDL(Web Service Definition Language)服務介面定義規範,描述了介面的輸入,正常輸出,異常輸出。 

    SOA平臺的主要組成是BPM+ESB。BPM,業務流程管理(Business Process Management )。業務流程對應於企業真正的業務實現,滿足一定的業務需求。業務流程層面, 有以下的一些概念: 組織機構 (Organization), 業務角色(Role), 業務事件(Business Event),自動業務和人工業務,工作列表,執行規則等。 業務流程是由服務編排組合實現而成,服務提供確定的功能,不限制實現方式和介面訪問方式。服務可以用來實現一定的業務功能,也可以封裝已有系統的介面,呼叫已有系統的功能;企業服務匯流排(Enterprise Service Bus)是服務的開發,執行管理平臺。支援服務的建立,註冊,部署執行,監控治理。目前多數的BPM提供BPEL引擎,ESB支援SCA和SDO規範。     對比EAI平臺可以看到,ESB做了標準資料和介面到各個技術和系統的資料和介面,兩者之間的適配工作,BPM提供了基於基本操作或者服務的流程編排和驅動。SOA和EAI從技術角度來看,層次結構相同,解決方式一致。     例如TIBCO的SOA平臺包括最新的ESB產品Active Matrix, 和BPM產品iProcess。Active Matrix支援SCA規範,同時和已有的Business Works 和Adapter產品相容。Adapter可以封裝為服務執行在Matrix,作為連線已有系統的基礎服務;Business Works 支援BPEL,可以將執行在Matrix上的多個服務編排出新的流程,同時這個流程可以作為更高一級的元件服務或者業務服務執行在Matrix上。TIBCO的SOA平臺結構圖 

3. SOA和EAI的相同點

  • 在技術層面有統一的資料和介面定義,可以方便連線各個異構系統。 
  • 都相容各元件技術(CORBA,COM,EJB),遠端呼叫技術(RMI)。 
  • 提供將簡單服務或者操作編排組織成更復雜的服務或者操作。

    從技術角度上講,兩者是很類似的。 

4. SOA和EAI的區別

  • SOA提供了開放的規範和標準:資料定義SDO,介面定義SCA,服務編排BPEL; EAI的規範和標準都是各個EAI平臺廠商私有的。 
  • SOA服務呼叫時可以動態繫結服務。對於EAI來說,呼叫是設計時靜態繫結的。 
  • SOA提供的服務介面是開放的,可以在SOA平臺外以異構的介面呼叫SOA平臺上的服務,如可以使用EJB介面呼叫SOA平臺上的服務。EAI的介面是私有的,只能在EAI平臺內部呼叫,EAI提供只一種標準的介面來呼叫異構系統的功能。 
  • 從設計思想角度,SOA旨在基於分散式的高可複用性服務集合來構建企業應用系統;EAI只提供連線手段,流程編排手段,在設計思想方式上不做任何限制。 
  • SOA的服務分業務服務,基礎服務多個層次;EAI中的介面卡相當於封裝已有系統的基礎服務。 

    EAI平臺互聯不同的元件技術和產品,它使用與SOA類似的技術方式實現,即制定統一的資料和介面定義;SOA提供了一種開放的標準的異構介面互聯互通技術,應用這種技術,SOA平臺可以提供連線已有元件技術和軟體產品的適配性基礎服務。

    SOA強調服務的複用性,實現異構服務介面的互聯互通。EAI強調整合異構系統,把各個已有系統的異構介面封裝為統一的介面。EAI不強調服務複用,但也可以用SOA的思想配以EAI平臺來設計開發企業應用。相當於用C語言也可以寫面向物件的程式,雖然不如直接使用Java方便。     在設計層面,SOA將應用系統劃分為高可複用的服務組成的集合。服務分業務服務,元件服務和基礎服務幾個層次。設計思路更強調從上到下,即從業務到技術;EAI提供介面封裝技術,自動流程的編排。介面卡相當於基礎服務。設計思路一般是從下而上,即從技術到業務。技術層面,SOA是舊的元件技術和EAI技術的組合和升級。     所以實施SOA專案,最主要的還是在設計層面上如何把業務系統劃分為粒度合適,高聚合低耦合,複用性好又兼顧效能的服務集合;於技術層面,SOA提供了開放的資料介面標準,方便異構系統的互通互連,和EAI功能相同,但更開放更靈活。 最後給SOA起一個技術層面的新名字“企業元件介面整合”。SOA=ECII (Enterprise Component Interface Integration) 。