用于企业服务总线的类 USB 通用端口类型,第 1 部分: 当前 ESB 存在的问题

了解当前 ESB 的基本功能及其存在的一些问题

在本期(本系列文章的第 1 部分)中,您首先将了解当前可用的企业服务总线 (ESB) 的基本功能。您还将了解在使用当前可用 ESB 中所碰到的一些难题。在本系列的后面几期,您将了解用于 ESB 的通用端口类型的新概念。通用端口为当前的 ESB 用户遇到的许多问题提供了解决方案。通用端口的工作原理类似于计算机的 USB 端口,将各种类型的设备连接到计算机。同样地,通用端口可用于将任何应用程序连接到 ESB 并间接地连接到其他应用程序。这些应用程序可以采用不同格式的服务来公开其部分或所有功能,并仍然使用单一端口类型。

Dr. Waseem Roshen, IT 架构师, IBM

Waseem Roshen 博士是俄亥俄州哥伦布市 IBM Global Business Services Enterprise Architecture and Technology Center of Excellence 的一位 IT 架构师。他致力于企业体系架构和集成方面的工作。他还是一位 Sun 认证的 J2EE 架构师,已经发表了 60 篇文章,并获得了 24 项专利。



2012 年 1 月 04 日

简介

在面向服务的架构 (SOA) 中,企业服务总线 (ESB) 是基础架构的一个至关重要的组件。ESB 用于间接地连接采用不同服务格式的应用程序,如图 1 所示。这些不同格式的服务包括 Web 服务、RESTful 服务、异步服务(比如使用 MQ 的服务)、基于 CORBA 的服务、基于 DCOM 的服务和 Java RMI。这些服务采用不同的通信协议和消息格式。例如,Web 服务使用 HTTP 作为通信协议,使用 SOAP 作为消息格式类型,而异步服务可能采用 MQ 作为通信协议,采用 XML 作为消息格式。

目前,可用的 ESB 提供了众多核心功能来连接采用不同服务格式的应用程序。但是,在这些目前可用的 ESB 中,每个应用程序使用一种特定类型的端口来连接 ESB,如图 1 所示。给定应用程序使用的端口类型由该应用程序使用的通信协议和消息格式类型确定。应用程序在对这些特定端口类型的使用上存在诸多问题。您将在本期(本系列的第一部分)后面一节中了解这些问题和不便性。

应用程序使用特定端口类型连接 ESB
应用程序使用特定端口类型连接 ESB

在本期的下一节中,我们将首先简单介绍 ESB,列出应用程序之间的点对点连接中固有的一些问题,以及如何使用 ESB 帮助解决这些问题。接下来,在本期的第三节中,您将了解当前可用 ESB 中各种连接的应用程序对不同端口类型的使用所引起的各种问题。本期最后一节将提供一些总结性评论。

ESB 核心功能

本节的目的在于简单介绍 ESB,简短描述使用点对点连接方法将应用程序与各种不同的服务相连接的 3 种核心功能和相关的问题。

连接可扩展性和路由

设想一下一家需要集成 6 个应用程序的中型公司。连接这 6 个应用程序所需的连接略图如图 2 所示。

使用点对点集成方法的 6 个应用程序连接
使用点对点集成方法的应用程序连接

您可以看到,本例中所需要的连接数目为 15 个。这一数目相当于集成模式中应用程序不同配对的数量。同样地,可以看到,如果此例中有 10 个应用程序,需要的连接数量将为 45。因此,我们可以得出结论,随着应用程序数量增加,需要的连接数量会以非线性方式迅速增加。这被称作一种毛团问题,因为它可能阻碍任何网络。事实上,可以发现,如果企业要集成 N 个应用程序,点对点方法中需要的连接数量为

N(N-1)/2

这很容易理解,因为应用程序不同配对数量也为 N(N-1)/2。因此,我们可以得出结论,点对点集成模式并不适用于大型企业中的集成,应该找到另一种扩展能力更高的解决方案。

企业服务总线为连接可扩展性问题提供了一个优秀的解决方案,因此适合需要集成大量应用程序的大中型企业。在企业服务总线交互样式中,应用程序之间不直接进行交互。相反,应用程序连接到总线,总线提供途径以供应用程序之间建立连接。这种间接交互如图 1 所示,其中展示了 6 个应用程序通过使用企业服务总线进行交互。图 1 要注意的最重要一点是,所需的连接数仅为 6。此数量比点对点模式中 6 个应用程序所需的连接数(即 15)少得多。在此图中要注意的另一点是,所需的连接数量等于集成的应用程序数量。因此,如果我们有 10 个应用程序,仅需要 10 个连接。相对于点对点方法中需要的连接数量(即 45),这个连接数量非常小。

ESB 通过提供基于内容和上下文的路由来实现间接连接应用程序的功能。因此,请求应用程序不需要知道目标应用程序的地址,或者甚至不用知道哪些应用程序在提供该服务。

协议错误匹配和协议转换

