假设您要构建一个设计用于在多个医院之间共享医疗文件的数据基础设施。每个医院都拥有自己的数据,将其存储到不同的数据库系统中,放在防火墙之后。
您可以使用 WebSphere 联邦技术来访问远程的数据库,并将这些数据联合 在一起(对数据的访问和集成就像是这些数据都在一个单一的资源上一样),但是这可能需要医院为关系数据库管理系统(RDBMS)协议(CLI、OCI 等等)开放端口。如果将这些数据突然迁移到另外一个 RDBMS 上会发生什么情况呢?您可能需要在 WebSphere Information Integrator 系统中修改一些引用以指向新的 RDBMS。
从数据库所有者的观点来看,您可能会要求他在数据库前端实现 Web 服务或网格服务,这样就可以发送一个请求来检索数据,此时假设您具有正确的信任证书。但是此时应用程序要通过实现关系联邦引擎早已提供的连接、合并、排序以及其他功能来对这些数据库进行联合。
这似乎是一个不可解决的问题?如果使用 Grid Wrapper for WebSphere Information Integrator V8.2(Grid Wrapper,可以从 alphaWorks 上下载;请参阅 参考资料),这就不是什么问题。
这是有关我们为 WebSphere Information Integrator V8.2 构建的数据/信息网格封装程序的系列文章中的第一篇。Grid Wrapper 设计用于那些最初依赖于 OGSA-DAI 网格中间件的信息网格基础设施。
我们完全了解 OGSA-DAI 自己并不能构造一个数据网格。我们的方法是:集成 OGSA-DAI 对于 Grid Wrapper 来说是个很好的起点。OGSA-DAI 良好建立的客户基础影响了我们的决策。
在后续的文章中,我们将介绍如何安装 Grid Wrapper,并配置数据信息访问。我们将介绍不同的 wrapper 组件如何一起工作,如何与某些信息网格服务进行交互,例如寄存器和 OGSA-DAI 中间件。对于我们的文章来说没有必要区分数据网格和信息网格,因此我们将统一使用“数据网格”这个术语。
什么是 WebSphere Information Integrator V8.2?
WebSphere Information Integrator V8.2 是最新版本的 IBM 信息集成中间件,它提供了很多集成技术 —— 企业搜索、数据联邦、数据复制、数据转换以及数据事件发布 —— 来满足各种集成的需求。
WebSphere Information Integrator 的数据联邦功能可以访问多个异构数据源,就仿佛它们是一个数据源一样,而不管它们究竟在什么地方。联邦系统包括以下组件:
- 一个 DB2® 实例,用作联邦服务器
- 一个数据库,用作联邦数据库
- 一个或多个数据源
- 对数据库和数据源进行访问的客户机(用户和应用程序)
在联邦系统中,您可以在一个 SQL 语句中向多个数据源发送分布式请求。例如,您可以在一条 SQL 语句中对 DB2 Universal Database 表、Oracle 表以及 XML 标记文件中的数据进行连接。图 1 给出了一个联邦系统的组件,以及一个可以访问的示例数据源。
图 1. WebSphere Information Integrator 概述
WebSphere Information Integrator 架构的关键组件是 Grid Wrapper。每种数据源都有一个封装程序作为 WebSphere Information Integrator 和数据源之间的接口。在 WebSphere Information Integrator 的不同版本中提供了丰富的封装程序集,还提供了封装程序开发包(用于 C++ 和 Java™ 编程语言),这样就可以编写新的封装程序来对其他数据源进行联合。Grid Wrapper 负责:
- 判断一个 SQL 查询中的哪些部分应该由远程数据源进行处理
- 为 WebSphere Information Integrator 提供优化统计信息
- 与远程数据源进行通信,发送查询并接收结果集。
- 将结果集传递给 WebSphere Information Integrator,并执行所需要的数据类型转换。
在网格环境中,我们的封装程序在查询执行期间还有另外一个重要的任务:将基于标准的 SQL 从 WebSphere Information Integrator 转换为远程数据源所能理解的 SQL 语句。这种转换通过替换远程数据源所不支持的 SQL 语句来消除语法和函数调用之间的差异。在执行时处理查询转换使我们可以应付在规划和执行时底层数据源拓扑结构之间的变化。
WebSphere Information Integrator 允许对远程数据源进行读写。但是对于使用 Java Development Kit 开发的封装程序来说,目前只支持只读访问(请参阅 参考资料)。
虽然目前依然很难为数据网格给出一个确切的定义,但是却已经撰写了很多有关这个主题的文章(请参阅 参考资料)。简言之,此处主要的一个概念就是 虚拟化(virtualization)。为什么应用程序需要了解自己所需要的数据物理上是分布在什么地方呢?应用程序所感兴趣的仅仅是访问数据,而不是 SQL 查询或 XML XPath 查询。利用查询功能,应用程序可能期望能够对虚拟数据库所提供的服务的质量获得一个特定级别的信任或协定。
图 2. 数据网格虚拟化概述
数据的提供者在某个位置指定安全性因素,并提供一个有关数据的特定于域的描述。这些特定于域的描述可以让应用程序判断要满足某个请求需要哪些正确的数据。特定于域的描述的存在可以极大地帮助解决这个问题。
数据管理员并不关心数据表示的内容是什么。很大程度上来说,他们并不关心我们希望哪些应用程序来访问数据。不幸的是,在当前的实现中并非如此。应用程序在编写时必须了解系统管理员所提供的底层基础设施的一些知识,因此我们理想地希望这样一个世界:管理员可以根据所监视到的统计信息和所需要的服务质量自由地复制和分发数据。这些要求对应用程序的需要和数据提供者所指定的限制进行了平衡。
数据信息网格提供了对数据进行虚拟化的功能。现在很多数据库早已具有将数据库管理员的角色从应用程序访问的数据所有者分离开来的功能。这应该扩展到网格上,并在异构的基础设施上实现类似的方法。
应用程序依然正常编写(使用了特定于域的知识)。然而,它会引用一个虚拟的数据源,后者由数据网格进行管理,提供相应级别的服务质量。应用程序不会因为数据发生移动或基础设施发生变化就要重新进行编译。数据的位置、数据的访问方法以及数据源对于应用程序来说全部是透明的。
数据提供者并不能明确地告诉现在和将来的应用程序,数据究竟在什么地方,数据是如何进行访问的,以及数据是如何组织的。这些信息被发布在一个注册表 中。网格中间件可以查询这个注册表来获得有关应用程序的信息。
管理员主要关注的是基础设施,以及如何最佳地利用这些基础设施来提供所需要的特定质量的服务。他们可以动态地进行复制、故障迁移、分区;改变基础设施;以及利用数据网格的虚拟化和联邦特性。
OGSA-DAI 是一个网格中间件,设计用于简化对数据网格中的数据进行访问和集成。OSGA-DAI 的主要开发是由苏格兰的 EPCC 和英格兰的 IBM Hursley 进行的。OGSA-DAI 的催化剂是大量“大型科学”项目,例如 AstroGrid、eDiaMoND、Datamining Grid 和 myGrid,需要一个中间件层提供对大型数据库的访问。
OGSA-DAI 的结构像是一个工具包,并且带有一些扩展点,让开发人员可以扩充自己的功能来满足特定的需要。它通过基于 Web 服务的接口来提供数据资源,这样就可以简单地将数据源作为网格中的首要元素进行操作。目前所支持的数据源有关系数据库(通过 JDBC)、XML 数据库(通过 XMLDB)和文件系统。当有新的需求出现时,应用程序开发人员也可以编写自己的数据库支持程序。
OGSA-DAI 提供了以下主要功能:
- 可以提供数据源 —— 可以对关系型数据源执行 SQL 查询,对 XML 集执行 XPath 语句,或者通过 Web 服务调用对大文件进行搜索查询。
- 可以在服务中实现其他功能 —— 数据源之外进行的数据转换可以通过一些可以避免不必要的数据移动的操作实现。
- 提供了一种紧凑的方法在单个请求中处理与某个服务的多次交互 —— 这可以通过 XML 文档(称为 执行文档)来实现。当数据流进入某个数据源或从某个数据源检索出来时,对其进行的操作之间是通过管道来传递数据的。
- 让开发人员可以简单地在 OGSA-DAI 中添加或扩充功能 —— 执行文档和底层的框架都可以进行扩充,这样就可以添加新功能,或者对现有的功能进行定制。
- 可以通过服务接口查询有关数据和数据源的元数据。
OGSA-DAI 目前使用了 Globus Project:Globus Toolkit 3.2(GT3)中的参考 OGSA 实现。GT3 是网格应用程序的一个基于 Java 的框架,它提供了一个环境,网格应用程序可以在这个环境中注册自己的服务,维护自己的状态,并与其他应用程序进行通信。最新版本的 OGSA-DAI(6.0)可以从 OGSA-DAI 下载,在 Globus Toolkit 4 beta(GT4)中也提供了一个预览版本。
现在,OGSA-DAI 的安装并没有提供一个访问完全透明的完整数据联邦功能。应用程序程序员仍然需要了解应用程序会访问哪些数据库。因此,他们必须要考虑各种 SQL 语言之间的区别。OGSA-DAI 提供了 Open Grid Services Architecture Distributed Query Processor(OGSA-DQP),这可以安装到 OGSA-DAI 之上。
2004 年在 Edinbugh 召开的 OGSA-DAI 用户会议指出了为了帮助项目使用 OGSA-DAI 需要添加哪些功能。除了可伸缩性、可靠性和文件访问之外(这些都已经添加到系统中了),联邦处理能力,包括模式集成、数据格式转换以及分布式查询,都是这个需求清单中非常重要的功能。很多使用 OGSA-DAI 的网格项目都在通过自己开发联邦代码来实现多种数据源的联邦。
因此,有些很好的案例已经可以重用现有的技术了,特别是在关系空间领域。
在过去 4 年中,我们已经参与了很多网格项目。从这些项目的经验中,我们可以看出,对于位置和异构环境透明地进行调用的需求正在出现,从而可以动态选择数据源。目前的联邦技术或 OGSA-DAI 中间件中都还没有提供这种透明性。
我们在这些项目中积累的经验以及这些项目对于透明性的需求使我们可以使用下面介绍的这些高级访问模式。
有一个虚拟的医疗数据库分布在各个医院之间。每个医院都要分享自己的数据,但是如果要进行维护或出于安全性的原因,也随时可能移动这些数据。可以在所有的医院之间进行流行病学的查询,这会返回非常可靠的结果。这种查询并不需要从医院中检索所有的数据来获得有用的信息;询问 98% 的医院有关某种疾病的信息就可以返回非常有意义的结果。
某些查询可能需要是确定性的,并返回完整的结果 —— 例如,检索一份完整的病例,它可能会保存在不同的地方。如果某个医院不能回答这个问题,就必须停止整个查询,并返回一个错误信息给应用程序。
很多网格都有副本和缓存,但是网格应用程序却总是试图访问相同的数据源。在任何时候,这种资源都可能会失效,需要维护,或者被移动到其他机器上去了。
数据网格应该具备一定的灵活性。网格中间件应该自主地迁移到另外一个具有类似的数据集的数据源上,或者多个数据源上,每个数据源都拥有整个数据的一个子集。
有些组织具有大型的数据集,因此访问这些数据集可能要花费大量的时间。因此,使用一个“虚拟的分布式”数据库来并行地获取数据就非常有意义。这也可能需要花费大量的时间。您可能并不希望自己的应用程序等待很长时间,直到它通过用来发送查询的小管道接收到整个数据集为止。因此,我们可能需要更加有效的方法来从这些数据源检索数据 —— 例如,使用 GridFTP。在这种环境中,还可能需要异步查询以及第三方的软件。
在所有这些情形中,我们注意到大部分都是通过 SQL 来访问网格数据源的。要使用数据网格来动态选择数据源,就需要一个完整的 SQL 查询转换和优化功能。网格应用程序开发人员并不希望实现这些与 SQL 有关的特性。这必须是一个真正惟一的虚拟数据库。
将 DB2 作为所有关系数据源前端的一种方法是对访问语言进行“统一”,条件是查询转换和优化都是在底层进行处理。WebSphere Information Integrator 就非常适合这种任务,但是目前它在处理远程数据源方面的动作进展不大。在 WebSphere Information Integrator 中加入网格的动态特性意味着 WebSphere Information Integrator 可以获得高度的灵活性,提供模式集成和查询转换,这些都是为了帮助网格应用程序开发人员所需要的。
这种方法的一个额外作用是,目前的 DB2 应用程序可以真正不加修改就在数据网格上运行。创建一些昵称映射到数据网格中的逻辑表上,这样可以采用一些新的并行技术、数据分布以及新的访问模式,这些在目前的应用程序中尚不能使用。这些新的访问特性应该不会对应用程序产生影响,它们依然会使用相同的表透明性。
除了这些从经验中提取出的需求之外,网格应用程序还可能需要访问其他类型的数据源,这些在目前还不能通过 OSGA-DAI 来使用,例如内容管理系统、大型机数据源、Microsoft® Excel 文件或尚未支持的数据库。我们认为 OGSA-DAI 和 WebSphere Information Integrator 的结合可以获得很多优势,例如增强灵活性、可靠性和处理能力。
如果没有 Grid Wrapper 会是什么样子?
到现在为止,我们已经建立了:
- WebSphere Information Integrator 提供联邦功能。
- OGSA-DAI 提供对于网格数据源的透明数据访问。
- 数据信息网格通过对应用程序要访问的数据、配置和数据的管理提供了数据的虚拟化。
- 真实的客户需要网格封装程序在数据信息网格中采用数据联邦(WebSphere Information Integrator)和统一数据访问(OGSA-DAI)的功能。
我们已经接触了很多在创建一个有效的网格封装程序时所必须考虑的问题。在整个开发过程中,我们试图采用一种组件架构的方法,这样就像是在一个数据网格中一样,对于允许使用解决这些问题的功能来说至关重要,至少可以使用分布式功能(尽管我们也知道这对于这些组件的分布来说并不总是有效)。这种方法可以采用一些开放标准,并且可以在数据网格中灵活地适应异构环境服务质量需求的变化。
我们采用的高级架构主要使用 3 个主要的组件来弥补 WebSphere Information Integrator 与 OGSA-DAI 之间的差距:
- 注册表,这种技术支持松耦合和数据源到数据源表示的透明后绑定。其中包括有关数据是如何进行联邦的以及要对哪些数据进行联邦的元数据(位置透明性)。
- 访问模式 对数据源以及用来访问数据以满足某个查询的方法的语义进行了封装(数据分布透明性)。
- 转换 对不同数据源之间的差异进行抽象,让应用程序可以只考虑一种查询模式(数据管理系统透明性)。
要实现网格封装程序的功能需要很多工作,不仅仅是将 WebSphere Information Integrator 和 OGSA-DAI 粘合在一起。
另外,我们依然要使用数据网格的概念,现在尚不知道它最终是如何在一个企业环境中使用的。当您考虑到 WebSphere Information Integrator、OGSA-DAI 以及网格标准都会继续发展时,这就会促进您决定将 Grid Wrapper 的功能设计成自包含的、与应用程序独立的可重用组件。
图 3 显示了 Grid Wrapper 之外的注册表(元数据仓库)。
图 3. Grid Wrapper 的基本组件
注册表是数据网格的一个关键组件,我们认为要允许从任何服务或网格的任何部件来更新这个注册表是非常重要的。这样可能会在添加数据、复制数据或将数据分布到网格中时需要动态添加注册表。这种对注册表的更新最初可能会是一个手动过程的一部分,但是最终会通过数据管理服务自动进行,这样还可以自动维护数据网格基础设施,从而最好地满足对于服务质量的需求。
图 4. 访问数据的可能模式
图 4 显示了几种访问数据的简单模式,包括:
- 静态直接数据访问 —— 传统上,应用程序在编写时都需要了解数据管理系统和数据的位置。应用程序可以使用执行访问协议,这可能是特定于数据管理的,查询需要提前了解数据结构才能表示,数据的位置也从来不会发生变化。
- 动态直接数据访问 —— 现在我们已经介绍了注册表的概念。注册表可以使用数据位置信息进行更新,从而允许使用一个位置透明的元素,而不需要重新编写应用程序。虽然这是可能的,但是很少这样会允许使用联邦或模式透明性,因为业务逻辑会突然变成应用程序中很小的一个部分,大部分功能是为了允许使用联邦和透明性。
- 动态间接数据访问 —— 此处,可以在使用关于可用数据的元数据更新注册表的服务(例如 OGSA-DAI)之后对数据管理系统进行虚拟化。这样可以利用位置透明性和数据管理系统的透明性,但是在应用程序中仍然需要大量的代码来处理模式的透明性。
在这些例子中,仍然没有利用数据联邦,每个例子都需要对现有的应用程序进行修改。幸运的是,通过引入 WebSphere Information Integrator 和 Grid Wrapper,我们就可以确保不需要重新编写应用程序了。我们还解决了数据联邦和模式透明性的问题。图 5 显示了当我们将网格从应用程序功能中分离开来时这是如何工作的。
图 5. 将网格从应用程序功能中分离开来
WebSphere Information Integrator 将应用程序从手工对数据源进行联邦的繁重负载中解放出来。Grid Wrapper 消除了 WebSphere Information Integrator 对于数据源的紧耦合关系,并可以使用后绑定。我们需要认识到的一个重要事实是 WebSphere Information Integrator 已经成为应用程序与数据网格之间的网关。正如图 4 所示,在传统世界中有很多客户机应用程序使用相同的注册表和数据源,也有很多 Grid Wrapper 和 WebSphere Information Integrator 用作网格的网关的例子。允许使用多个网格封装程序和 WebSphere Information Integrator 网关可以确保可伸缩性。
Grid Wrapper 可以使用一个 OGSA-DAI 数据源注册表(DAI Service Group Registry (DAISGR),这是一个用于 OGSA-DAI 网格服务的注册表)作为自己的元数据仓库。尽管此处包含的信息相当有限,但是如果使用 OGSA-DAI,这都会被安装。元数据可以保存在任意一种类型的注册表中,例如文件或数据库。
WebSphere Information Integrator 与 Grid Wrapper 组合起来可以实现图 4 中的各种模式,其中 WebSphere Information Integrator 处理联邦工作,Grid Wrapper 处理在网格中根据应用程序的行为使用数据源的动态需求。
- 静态直接数据访问 —— 这可以使用现有的 WebSphere Information Integrator 技术实现,它引入了联邦的概念。
- 动态直接数据访问 —— Grid Wrapper 从应用程序中接收请求,并处理与注册表之间的交互,从而来发现数据的位置(后绑定)。利用注册表中适当的元数据,Grid Wrapper 可以选择使用访问协议还是处理查询或进行模式转换。
- 动态间接数据访问 —— 如果没有适当的访问协议,Grid Wrapper 可以处理与服务(OGSA-DAI)的通信。
我们已经明确了现有技术中有关数据信息网格方面的缺陷:缺少联邦和提供透明性的能力。我们介绍了我们开发的 Grid Wrapper 如何与 WebSphere Information Integrator 一起来弥补这个缺陷,并解决真实世界的问题。最后,我们简要介绍了设计用来解决这个挑战的架构,以及它需要的 3 个关键组件:注册表、查询转换以及访问模式。
我们有一个 Grid Wrapper 的工作原型,欢迎任何可以在需求方面为我们提供帮助和反馈的人士与我们联系。请阅读下一篇教程,其中将介绍可下载的二进制文件,以及使用指南。
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文 。
-
从 alphaWorks 下载 Grid Wrapper for WebSphere Information Integrator。
-
2004 年在 Edinburgh 召开的 OGSA-DAI 用户会议定义了 所需要的功能,包括可伸缩性、可靠性、文件访问(这些都已经加入 OGSA-DAI 中了)、模式集成、数据格式转换以及分布式查询(尚未加入,但是在本文中提及了)。
-
WebSphere Information Integrator 联邦功能让应用程序可以访问并集成各种类型的数据 —— 分布式/大型机上的,结构化/非结构化的,公有的/私有的 —— 就仿佛这些都在一个单一的数据源上一样。
-
The OGSA-DAI 项目 关注的是构建中间件来帮助通过网格对不同数据源中的数据进行访问和集成。您还可以参考 OGSA-DQP。
-
我们进行的很多 OSGA-DAI 开发都是在位于苏格兰的 EPCC 和位于英格兰的 IBM Hursley 进行的。
-
学习 WebSphere Information Integrator 入门的一个好地方是“Getting Started with WebSphere Information Integrator”,其中包含了所有活动的路线图和一些资源,可以快速学习如何使用 WebSphere Information Integrator。
-
要学习有关 WebSphere Information Integrator 的更多知识,请访问 developerWorks 上的技术文档、 how-to 文章、培训教程、下载、产品信息,等等。
-
要学习更多有关数据网格的通用知识,请阅读“The information grid”。
-
要了解 IBM 关于网格计算的信息基础设施的观点,请阅读 Towards an information infrastructure for the grid。
-
更多有关网格基础设施的信息,请参阅“The information grid, Part 1: The infrastructure”。
-
“IBM Federated Database Technology”(developerWorks,2002 年 3 月)简要介绍了现有的数据库联邦技术。
-
“Using data federation technology in IBM WebSphere Information Integrator, Part 1: Design and configuration”(developerWorks,2005 年 6 月)简要介绍了联邦数据的概念,并讨论了设计和配置的问题。
-
“Using data federation technology in IBM WebSphere Information Integrator, Part 2: Usage examples and performance tuning”(developerWorks,2005 年 7 月)讨论了联邦查询优化的问题,展示了一些使用案例,并讨论了性能调优方面的问题。
-
Data integration through database federation(IBM Systems Journal, Vol. 41, No. 4, 2002 年)简要介绍了数据联邦的基本知识,并介绍了数据库联邦的几种类型,并对每种联邦应该考虑的问题进行了总结。
-
Getting Started on Integrating Your Information(IBM Redbooks,2003 年 2 月)设计用来帮助架构师和实现者理解 DB2 Universal Database 和 WebSphere Information Integrator 的集成技术。

