ESB调查

来源:互联网 发布:marksimos软件下载 编辑:程序博客网 时间:2024/06/10 00:55

最近项目要用到ESB,所以先花了些时间做调查对比,找了一些材料先在这里记下来,以后再慢慢修改补充。

 

一、ESB的概念

ESBEnterprise Service Bus,即企业服务总线)是传统中间件技术与XMLWeb服务等技术结合的产物,用于实现企业应用不同消息和信息的准确、高效和安全传递,ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素。

最低的ESB功能:

u  通信  

  提供位置透明性的路由和寻址服务

  控制服务寻址和命名的管理功能

  至少一种形式的消息传递范型(例如,请求/响应、发布/订阅等等)

  支持至少一种可以广泛使用的传输协议

u  集成

  支持服务提供的多种集成方式,比如 Java 2 连接器、Web 服务、异步通信、适配器等等

u  服务交互

  一个开放且与实现无关的服务消息传递与接口模型,它应该将应用程序代码从路由服务和传输协议中分离出来,并允许替代服务的实现。

ESB就是一个服务的中介,形成:服务使用者-> ESB服务Proxy-> 服务提供者的生物链,中介的作用在不同应用中各有不同;缺点就是天然的额外中转性能消耗,中央ESB的性能瓶颈和高可用性问题。

WebService只是解决了异构系统的调用,而SOA要解决的是系统()间的构件装配、依赖和引用。

 

二、ESB实现分类及简单介绍

 

1.ESB产品分类

1.1开源ESB实现

 

  • Mule ,很多时候更像一个Service Container,OpenSource界暂时第一。
  • WSO2 ,Axis2 背后公司的作品。
  • ServiceMix ,关注于JBI的实现。
  • JBoss ESB ,  Sun OpenESB 没有关注。

1.2开源轻量级ESB

 

  • Apache Camel ,一个嵌入式的Router类库。
  • Spring Intergration ,相当清爽轻量的Spring Style的Router。

1.3商业ESB

 

  • BEA AquaLogic ,作为ESB概 念比Mule纯粹,同时使用JMS作为message flow的底层,在Weblogic上实现HA,群集和监控管理界面。但路由编排再次走了图形编程+XML Context(XQuery)的老路,相当鸡肋。
  • IBM(Message Broker, Websphere ESB,DataPower)

2.ESB产品介绍 

 

在开源ESB家族中涌现出很多优秀的开源ESB,比如,MuleApache ServiceMix,Open [url][/url]ESB,Apache Synapse等。为了大家更好地了解它们,我作了简要地介绍。

 

2.1 Mule

它是一个轻量级的消息框架和整合平台,基于EIPEnterprise Integeration Patterns,HohpeWoolf编写的一本书)而实现的。Mule的核心组件是UMO(Universal Message Objects,从Mule2.0开始UMO这一概念已经被组件Componse所代替)UMO实现整合逻辑。UMO可以是POJO,JavaBean等等。 它支持20多种传输协议(file,FTP,UDP,SMTP,POP,HTTP,SOAP,JMS),并整合了许多流行的开源项目,比如Spring,ActiveMQ,CXF,Axis,Drools等。虽然Mule没有基于JBI来构建其架构,但是它为JBI容器提供了JBI适配器,应此可以很好地与JBI容器整合在一起。而 Mule更关注其灵活性,高效性以及易开发性。从2005年发表1.0版本以来,Mule吸引了越来越多的关注者,成为开源ESB中的一支独秀。目前许多公司都使用了Mule,比如Walmart,HP,Sony,Deutsche Bank 以及 CitiBank等公司。

 

官方网站:http://mule.codehaus.org/

 

2.2 Apache ServiceMix

它是JBI规范的一种实现。它包涵了许多JBI组件,这些组件支持多种协议,比如JMS,HTTP,FTP,FILE等。同时也实现了EIP,规则和调度。自从JBIJCP接收后,2005年末Apache ServiceMix才被Apache作为其卵化项目,到20079月,它已经成为Apache的顶级项目。ApacheServiceMix 也整合了其他的开源项目,比如Apache ActiveMQ,Apache CXF,Apahe Camel,Apache ODE以及Apache Geronimo

