1、什么是 ESB企业服务总线(Enterprise Service Bus,ESB)的概念是从面向服务体系架构(Service Oriented Architecture, SOA)发展而来的。SOA 描述了一种 IT 基础设施的应用集成模型;其中的软构件集是以一种定义清晰的层次化结构相互耦合。一个 ESB 是一个预先组装的 SOA 实现,它包含了实现 SOA 分层目标所必需的基础功能部件。在企业计算领域,企业服务总线是指由中间件基础设施产品技术实现的、 通过事件驱动和基于 XML 消息引擎,为更复杂的面向服务的架构提供的软件架构的构造物。企业服务总线通常在企业消息系统上提供一个抽象层,使得集成
2、架构师能够不用编码而是利用消息的价值完成集成工作。企业服务总线提供可靠消息传输,服务接入,协议转换,数据格式转换,基于内容的路由等功能,屏蔽了服务的物理位置,协议和数据格式。什么是 SOA面向服务的体系结构(Service-Oriented Architecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用 中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以一种统一和通用的方式进行交互。实现 SOA 的常用技术实现 SOA 架构的常用技术有 Web Ser
3、vices,JMS 和 BPEL 等。 ESB 技术。企业服务总线(Enterprise ServiceBus,ESB)是构建基于SOA 解决方案时所使用基础架构的关键部分,是由中间件技术实现并支持 SOA 的一组基础架构功能。它是一种为进 行连接服务提供的标准化的通信基础结构。基于开放的标准,为应用提供了一个可靠的、可度量的和高度安全的环境,并可帮助企业对业务流程进行设计和模拟。对 每个业务流程实施控制和跟踪、分析并改进流程和性能。目前各大 IT 公司都推出了基于自己的平台工具的 ESB 产品,如 IBM 的 WebSphere ESB、BEA的 AqusLogic Service Bus
4、等。除此之外,也出现了众多的开源 ESB 产品,如 Mule、ServiceMix 和 Apache Synapse 等。 web Services 技术。Web Services 主要是为了使原来各孤立的站点之间的信息能够相互通信、共享而提出的一种接口。该接口隐藏了服务实现的细节,允许通过独立于服务实现、独 立于硬件或软件平台、独立于编写服务所使用的编程语言的方式使用该服务。Web Services 可以通过HTTP、SOAP(XML)、SMTP 等协议的组合被访问,利用标准网络协议和XML 数据进行通信,具有良好的普适性和灵活 性,这使得基于 web Services 的应用程序具备松散耦
5、合、面向组件和跨技术实现的特点例5。Web Services 技术的主要目标是在各种异构平台的基础之上构建一个同样的、与平台与语言无关的技术层,各种应用都可以靠这个技术层来实施彼此的连接和集 成。 JMS 技 术。Java 消息服务(Java Message Service,JMS)是访问企业消息系统的标准 API,是 Sun 公司提出的 Java 消息服务规范,是用于访问消息系统的不依赖于某个具体厂商的 API,它提供给应用程序创建、发送、接受和渎取消息的接口,具体实现可以不同。JMS 技术采用异步通信模式,发送消息者将需要变更的数据消息提交到消息 平台后,就完成了自己的任务,就可以进行其他
6、的操作。不需要等待服务器端的消息处理结果。这时即使网络出现故障甚至服务器崩溃也不会造成数据的丢失或不一 致,消息会保存在消息队列中直到被最终接收。 SOA 的环境从下面的图中来看 SOA 是实现架构:图:SOA 部署环境图我们从下向上看: Business Systems:最下边也就是我们的业务系统,可以是 ERP,可以是 CRM 也可以是 OA 等我们正在使用的业务系统。 Low Level Services:低层次服务,就是我们直接暴露出来并没有经过加工处理的服务,比如说一个数据的抽取、一个业务模块的管理,也就是比较细粒度的服务。 Composite Services:综合服务,可以理解成
7、更高层次的服务,因为接口暴露出来后并不是直接给应用程序调用或者是给其它服务使用,当然那样也是可以的。我们对 低层次的服务进行必要的封装,形成高层次的服务,好处是显而易见的,安全性、应用逻辑的封装,必要的负载,也就是说,更高层次只需要关心他需要的接口,至 于如何实现,通过多少细粒度的服务完成这个不是它所关心的东西。 Orchestrated Business Processes:业务流程,也就是我们常说的BPM,有了上边的解释,这一部分就很清晰了,对于用户来说,比如他通过互联网交话费,他只需要确认自己 已经交成功就可以了,也就是说,页面上有了相应的提示,OK,他就可以去做其它事情了,而下边需要如
8、何处理,怎样走流程,就是按照 BPM 中设计好的流程执 行。 ESB:从图上看 ESB 放在了最左边,也就是上面几个应用的左边,而且全部包含在内,那么也就是说,ESB 处理的就是各个层次之间的通信,包括路由、协议转换和消息传递等。 Presentation Services:表示层服务,其实这个就很容易理解了,也就是我们对外暴露的接口或者服务内容,可以是一个 jms、一个webservice 调用、甚至是一个页面。 ESB 解决的问题当你的应用像下面一样时,这个时候就需要考虑使用 ESB 了,如图:图:未使用 ESB 的应用架构各个应用系统之间的调用形成了一张网,没有逻辑,随着业务的增加,维护
9、简直就是一场恶梦。图:使用 ESB 中介和代理之后各个应用的逻辑很清晰,每个应用都只需要关心如何暴露自己的服务,而调用的应用只需要知道如何调用服务,至于怎么做,去找谁,则完全交给 ESB 来完成。开源 ESB以下是几个比较流行且好用的开源的 esb: Mule ESB:MuleSoft 是 Mule ESB 创建者。Mule ESB 是一种广泛的开源ESB 下载。 WSO2 ESB:WSO2 ESB 旨在极端轻量型和可扩展性。它包括服务交互图形编辑和 XML 支持。 Apache ServiceMix ESB:Apache Service Mix ESB 以 Java 业务集成为标准为基础,支
10、持 Spring。 如何选择 ESB所有的 ESB 产品都应该可以构建和部署服务。包括对遗留系统的整理、消息的路由、消息格式的转换、执行协议的调解等。首先我们要看 ESB 是否具有以下特性: 互通性 抽象化 资源位置的虚拟化 扩展能力和管理服务 是否具有平台无关性,即跨平台 松耦合 等。上面列出的往往很评估,但是 ESB 本身具有的特性往往更容易识别和评估。ESB 所必须具备的功能: 路由 协议桥接 消息转换 服务代理托管 扩展的功能有: 资源适配器 可靠的消息传递 事件处理 交易的完整性管理 消息格式调解 负载均衡 消息验证 能力调解 等。其实,对于如何选择本身就是一个跟业务相关的问题,以确
11、定你是否选择 ESB以及选择什么样的 esb 来满足你的应用需求。1. 你选要集成三个或者更多的应用或服务吗?如果你需要在两个应用间通信,使用点对点集成更容易。 2. 未来你真的需要插入更多的应用吗?如果是需要的,那么你可以选择使用 ESB。 3. 你是否需要使用不止一种类型的通信协议?如果是多种协议,那么可以选择使用 ESB。 4. 你需要象分叉和聚集消息流或者基于内容的路由的消息路由功能吗?许多应用不需要这些扩展。 5. 你需要通过其他应用为消费发布服务吗?如果需要可以考虑选择 ESB。 6. 你拥有多于 10 个的应用要集成吗?如果需要可以考虑选择 ESB。 7. 你真的需要 ESB 的可扩展性吗?如果需要可以考虑选择 ESB。 以上仅仅是列出了想到的一些问题,具体的情况还需要根据具体的需求进行分析和处理,如果简单的业务其实不必“大炮打蚊子”,毕竟合适才是最好的!