本系列的 前二篇文章介绍了开发基于服务的集成模式所需的基本概念,并解释了各种组件和标准,它们统称为 Web 服务。Web 服务旨在处理大型企业中存在的一些异构性。不过,仅使用 Web 服务不足以提供解决异构性问题的完整解决方案。在这一部分(即本系列文章的第 4 部分)中,将了解企业服务总线,其与 Web 服务一起构成完整的基于服务的集成模式。
Web 服务旨在处理大型企业中遇到的一些应用程序异构性问题。不过,Web 服务本身并不能提供解决异构性问题的完整解决方案。特别是,它们不是为了处理服务使用者和服务提供者应用程序使用的传输协议之间不匹配的情形。与此不匹配 情况相关的问题是接口不匹配的问题。此类不匹配情况通常是由于合并和收购的结果造成的。一种可能的解决方案是根据新的 Web 服务重写这些应用程序,以消除这些不匹配的情况。但往往是没有足够的开发人员资源或者没有足够的时间来执行如此大量的任务。
在 这种情况下,企业服务总线 (ESB) 为解决大型系统中异构性问题提供一个优秀的解决方案。ESB 是面向服务的体系架构 (SOA) 中不可或缺的一部分。它提供了综合、灵活而且一致的集成方法。在 ESB 模式中,服务使用者和服务提供者不直接交互;而是通过总线进行通信的。该总线可提供许多功能,其中包括协议转换、数据转换和基于内容和上下文路由的核心功 能。您将了解在以下两部分中描述的这些功能和其他常见功能。
考虑使用 ESB 的另一个原因是,有时候出于合同或法律的原因必须保证消息的提交。在这些情况下,需要使用 Web 服务之外的服务。此类服务的一个示例是使用消息传递软件(例如 IBM® WebSphere® MQ 系列)的异步服务。通过在请求者和服务器端的网络上持久保留消息可以保证消息的提交。
通过阅读本系列第 2 部分中的对象请求代理 (ORB) 和异步消息传递,您可以了解到这两种技术都提供基于内容或上下文的某种形式的基本路由。这种基于内容或上下文的路由构成了 ESB 的框架。因此,通常使用的 ESB 类型有两种:
- 基于 ORB 产品的 ESB, 如 IBM WebSphere® Application Server。通常,这些产品在处理 Web 服务、XML 和 Java™ 远程方法调用 (RMI) 方面功能非常强大。使用这些产品的成本相当低而且非常易于设置。但是,对于大量事务和处理较为多样化的应用程序方面伸缩性较低。
- 基于异步消息传递软件的 ESB 产品, 如 WebSphere MQ。此类 ESB 产品的一个示例是 IBM WebSphere Message Broker。这些 ESB 产品在事务量和处理较为多样化的应用程序方面具有高度伸缩性。但是这些产品较为昂贵,并且需要的设置时间也较长。这两类产品通常具有互操作性。例 如,IBM WebSphere Enterprise Service Bus 可以与基于 WebSphere Message Broker 的 ESB 进行完全互操作。
基于内容的路由本身并不足以解决大型企业中的所有异构性问题。具体 来说,通信协议日益增多,包括 HTTP、HTTPS、Internet ORB 间协议(Internet Inter-ORB Protocol,IIOP)、Java 远程方法协议(Java Remote Method Protocol,JRMP)和传输控制协议(Transmission Control Protocol,TCP)。因此,您会发现服务使用者可能仅被设置为使用一种协议,但服务提供者更愿意使用不同的协议。如果没有将一种协议转换为另一种 协议的工具,则服务使用者很难与给定的服务提供者进行通信。与此需求相关的需求是使用者喜欢的数据格式可能与服务提供者使用的数据格式不同。因此,还需要 一种能够提供此数据转换的工具。总的来说,ESB 提供的最少功能包括:
- 基于上下文或内容的路由。
- 协议转换。
- 数据转换。
如果一个组件中包括这些最少功能,则该组件即成为提供虚拟化的服务总线,因此应用程序不需要直接相互通信。图 1 显示了此间接交互的示意图。
图 1. 通过 ESB 间接交互
ESB 和包括的这些功能提供了以下虚拟化类型:
- 位置和标识虚拟化:服务使用者不需要知道服务提供者的位置。另外,服务使用者也不知道服务的提供者是谁。多个服务提供者中的任何一个提供者都可以对某个请求提供服务。这还允许添加或删除服务提供者,且不会中断服务。
- 交互协议:服务使用者和服务提供者不需要共享同一协议或交互样式。例如,作为 SOAP over HTTP 传入的请求可以由仅使用 RMI over IIOP 的提供者提供服务。
- 接口:服务使用者和服务提供者不需要就通用接口达成一致。ESB 可以通过将请求消息转换为服务提供者所需的形式来协调这些差异。
这些方面的虚拟化使得 ESB 能够为服务提供者提供其实现的透明性,可以同时在开发和部署阶段向服务使用者透明地提供服务。ESB 负责向适当的服务提供者提交服务请求,服务提供者响应这些服务请求,而不需要知道这些请求来自何处。
此外,ESB 本身对使用者和提供者都不可见。应用程序逻辑可以使用或提供某个服务,但不知道连接是直接的还是已由 ESB 使用。因此,是否使用 ESB 进行连接的决定是一个在部署时的决定。不需要对应用程序代码进行任何更改。
ESB 支持应用程序之间的多个交互类型,包括:
- 同步(或请求/响应)
- 异步(或单向)
- 发布与订阅
ESB 还支持参与者的非功能规范的需求,而且 ESB 可以提供相应服务来实现服务参与者的这些需求。这些非功能需求通常称为服务质量 (QoS) 需求,并可能包括性能和可靠性、数据加密、服务请求授权以及服务交互的自动审核。
您通常还可能在 ESB 模式的特定实现中发现一些可选功能。这些附加功能与核心功能统称为中介模式。ESB 中包括的附加功能有:
- 数据增强:增强来自外部源的消息有效负载,以便与服务提供者的需求相匹配。外部源可能是数据库。
- 分发:多个使用者应用程序可以订阅某个特定类型的消息和将这些消息分发到这些应用程序的 ESB。
- 相关性:相关性提供一种工具,可从多个消息或事件流中获取复杂事件。该工具依赖于模式识别规则和形成复杂输入消息的规则。
通常,ESB 实现中还包括一些实用功能。这些实用功能包括日志、异常/错误处理和监视功能。
要实现 ESB 的核心功能,您需要多个概念性组件。图 2 显示了这些最少组件示意图。
图 2. ESB 的组件
下面是这些组件及其功能的简要描述:
- 适配器:适 配器特定于每个输入和输出机制。输入或输出机制指定消息类型和传输协议。例如,有一个单独适配器处理涉及 SOAP over HTTP 的 Web 服务。类似地,有一个单独的适配器处理通过 IIOP 的 Java RMI 调用。这些适配器允许 ESB 使用各种输入和输出机制与应用程序交互。您需要使用适配器进行同步交互(如 HTTP 和 Web 服务)和异步调用(如 WebSphere MQ 输入和输出节点)。
- 分配器:分配器组件相当于 ESB 的集中输入点。它从适配器接收请求,并将该请求传递给任务分配器以便进行路由和消息转换工作。分配器还提供基本的基于内容的路由功能。
- 请求处理程序:每个服务都有自己的请求处理程序。请求处理程序向路由引擎提供特定于服务的参数,然后将请求提交到路由引擎执行适当的任务。
- 数据转换器:数据转换器是 ESB 的关键元素。它转换请求中收到的数据以匹配调用服务所需的数据。换句话说,它是连接服务接口之间的桥梁。
- 路由引擎和任务分配器:这两个组件负责转换请求并将其路由到服务委托。
- 服务委托:委托是提供者的特定于终端的组件,这些组件使用适配器与服务提供者终端通信。委托提供关于与提供者终端通信的语义的较粗粒度的抽象;因此,它们特定于终端。另一方面,适配器对较细粒度的协议机制进行抽象化以连接到终端。
现在谈论实际的部署问题,注意,已知共有四种部署 ESB 的模式。这些模式和应使用每种模式的条件是:
-
全局 ESB:该模式要求单一的 ESB,适用于小型企业或单个业务部门(Line Of Business,LOB)。在此模式下,向所有参与者提供所有服务。
图 3. 全局 ESB
-
直接连接的 ESB:该 模式涉及多个直接连接的 ESB。此模式使用一个公共注册中心,因此服务在整个企业中可视。例如,可以使用此模式将一组打包的应用程序(如 SAP 应用程序)连接到企业的其他应用程序。这些打包的应用程序通常使用自己的 ESB 连接不同的模块,如客户关系管理 (CRM) 和企业资源规划 (ERP)。例如,SAP 模块由自己的 ESB(称为 NetWeaver)连接。例如,NetWeaver 可以连接到 WebSphere Enterprise Service Bus 来提供 SAP 应用程序和其他应用程序(C++、Java 或 J2EE)的连接性。
图 4. 直接连接的 ESB
-
联合 ESB:它们类似于由多个 ESB 连接的直接连接 ESB 模式。不过,参与 ESB 的其中之一与其他 ESB 有主-从关系,并控制参与者可以访问哪些内容。企业中希望与其他部门共享其服务的适度自主的部门可以使用第三种模式。
图 5. 联合 ESB
-
代理 ESB:在此模式中,使用代理作为连接的 ESB 之间的中介。每个 ESB 都有自己的注册中心,并控制除其自身域之外支持哪种类型的交互。开发并部署自己的服务但希望向企业的其他部门有选择地公开一组服务的自主部门可以使用此模式。
图 6. 代理 ESB
ESB 是一种体系架构模式,支持通信各方间的服务交互的虚拟化和管理。它提供服务提供者与请求者之间的连接性,方便他们即使在不精确匹配的情况下也可以进行交 互。此模式可以使用各种中间件技术来实现。功能最强大和最具伸缩性的 ESB 使用基于 WebSphere MQ 的 WebSphere Message Broker。不过,如果还需要考虑成本问题和易于设置性,则可以使用基于 IBM WebSphere Application Server 的 WebSphere Enterprise Service Bus。IBM 还提供了 WebSphere DataPower SOA Appliances 集成设备,它们可以提供附加的即用安全功能和 XML 处理。