说起Apache ServiceMix,就会使我想到LogicBlaze公司。它曾经是Apache ServiceMixApache ActiveMQ的商业支持者。2006LogicBlazeIONA成功收购后,IONA负责为Apache ServiceMix提供支持和服务。同时IONA也将Apache ServiceMix作为FUSE平台中的一员,FUSE旗下还包括Apache ActiveMQ,Apache CXF,Apahe Camel,FUSE HQ

 

官方网站:http://servicemix.apache.org/

Fuse平台的官方网站:http://open.iona.com/products/fuse-esb/

 

2.3 Open ESB

前两个开源ESB都由开源社区提供支持,MuleCodehaus社区提供支持,ServiceMixApache社区提供支持。Open ESB是由SUN发起,现在作为Java.net的子项目。所有Open ESB的开发人员都来自SUN

如同Apache ServiceMix一样,Open ESB也实现了JBI规范。Open ESB可运行在由SUN支持的Glassfish应用服务中。同时SUNNetbeans IDEOpen ESB提供了拖拉式的开发工具,这是其他开源ESB不可匹敌的,尽管Mule也提供了基于Eclipse的插件工具,但目前仍然不够强大。

 

官方网站:https://open-esb.dev.java.net/

 

2.4 Apache Synapse

虽然Apache Synapse具备一些ESB所必备的功能,但是从本质上而言Synapse更是一个web服务仲裁框架,它是构建在Apache Axis2之上的。Synapse的关注点是路由,转换,消息验证以及基于web服务和xml标准的注册。它支持HTTP, SOAP, SMTP, JMS,FTP ,MTOM/XOPPOP3/IMAP/SMTP 等传输协议,还支持多种web服务规范(WS-*),比如WS-Addressing,WS-Security,WS-Policy以及WS- Reliable Messaging。在它的最新版本1.2中加入了对FIX(Financial Information eXchange,金融信息交换协议 ) Hessian  的支持。同时它还支持多种流行语言,比如Java, JavaScript, Ruby, Groovy等。

 

官方网站:http://ws.apache.org/synapse

 

2.5 JBoss ESB

JBoss ESB是基于JBoss公司的ESB产品Rosetta的。Jboss ESBJbossMQ作为其消息层,将JBoss rules为其提供路由功能, jBPM为其提供服务编排功能。足以见得JBoss的野心。

 

官方网站:http://labs.jboss.com/jbossesb/

 

2.6 WSO2

 

WSO2是基于Apache Synapse产品的,通过它可以在web服务,REST/POX服务以及遗留系统间连接,管理和转换服务交互。它还提供了一个基于AJAXESB管理控制台对其配置文件进行统计分析,管理(添加,删除以及修改等),和指定执行相应的配置文件。这在开源ESB中是非常少见的。

 

官方网站:http://wso2.com/products/esb/

 

2.7 OpenAdaptor

OpenAdaptor定位于EAI Enterprise Application Integration,企业应用集成)软件。它支持各种传输协议,如JMS, JDBC, IBM MQ Series, TIBCO Rendezvous, TCP/IP Sockets, SOAP, HTTP File等。其最新版本为openadaptor3,与先前版本相比,它完全重写了一边,保留了原有的功能,提升了其简单性。

 

官方网站:https://www.openadaptor.org/

 

2.8 Spring Integration

Spring Integration开箱即用的功能表现得很好,非常易于使用。开发用例非常引人注目:如果你已经被POJO和近年来测试友好的框架宠坏了,那这个框架也是你的拿手好戏。只要你愿意,你可以使用接口或标准框架类,你还可以完全为POJO和你的领域模型进行编码,或者,你可以将两者结合使用。尽管Spring Integration支持大量开箱即用的功能,但它对一些典型的适配器缺少支持,比如SFTP、HTTPS或AS2。目前,一些专有的解决方案能更好地支持这些需求。有些解决方案非常昂贵,所以你可以为Spring Integration试着改造第三方库、编写自己的适配器。如果你有兴趣,你会因为为Spring Integration编写适配器相当简单而感到惊喜。

 

官方网站:http://www.springsource.org/spring-integration/

 

三、ESB产品比较

1. servicemix/mule/open esb/xbus/openAdapter比较
1.1 servicemix
太大了,下载下了,编译其源代码,足足用了一个上午,而servicemix涉及到的jar包,也是超级恐怖的,居然连RFID都搞进来了,我顿时倒吸了一口凉气,从头到脚,一身冰凉!
原先想servicemix基于JBI实现,集群起来也非常方便,但是看着这个超变态的庞然大物,我完全没有信心去掌控它。