通信协议错误匹配问题出现的原因在于,大型企业中的各个应用程序通常会采用不同的协议进行通信。换句话说,在真实世界中,这些协议会不断增生,其中包括 HTTP、HTTPS、JRMP、IIOP 和 JMS。由于这种增生现象,服务用户应用程序与服务提供者应用程序之间有时会发生协议错误匹配。因此,没有一种工具来将一种通信协议转换为另一种,服务用户应用程序将无法调用服务提供者应用程序所提供的服务。此问题的图略如图 3 所示。

协议错误匹配问题
协议错误匹配问题

因此,ESB 中应该包含的另一个核心功能就是一个可将一种协议转换为另一种的协议转换工具。使用此转换工具,采用不同协议的应用程序就可彼此交互。值得指出的是,当前可用的商用 ESB 已提供协议转换支持。例如,我们常常看到从 HTTP(用于异步消息交换)到 MQ 异步消息的转换。出于此用途,可以使用一个关联 ID 来将请求和响应 MQ 消息联系起来。

消息/数据格式错误匹配和转换

另一种异构性问题是数据/消息格式错误匹配的问题。此问题指的是这样一个事实,有时服务用户提供的数据格式与服务提供者应用程序所需的数据格式不太匹配。这会阻止应用程序彼此交互,如图 4 所示。

数据格式错误匹配问题
流程摘要

因此,ESB 需要提供的另一种核心功能是数据或消息转换。大多数可用的商用 ESB 都采用不同技术提供了此功能。例如,可采用 XML 样式表实现不同 XML 格式(包括 SOAP)之间转换。当此功能与其他两种 ESB 功能相结合时,应用程序之间可以轻易地进行连接和交互,即使在它们的接口和协议不完全匹配时。

其他功能

除了满足这 3 种功能需求外,ESB 还实现了服务来满足非功能性需求,比如性能和可靠性、审计和安全性。此外,许多商业 ESB 产品还提供了其他一些可选的服务,比如数据扩充、消息分发、更正和监视。

这些功能和非功能需求可由单个产品或一组产品来满足。换句话说,ESB 基本来讲是一种模式,它没有必要实现为单个产品。

当前可用 ESB 的问题

在当前可用 ESB 中,每个应用程序使用一种特定的端口类型来连接 ESB,如图 1 所示。端口类型由应用程序用于公开其功能的服务类型决定。例如,通过 Web 服务公开其功能的应用程序必须使用这样的端口类型,它提供 HTTP 作为通信协议,提供 SOAP 作为消息格式。换句话说,给定的应用程序必须通过一种具体的端口类型连接 ESB,端口类型由应用程序使用的通信协议和消息格式确定。出于许多原因,这种应用程序通过特定类型的端口进行连接的方法既不灵活,也不方便。其中一些原因是:

  • 许多时候,由于需求或运行时环境改变,应用程序希望切换通信协议。但是,这也需要更改 ESB 一端的端口类型,而且几乎肯定需要构建另一种类型的端口。这无疑会消耗不少时间和资源。
  • 一种常见情形是,一个应用程序希望使用多种协议来公开不同的功能,大型机 COBOL 应用程序常常会遇到此情况,给定应用程序使用 Web 服务公开它的部分功能,而与此同时,它使用 MQ 等消息传递协议公开另一部分功能。再一次,这需要在 ESB 一端构建新的端口类型来同时提供两种类型的协议,这非常不方便,因为它会耗时又耗资源。
  • 在目前可用 ESB 中,很难将 ESB 的用途扩大到新构建的通信协议。这是因为,它需要同时更改应用程序一端和 ESB 一端。在 ESB 一端,需要开发全新的端口类型。
  • 因为每个应用程序必须通过一种特定类型的端口连接到 ESB,所以需要花许多工夫来配置 ESB,以供应用程序使用。这些工夫可能包括构建一种新端口类型、将它部署在 ESB 中,并配置 ESB 以使用这个特定的端口。所有这些都使得难以使用 ESB 连接大量应用程序,并进而导致可扩展性问题。
  • 另外,由于每个端口必须独立部署和配置,所以很难维护和更新 ESB。

结束语

在这期文章中,您了解了集成使用不同格式 SOA 服务的应用程序时所引起的一些问题,以及当前 ESB 的核心功能如何解决这些问题。您还了解到了另外一些与当前可用 ESB 中不同端口类使用相关的问题。这些问题并未得到当前可用 ESB 的解决。

下一期将介绍如何克服当前 ESB 的不足,您将了解一种新的 ESB 类型。这种新 ESB 将采用单一的通用端口类型,它可供大部分或所有采用不同服务类型的应用程序用于公开其部分或所有功能。这将消除或显著减少为每个新应用程序类型开发和部署新端口类型的需要。新的通用端口类型将带来大量收益,包括较高的代码重用率。使用通用端口类型的收益将在以后的一期中详细介绍。

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=SOA and web services
ArticleID=783922
ArticleTitle=用于企业服务总线的类 USB 通用端口类型,第 1 部分: 当前 ESB 存在的问题
publish-date=01042012