Adrian Lee 在 IBM Hursley Development Laboratory 的 Emerging Technologies Services 小组工作,重点是在现有的 IBM 数据管理产品中集成新技术,例如网格计算,目的是增强 IBM 的随需应变解决方案的功能。他为 IBM 的数据管理系列产品提供技术咨询已经有 12 年的时间了。他在 IT 业界的从业经验已经有 21 年了,这包括他作为一名技术专家为 RS/6000® 平台和 AIX® 提供售前和售后技术支持的时间,以及专门从事高可用系统和开放系统通信的工作时间。在此之前,他是一名硬件开发工程师,负责设计 IBM 磁盘和显示设备使用的各种集成电路。

James 在 IBM 致力于前沿用户项目的工作已经有六年了。他一直从事高性能计算和大型 RS/6000 SP 系列的基准测试、安装、调优、疑难解答等工作,而且在 IBM 制定 Linux 战略之前就从事 Linux® 集群的研究。从 2001 年 1 月起,他开始研究网格计算,参与的工作有 European DataGrid 和 OGSA-DAI,同时为 Global Grid Forum 做出了很多贡献,还领导其中的两个工作组。这些网格项目为他提供了 SOA 和数据网格方面的经验。他在过去的三年中,一直从事 Web 服务和数据网格方面的工作,最近从事在网格中使用 WebSphere® Information Integrator 的研究工作。

Patrick Dantressangle 已经在 IBM 工作了 8 年,参加了信息管理组中多个项目和产品的开发工作。当他在位于加利福尼亚的硅谷实验室工作时,所从事的工作有:Net.Data、1998 Nagano Winter Olympics Web 站点、DB2 UDB V7 中 DB2® 存储过程语言的初始实现并建议用户使用它,以及 DB2 UDB 迁移工具包。在 2003 年回到欧洲之后,他加入了 Emerging Technologies Services 小组,参与了很多网格计算项目,例如 OGSA-DAI 和 SIMDAT。通过这个封装程序的开发,他正在试图帮助网格社区成员使用 WebSphere® Information Integrator V8 处理自己的数据异构问题。