1.2 一看mule源代码,小巧玲珑而不失强悍,以四两拨千斤,这才是我想要的。在MULE里面,存在UMO(universal message object),它是Mule的一个关键的组件,这个特性我也非常喜欢,以后的动态消息就好做了。可喜的是,mule还有配置界面、管理界面,太兴奋了,给客户演示的时候,总不能演示一行行的命令吧?得有花花绿绿的的界面才行。

1.3 open esb有管理界面,也是比较庞大的东西。

1.4 Jboss esb功能是非常完备的,但是源代码就有200M,呵呵,比较头痛。

1.5 xbus是一个非常精致的esb,就是功能比较弱。

1.6 openAdapter是一个非常精致Adapter,已经在很多开源项目中使用。

 

2.Mule与Servicemix比较  

 

优点

缺点

Mule

1,架构简单清晰、容易上手;

2,它有非常广泛的传输器、路由器和转换器,且易于扩展;

3,Mule不需将消息转换成统一的格式,而只在需要时进行转换,提高了性能;

4,开发过程中无需关注Mule代码,只需通过配置即可将服务暴露,减少了侵入性;

5,文档清晰而完善;

 

1,没有实现任何ESB规范(但遵循了《Enterprise Intergration Patterns》与 SEDA(Staged Event-Driven Architecture));

2,不支持热部署(企业版支持);

 

说明:Mule选择不实现JBI的理由:为保持其轻量级和灵活性,提高效率和易用性。Mule提供了一个JBI适配器来与JBI容器保持联通性。

 

Service

Mix

1,基于JBI规范;

2,可以热部署;

3,支持Camel(可以用DSL去开发集成流程);

 

1,JBI规范带来了使用上的繁琐,且JBI规范没有得到太多的青睐,前途未卜;

2,过多依赖XML的配置;

3,由于所有消息要进行标准化处理,即生成和解析XML文件,所以会导致性能下降;

4,开发过程中需要实现框架特定接口(MessageExchangeListener)接收和处理上述标准消息,侵入性强;

5,文档不健全、不够清晰;

 

Spring Integration

 

1支持大量开箱即用的功能,易于使用

2, 非常轻量,与Spring框架和JEE的强大集成;

1对一些典型的适配器缺少支持,比如SFTP、HTTPS或AS2。

 

 

综上所述,Mule和Servicemix都实现了ESB的核心功能,都提供了广泛的可用组件和良好的扩展性,从功能上看差别不大,但从稳定性、易用性和性能上比较,Mule可能是更好的选择。

 

论坛中提到的:

目前,在开源ESB中最受欢迎的是MuleServiceMix。他们的社区版本都是免费的,企业版本30天使用。
企业版更稳定,社区版的bug较多,开源项目都有这个缺点。

Mule
的学习曲线较低,它的文档也比较详细,入门简单,架构清晰。Mule1.xMule2.x的变化不大,只是将UMO改成了componentMule不是基于JBI的,但提供了对JBI的支持的扩展。

ServiceMix
遵循JBI规范,它的组件可以和其他遵循JBI规范的ESB通用。但JBI规范比较复杂,目前只发布了JBI1.0,JBI2.0还在制定中,更期待JBI2.0的发布,它简化了很多JBI的内容,更加使用。

在实际应用中,如果你要遵循JBI规范的话,推荐使用ServiceMix3.2版本。但Mule使用起来更加方便。

 

引用自:http://www.mulesoft.org/mule-esb-best-choice-spring-integration

Mule ESB vs. Spring Integration

Recently, a new component called Spring Integration was added to the Spring Portfolio, which allows ESB-like functionalities and EIPs to be created and managed within the Spring Framework.  Spring Integration takes what is known as an "application-centric" approach to integration.  

Rather than implement a shared bus, which allows all integration and messaging between components and systems to be managed, administered, and configured centrally, Spring Integration is aimed at providing "just a little" ESB-style integration to specific applications by providing frameworks for implementing common EIPs such as a message bus and simple routing.Spring Integration的目的是通过为实施提供如消息总线和简单的路由常见的电子信息产品框架“一点点ESB的风格融合的具体应用。

原创粉丝点击