以ESB為導向建立SOA是有害的

字號:

Bobby Woolf是《EntERPrise Application Integration Patterns》的合作者,也在IBM任職WebSphere SOA與J2EE顧問,他寫了一篇文章來質(zhì)疑把ESB當作SOA的實現(xiàn)基礎是否正當(參閱文后注釋*)。
    客戶常常希望單純構(gòu)建ESB,因為這樣可以避開難搞的業(yè)務需求,專心解決技術(shù)上的挑戰(zhàn)。單純構(gòu)建ESB是IT人員的夢想,這樣他們可以先建立ESB,然后指望以后會有SOA跟上來利用它。這種以ESB為導向的架構(gòu)丟掉了SOA的優(yōu)勢。這種架構(gòu)沒有產(chǎn)生業(yè)務價值。實際上,花費了成本卻沒有收獲直接的利益。
    Bobby的文章寫得很風趣。但引發(fā)的爭論是嚴肅的,而且自Dave Chappell發(fā)明出“連接優(yōu)先(Connectivity-First)”這個新詞組,爭論就愈演愈烈。跟契約優(yōu)先(Contract-First)這個詞組類似,部署ESB就像以“連接優(yōu)先”的方式開始你的SOA。Bobby認為以ESB為導向的架構(gòu)方式
    ……有其固有的缺陷,它建立的連接性可能根本就沒有人打算去用……只有當你實際需要一樣東西,才去實現(xiàn)它,決不要僅僅因為你預見到未來的需要。
    OASIS的《SOA Reference Model》并沒有確切提到“連接性(connectivity)”,但它提出了通訊基礎設施的概念:
    通訊基礎設施的主要任務是促進信息以及意圖的交換……特別是當交換的發(fā)生跨越了所有權(quán)邊界的情況下,對數(shù)據(jù)的解釋是一個關鍵問題。對數(shù)據(jù)的解釋必須在服務交互的參與者當中保持一致。
    習慣上SOA架構(gòu)參考,包括來自IBM的參考在內(nèi),總是把ESB放在一個顯著的地位上。Dave Chappell解釋了ESB在本質(zhì)上是一個服務容器,附帶有專門的通訊基礎設施,用來連接同處在一個容器內(nèi)的服務。
    服務容器是抽象的服務端點(endpoint)的具體表現(xiàn),它實現(xiàn)了服務接口。服務容器是一個能讓服務組件寄宿其中的遠程進程。從這個角度來說,它跟應用服務器容器有幾分相似,只不過它的專門目的是寄宿集成的服務。
    別讓Bobby的幽默掩蓋了他的觀點。Bobby不同意Joe McKendrick和Dave Linthicum把他的觀點解讀成ESB完全無用。而我自己多年前也寫過一系列文章,題為《跳下公共汽車(總線),打輛的》,我在其中質(zhì)疑了對通用的通訊機制的需要。不過,帶有專門的通訊基礎設施(如Dave Chappell所描述)的服務容器仍然是非常有用的,JBI規(guī)范的領導Ron Ten-Hove解釋說:
    ·服務容器常常把各種IT資產(chǎn)連接到ESB上,
    而ESB:
    ·具有可靠的消息系統(tǒng),以供服務容器交互。
    ·提供消息轉(zhuǎn)換服務。
    -