想要学习如何优化面向服务的体系结构(Service-Oriented Architecture,SOA)中的 Web 服务应用程序吗?Judith M. Myerson 强调了业务流程规则在优化 Web 服务的过程中具有最高优先级的重要性,并给出了其他优化技术的例子,例如减少 Web 请求的数量和执行时间。 她还讨论了 IBM WebSphere Business Integration,开发人员和业务分析人员可以使用这个工具来协作建模 Web 服务,以便进行优化 。
引言
在这个系列的第 1 部分中,我展示了如何执行 Web 服务的业务逻辑来使专有的企业应用程序集成(Enterprise Application Integration,EAI)应用程序可以交互。在第 3 部分中,我指出了 Web 服务如何相互通信来交流集成和实现多个 SOA 中的流程的方式。同样,我还在第 4 部分中讨论了开发人员可以如何使用 Rational® 开发工具来创建实际的应用程序。
在本文中,我将讨论在优化 Web 服务和 SOA 的过程中具有最高优先级的 Web 服务的业务流程规则。一旦开发人员优化了流程规则,那么他们就可以开始减少:
- Web 请求的数量
- 执行时间
- 访问时间
- 不需要的数据
- 带宽量
开发人员还需要考虑连接到一个或多个 Web 服务的大型数据库的分区方案。
业务流程规则
为了减少通信量瓶颈或者加载开销,开发人员需要使用某些业务流程规则来优化跨 SOA 的 Web 服务的性能。他们应该使用用于 Web 服务的业务流程执行语言(Business Process Execution Language for Web Services,BPEL4WS)规范来创建新的业务逻辑、调用 Web 服务、操作数据、抛出错误或者终止流程。
您可以使用可执行的流程基于业务逻辑组成新的 Web 服务,以便实现组织的业务目标。您还可以使用抽象的流程作为两个合作伙伴之间在电子商务对话中如何进行交互的协议。
Web 请求
在优化业务流程规则之后,开发人员可以继续开发他们所需要的 Web 请求,从现有的 Web 服务构建新的 Web 服务。Web 服务是在 SOA 内部还是跨 SOA 都没有关系。如果新的 Web 服务——业务逻辑或者以数据为中心——提供更好的或者额外的服务或功能,开发人员必须减少或者完全消除冗余的 Web 请求。图 1 展示了两个现有的 Web 服务各自发送了一个冗余的 Web 请求来创建新的 Web 服务。
图 1. 冗余的 Web 请求
执行时间
在开发人员优化了现有的 Web 服务可以发出的请求数量之后,他们还需要减少现有的 Web 服务的执行时间,以便在组合生命周期的任何时刻基于业务流程创建新的 Web 服务。以数据为中心的 Web 服务极少自己执行。
当开发人员组合新的 Web 服务时,他们应该当心不要导致新的冗余。为了消除冗余,可能需要将某些冗余的 Web 服务合并成为一个服务。
访问时间
如果给定最佳的执行时间,则减少访问时间是开发人员需要关心的另一个问题。当 Web 服务请求比较简单时,从数据库或者另外的数据源中访问所请求的信息的时间必须是最佳的。在使用和发布 Web 服务时必须注意请求不要互相重叠。
开发人员应该模块化、最优化和索引化请求,以便减少访问时间。然后,他们可以将 Web 请求放在储存库中,以便在新的应用程序中重用。
带宽量
正如您所知道的,Web 服务基于 XML,并且大部分文件都很小。通常带宽不是问题,而且执行和访问时间也都是最佳的。问题在于大的 XML 文件。当您每次更改远程服务器上的这些文件时,您需要重新传输整个文件。大的未压缩格式的图形文件可以消耗掉大量的磁盘空间和带宽量,从而延缓了访问时间。
作为部分的解决方案,开发人员只需要传输对新的 Web 服务的文件的更改。其他节省带宽的技术包括:加速页面加载的缓存技术、优化解析文本格式的 XML 文件的时间,以及将 XML 文件编译成二进制文件(不可读的)。
不需要的数据
开发人员应该指定筛选规则来清除他们不想要的数据。筛选规则与针对减少数据冗余的标准化规则不是一回事。他们同样也应该优化筛选规则,然后将它们(XML 格式)存储到储存库中,供以后调用。您可以在需要这些规则时从储存库中加载它们,而在您不需要时将它们卸载回储存库。筛选规则还应该包括对旧数据的自动清除或者备份、以及使大的 XML 文件不久后过期的机制。
分区方案
当 Web 服务连接到大型数据库时,应该注意是如何跨服务器访问、筛选和分发数据的,尤其是在后者位于不同的 SOA 中的情况下。为了在减少带宽的同时更快地进行访问,开发人员应该考虑两件事情:
如果数据库的大部分经常都需要更新,那么您应该考虑分区方案:硬件分区、水平分区或者垂直分区。而如果数据库只是一小部分经常需要更新,那么就考虑动态分区。
硬件分区
您可以使用独立磁盘冗余阵列(Redundant Array of Independent Disk,RAID)进行硬件分区,物理地将表放在单独的磁盘驱动器上而不必分割表。把一个表放在一个物理驱动器上而把其他的表放在单独的驱动器上可以提高吞吐量和操作效率。另外,您还可以选择将一个表拆开,放到多个驱动器上,这样比将同一个表存储在一个驱动器上扫描起来快。
水平分区
您可以基于年代水平地对数据进行分区。例如,您可以将一个大表分成十个小的子表,每个子表包括十年中的一年的数据和业务流程规则。
垂直分区
您可以使用这种方法将表分成若干个子表。您可以应用规范化的概念删除表的冗余部分,然后将它们放在次表中。您还可以在次表中建立外键,以链接主表中的主键。
动态分区
在某种情况下,您可能需要经常更新数据中相对较小而非常重要的子集,我们假定您的数据库中的绝大多数信息相对来说是静态的。如下面的图 2 所示,您需要分别按频繁更新和很少更新将数据库分成动态部分和静态部分。
图 2. 动态部分和静态部分
这就意味着您需要以这样的方式设计数据库系统,即将数据库表划分成两种类型——静态和动态——的模块化、最优化部分。您可以将静态的部分保存在本地服务器上,而将动态的部分转移到远程服务器供用户频繁地更新。您可以通过跨一组本地服务器和另一组远程服务器分割表来实现这一点。当新的 Web 服务更新数据库时,这种方法可以帮助减少多个数量级的带宽使用。
消除语言隔阂
开发人员和业务分析人员应该找到优化 Web 服务和 SOA 的方法的共同基础。这种方法存在的一个问题就是,他们往往使用不同的语言,使用不同的术语,并且具有不同的知识背景。
例如,业务分析人员使用流程模型来处理业务需求,而开发人员使用统一建模语言(Unified Modeling Language,UML)模型来专注于他们想要优化的 Web 服务的系统功能。解决这个问题的一种方法就是进行 UML 和业务流程建模(Business Process Modeling,BPM)模型之间的集成和转换。这将有助于进行良好的沟通,并减少由于缺乏交流而带来的成本。
WebSphere Business Integration 工具
下面是 IBM WebSphere® Business Integration(以前称为 IBM Holosofx)工具,您可以使用它们来消除这种隔阂:
-
IBM WebSphere Business Integration Workbench:这是一个 BPM 工具,您可以使用它通过共同的 UML/BPM 工作区来消除业务分析人员或经理与开发人员之间的隔阂。
-
IBM WebSphere Business Integration Monitor:使用这个工具,您可以显示来自 WebSphere MQ Workflow 所产生的事件的实时数据和历史数据。通过查看业务控制、业务和 IT 的工作流 (Workflow) 和业务仪表板 (Business Dashboard),您可以优化和管理业务性能。
-
IBM WebSphere Business Integration Workbench Server:这个工具向您提供储存库管理和 Web 发布功能。使用这个工具,您可以促进如下几方面的流程设计协作和即时 Web 访问:
-
IBM WebSphere Business Integration Modeler Advanced Edition:您可以在协作环境中使用这个工具来设计与多个用户交互的流程。这款产品由 IBM WebSphere Business Integration Workbench Server 和 IBM WebSphere Business Integration Workbench 许可捆绑组成。您可以在 Windows® 2000 或者 Windows XP 操作系统中运行 WebSphere Business Integration Modeler Advanced Edition。
结束语
优化跨 SOA 的 Web 服务需要提前计划实际上有多少依赖于业务规则的 Web 服务可以优化。开发人员应该就 Web 服务设计中使用什么建模技术和优化方案的问题与业务分析人员团队进行沟通。通过预先解决这个问题,开发人员将会发现他们优化 Web 服务的工作变得更加容易了。他们可以开发和优化相互交互和集成——在 SOA 内部以及跨 SOA——的 Web 服务。
分析人员同样也会发现,预先解决这些问题使他们设计和分析优化 Web 服务的业务端工作变得更加容易了。他们可以确定使用哪种建模方法、使用什么方案、以及在 SOA 中有多少 Web 服务可以优化。