原文地址:http://www.niujin.info/zblog/?p=5
一、ESB是什么及ESB要实现的核心功能
对于ESB的概念,有人把ESB看作一种具体的产品,有人把ESB看作是一种架构风格或是标准[1][12]。对于ESB的实现,有人认为应该是中心话的(如broker或hub的方式),有人认为应该是去中心化的(smart endpoint的方式)。尽管有这些分歧,但大多数人对于ESB所必须实现的核心的功能意见一致[1]: Invocation——同步和异步的传输协议的支持、服务的定位和绑定 Routing——静态和动态路由、基于内容路由、基于策略路由、基于规则路由 Mediation——适配、协议转换、服务映射 Messaging—— 消息处理、转换、增强 Process choreography——负责业务逻辑的实现 Service orchestration——服务编排 Complex event processing——事件解释、事件关联、模式适配 Other quality of service——安全、可靠传输、事务 Management——监视、audit、日志、计量、管理、BAM二、ESB被公认要体现的特性
主要有: 操作系统、语言无关,例如应该支持.Net和Java应用的互操作; XML作为通信的语言; WS标准; 用于集成遗留系统的适配器; 基于某种标准的AAA(authorize, authenticate and audit)模型; 其余特性见[1][12]。三、ESB和MOM的异同
有人认为MOM是ESB的一部分,有人认为ESB本身不应当包含MOM。本文倾向于后一种观点。先看一段话: “An ESB that forces you to use yet another MOM implementation will merely add to the complexity of the architecture that must be managed.” [5] --- Christopher Warner & Olivier Moratin (SoftwareAG市场经理) 这篇评论 [5]还说,欲使用ESB(购买商业ESB或采用开源ESB)的企业应该起码有选择自己MOM的自由。其原因是假如使用ESB的前提是更换已有的MOM,那么架构复杂度增加带来的坏处将远大于ESB集成的好处。由此得出结论,ESB自身最好不包括MOM,这样才能达到最好的效果。四、ESB产品
开源的代表产品有ServiceMix和Mule。据不完全的了解,Mule和SM的主要区别是它们的架构:SM的架构基于JBI规范,而Mule的架构未基于JBI规范,目前来看似乎Mule的选择较为正确,其轻量级、灵活性、易用性应该要比SM好。无论选择Mule还是SM,都是可以互通的,因为Mule有JBI适配器,而SM对Mule也是完全支持的。两者详细比较见[3][4]。 商业的产品有 IBM WebSphere ESB, Oracle Enterprise Service Bus, JBoss Enterprise SOA Platform等。Mule
Mule的主要组成部分如下: Transport 负责消息收发和消息转换。包括Connector(消息收发)和Transformer(消息转换)。 Service 包括各种业务逻辑及路由功能。其中Component为业务逻辑,Router实现基于内容的路由及消息的过滤。 其他细节见[6][10]ServiceMix
ServiceMix的主要组成部分如下: NMR(Normal Message Router,标准消息路由器) 负责消息的传递。JBI环境中,传递的是标准的消息(Normalized Message),外部消息进入JBI前,需通过BC转换为标准消息。 SE(Service Engine,服务引擎) 架构的基础功能,如消息转换、服务编排、消息路由等,还实现一些其他常用的功能如rules engines, BPEL engines, XSLT engines, scripting engines, EJB continers等。 BC(Binding Component,绑定组件) 负责与外部应用进行通信,其功能类似适配器。该功能具体为(1)利用协议(如HTTP/S, JMS, FTP, SMTP, XMPP, RMI, CORBA, 文件系统等等)与外部应用进行通信;(2)对消息进行标准化处理(正反向)。 DC(Delivery channel,传送通道) 负责连接JBI组件(BCs和SEs)到NMR,提供诸如消息队列等功能。 简要说明: NMR是核心; 系统提供了常用的BC和SE,且用户可以根据需要来扩充他们; ServiceMix使用ActiveMQ提供远程、集群、可靠性和分布式故障转移等; Servicemix4实现了对OSGI的支持。 其他细节详见[6][7][8][9]。五、参考文献
[1] Wikipedia: Enterprise_service_bus http://en.wikipedia.org/wiki/Enterprise_service_bus[2] Wikipedia: Message-oriented middleware http://en.wikipedia.org/wiki/Message-oriented_middleware
[3] How does ServiceMix compare to Mule
http://servicemix.apache.org/how-does-servicemix-compare-to-mule.html
[4] Mule与Servicemix比较
http://www.360doc.com/content/11/0112/10/5469190_85934647.shtml
[5] De-MOM-ifying the ESB
http://www.looselycoupled.com/opinion/2005/warner-esb-infr0114.html
[6] “Architecture of Mule and ServiceMix” ---
architecture-mule-service-mix
[7] SOA开源技术——Apache Servicemix简介
http://www.pusuo.net/2010-07-10/111271133.html
[8] Wikipedia:ServiceMix
http://en.wikipedia.org/wiki/Apache_ServiceMix
[9] 灰狐:ServiceMix
http://wiki.huihoo.com/wiki/Apache_ServiceMix
[10] Mule ESB 学习笔记
http://www.oecp.cn/hi/wlo_o/blog/2160
[11] 企业服务总线(ESB)提供完美的集成
http://www.csairk.com/ite/appsoft/200604091750591488.htm
[12] 理解面向服务的体系结构中企业服务总线场景和解决方案,第 1 部分
http://www.ibm.com/developerworks/cn/webservices/ws-esbscen/index.html