Pervasive® DataRush™:高度并行数据流框架的描述





3.00/5 (5投票s)
Pervasive 软件架构白皮书
目录
- 目标读者
- 数据流框架的必要性
- 数据流框架如何适应行业趋势
- 计算和数据集成基础设施中的数据流框架
- Pervasive 的数据流方法 -- Pervasive DataRush
- Pervasive DataRush:下一个层次
- Pervasive 的设计时体验
- Pervasive DataRush 和 Pervasive Data Profiler
- 摘要
目标读者
本文档旨在为系统架构师或 Java 开发人员提供信息。它旨在提供 Pervasive Software公司高度并行数据处理框架的高级概述。
数据流框架的必要性
IT 业务正在发生变化
许多行业的数据需求正在迅速扩展和日益复杂。几个新兴的行业趋势表明了这一点。首先,CRM、ERP 和 BI 数据仓库以及企业记录管理(ERM)数据存储设备面临数据泛滥,因为公司和组织需要遵守 Sarbanes Oxley、Basel II 等法规。第二个趋势是业务流程外包(BPO)和业务服务处理器(BSP)的 IT 运营中日益严峻的数据管理问题。这些跨国公司的“数据中心”正承受着巨大的压力,需要在越来越少的时间内处理和整合越来越多的信息。
另一个同样重要的趋势是,业务经理需要实时或近实时地获得有关客户、供应链和运营的商业智能:管理层不再满足于月度或周度报告。这种新兴趋势被称为复杂事件处理(CEP)。它包括对实时或近实时事件的收集和分析。这些事件范围广泛,从股市行情到网络设备日志。它们也被称为“动态事件”。然而,CEP 不仅包括实时事件处理,还包括对事件的历史分析。存储设备的容量不断增加和成本不断降低,导致这些事件的存储呈爆炸式增长,从而成为“静态事件”。一旦存储,就可以更详细、更迭代地分析这些事件,以获得更高质量的相关性和更深入的学习。
硬件供应商响应挑战
硬件行业正在应对这些数据趋势,特别是由于散热问题导致处理器速度的加速放缓、对低成本、高性能系统的需求以及对并行性的需求。CPU 正从“单核”转向“多核”处理器,例如 AMD Opteron™、Sun Niagara 和 Intel Xeon® 处理器,以及广泛开发的商用多核 SMP 服务器。
现实情况是:曾经只在大型机系统中发现的“大型机”正在被推向下层,进入部门服务器甚至更低的级别。服务器整合和虚拟化(例如 VMware)也正在普及,但并非在大型机上。数据中心越来越多地使用基于 8、16 和 32 核 SMP 服务器的低成本、中高端 UNIX/Linux 和 Windows® 系统。
企业 Java 社区缺乏答案
与此同时,软件行业必须帮助促进多核机器的高效利用。如果应用程序的编写方式缺乏条理,新的处理器进步就会被浪费,迫使操作系统或 Java™ 虚拟机(JVM)“猜测”如何利用并行性来提高性能。例如,对于基于 Java 的服务器端技术,任何新的并发编程框架都必须能够解决大型数据集问题(这里的“大型”范围从几 GB 到几十 TB),并为数据密集型业务应用程序提供可伸缩性。数据流框架能够解决这些类型的数据处理挑战。
数据流框架如何适应行业趋势
使用 J2EE™ 应用程序服务器为 Web 驱动的 OLTP(在线事务处理)应用程序提供支持一直非常成功。然而,应用程序服务器的整个架构都是为了处理短暂的事务而设计的,而不是为了数据密集型、计算密集型、长时间运行的后台应用程序。
数据流框架可以解决这种情况。适用于数据流框架而非 J2EE 架构的应用程序类型如图 1 所示,包括风险分析、匹配、排序、合规性检查以及 SOA 的通用数据转换服务。数据流引擎技术的研究自 20 世纪 60 年代以来一直在进行,但直到现在才在一个 100% 的 Java 服务器端框架中产品化。为了使数据流框架成功,数据流引擎必须在多个维度上可伸缩,并且解决方案设计必须简单且可重用。此外,利用计算资源的能力必须高度完善和先进,包括利用多核系统上数据流图中并行化点的能力。并且数据流框架必须处理前面提到的行业趋势所产生的非常大的数据集。为了有效地工作,数据流框架还必须可以通过轻量级的、类似 POJO(“Plain Old Java Object”)的组件框架进行扩展,并且必须是 100% Java,以提供硬件和操作系统平台的便携性。
同样重要的是,数据流引擎应该能够嵌入到业务和科学研究应用程序中。它必须具有小巧的占用空间,并且拥有相对较小但功能强大的 API,以降低复杂性并提高开发人员的效率。有关 J2EE 与数据流框架的讨论,请参阅附录。

图 1. 适用于数据流框架的应用程序类型
计算和数据集成基础设施中的数据流框架
数据流引擎技术将为数据密集型和计算密集型企业应用程序提供支持,涵盖从 ETL 到企业数据分析/剖析再到规则合规性。它是一种高度动态且强大的技术,可以无缝处理需要解析、处理和转换为不同数据存储的大型数据源。
以下类型的基础设施软件受益于数据流引擎的概念
- ETL:数据流引擎应该是任何高度可伸缩的抽取、转换和加载(ETL)工具集的底层。ETL 工具中的许多操作都适用于并行化,例如记录和字段级别的排序、分组和数据转换。
- 数据集成:实时和批量数据集成套件都可以通过数据流引擎技术进行补充,以确保复杂的转换和审计过程能够以最高效的方式执行。
- EII:数据流引擎有助于企业信息集成(EII),即实时从企业各处提取大型、异构数据集以构建复合信息视图的能力。这种类型的操作需要高度可伸缩的 SMP 服务器计算能力和能够利用多核架构的软件。EII 将源数据保留在其原始形式和位置,但必须在实时缓存中集中查询结果,并处理数据以最终交付复合结果集。相比之下,ETL 技术会物理移动数据并将其永久写入新的存储位置。
- ESB:企业服务总线(ESB)实时集成业务流程和数据。问题在于,大多数来自遗留平台的数据都是二进制或非结构化格式,而大多数 ESB 需要 XML 格式的数据。因此,实时的二进制到 XML 转换是一项计算密集型任务,会使大多数 ESB 节点不堪重负。数据流引擎可以被委派“二进制到 XML 转换”任务到更大的 SMP 服务器上,以分担这一负担。
- 企业搜索:收集文字处理、电子表格和演示文稿文档并对其进行索引是企业搜索的一部分。但 ERP、CRM、数据仓库、数据超市和客户数据中心中 TB 级结构化数据呢?数据流引擎可以执行将企业搜索索引系统加载所需的巨大的数据集成和处理任务。
- 复杂事件处理:实时捕获并存储流式事件。分析这些海量历史事件的使用模式、欺诈检测和其他数据属性,可以揭示以前隐藏的信息。
Pervasive 的数据流方法 -- Pervasive DataRush
Pervasive 开发数据流框架的方法隐藏了 Java 开发人员/架构师的并行编程复杂性,并使用了一种类似 POJO 的、基于组件的方法,“保持简单”。因此,数据流的本质是数据通过一系列计算运算符的输入和输出“端口”进行高速流动。Pervasive DataRush 在达到内存边界时处理锁定、线程和动态磁盘缓存。请记住,这些纯 Java 运算符不需要任何锁定或线程代码。
Pervasive DataRush 提供动态引擎可伸缩性。启动时,数据流引擎将利用当时的 CPU 资源,根据可用资源的改变动态修改其“攻击计划”(例如,哪些数据流运算符并行化以及生成多少并发线程)。这使得引擎不仅可以向上扩展,还可以向下扩展到低端服务器,例如小型部门级的 Windows 系统。
Pervasive DataRush 中数据流图(应用程序)的组合是使用简单的 Java API 完成的,如图 2 所示。一旦组合了数据流图,就可以使用 Pervasive DataRush 执行环境执行它。数据流图的执行通过 Java API 完成。执行环境利用 Java 的 Java Management Extensions (JMX) 功能来暴露有助于 DataRush 应用程序分析和调试的信息。提供了一个 JConsole 的插件,JConsole 是 Java 附带的 JMX 事件查看器,允许最终用户使用 JConsole 以标准方式查看详尽的 DataRush 运行时信息。JConsole 还将系统和 JVM 级别的信息集成到一个易于使用的控制台中。
Pervasive DataRush:下一个层次
Pervasive DataRush 是一个 100% Java SDK,支持 Java 6 环境。它还提供广泛的平台可用性(包括 32 位或 64 位 JVM)。一套复杂的、设计时框架是 Pervasive 框架的一部分,包括基于 Java 的数据流组合、类似 POJO 的运算符的重用以及灵活的“端口链接”,即能够将输出字段(例如,客户姓名)链接到下一个组件的输入字段。运行时引擎是轻量级的。Pervasive DataRush 提供了一个简单的 Java API 来控制引擎级别的调用。此外,还支持 Windows 或 UNIX 风格的命令行操作。
在组合期间,运算符支持数据流图中其他元素的动态创建,以提高运行时平台的性能。例如,这允许组合元素在运行时决定创建多少水平分区以提高性能。
这使得组件在支持的计算环境方面非常灵活。同一个图可以在小型机器上运行进行测试,然后部署到更大的机器上进行生产工作。Pervasive DataRush 应用程序在部署前无需修改或重新构建。由于内置的组合灵活性,应用程序将自动适应其运行时环境。
在执行时,Pervasive DataRush 通过创建底层线程、内存队列和其他控制结构来处理数据流图的实例化。队列按照数据流图组合的定义进行链接,并通过执行线程启动图。
执行环境执行线程监控和数据流死锁检测,因此 Java 开发人员无需进行复杂、专业的 Java 并行化开发任务。再次强调,组件是类似 POJO 的,只有很少的接口需要实现,以便组件能够融入框架。
Pervasive 的设计时体验
Pervasive DataRush 是纯 Java 构建的,旨在使 Java 开发人员能够快速创建可伸缩、数据密集型应用程序。组合界面易于使用且非常灵活。它允许开发人员使用 Pervasive DataRush 组件库,并在需要时通过其他运算符扩展该库。附带了几个示例应用程序,展示了使用 Pervasive DataRush 创建应用程序的便捷性。
作为基于 Java 的产品,DataRush 可以很好地集成到流行的 Java IDE 中,包括 Eclipse 和 NetBeans。开发人员可以利用他们已经熟悉并喜爱的所有有用的 IDE 功能,例如代码补全、与 Javadoc 的集成、执行、调试和分析。
Pervasive DataRush 的组件库非常庞大,包含 Pervasive 开发的、可由客户扩展的数据流运算符。有一个基础库,包括 I/O、排序、合并和连接等组件。在运行时,每个运算符通过 Pervasive 称之为“动态组合”的东西而变得天然并行。
组合是构建数据流图的阶段。通过创建应用程序图并向图中添加组件来完成构建。每个组件可以有多个输入和输出。每个组件都表示为一个 Java 类,其构造函数定义了实例化组件所需的组合时信息。需要输入的组件将数据流作为其构造函数参数之一。生成输出的组件将公开“getter”方法,返回其输出数据流。使用这些组合标准,可以通过将一个组件的输出流传递给另一个组件的输入来生成图。一旦组件被实例化,它就被添加到应用程序图中并被命名。这个名称对于监控应用程序(DataRush JConsole 插件)中的人工可读性很有用。
当一个组件通过创建新的 Java 类实例而被实例化时,该组件会动态地组合自身。该组件会创建一个子图来实现其功能,并将其连接到更高级别的应用程序图中。在组件创建过程中,组件代码可以根据其运行的机器的配置动态决定如何构建自身。内存和 CPU 核心等资源可用性可能会影响组件图的创建。例如,一个组件可能支持数据的水平分区以提高性能。在组合时,组件会动态决定创建多少个分区。这可以基于传递给组件的运行时属性或配置的 CPU 核心数。
一旦应用程序图完成,就可以通过简单地调用图上的 run()
方法来执行它。有几个运行时配置选项可用,例如是否监控应用程序(使用 JMX)、日志记录配置以及默认的队列和缓冲区大小。应用程序可以同步运行,也可以使用 future 构造在后台运行以获取状态。
Pervasive DataRush 框架可在此处下载。下载包括所有 API 的完整 Javadoc 和带有源代码的示例应用程序。

图 2. Pervasive DataRush 架构
Pervasive DataRush 和 Pervasive Data Profiler
Pervasive DataRush 引擎已集成到 Pervasive Data Profiler 中。Pervasive DataRush 是构建处理数据迅速的引擎的起点,满足业务管理和科学研究人员的实时需求。此外,Pervasive DataRush 负责 Pervasive Data Profiler 的所有源数据连接需求。
关于 Pervasive Data Profiler
已发布一年以上的产品;目前为 4.2 版本
- 剖析客户数据集;提供剖析器报告
- 利用 Pervasive DataRush 作为数据处理引擎
- 在 Pervasive DataRush 之上提供 UI 结构
- 根据用户偏好生成剖析器描述符
- 将剖析器描述符转换为数据流图
- 使用 Pervasive DataRush 引擎执行数据流图
- Pervasive Data Profiler 使用 DMS,这是一个基于 Pervasive Data Integrator™ C++ 32 位连接器的 Java 包装器,支持各种连接选项
- 在数据覆盖范围方面提供了巨大的功能提升
摘要
Pervasive DataRush 填补了数据密集型、多线程业务逻辑的空白,这种逻辑对于充分利用多核 SMP 硬件至关重要。该框架通过 100% Java 解决方案无缝提供此逻辑,并满足大型数据源的需求。它可以轻松嵌入,并允许广泛的源和目标连接器开发,以及提供“自定义”数据转换和通用处理逻辑的组件开发。
附录:J2EE 与数据流框架
首先,让我们来看看应用程序服务器提供了什么
- 一个具有面向方面能力的容器,提供高度可配置的安全、事务支持、数据库交互支持和通信支持……基本上是大多数客户端/服务器类型项目所需的所有东西
- 分布式事务(用于性能扩展的集群功能)
- 一个用于定义对象生命周期、线程模型、多种交互策略(会话 Bean、无状态会话 Bean、实体 Bean、消息驱动 Bean)和事务依赖关系的框架
J2EE 目标的应用类型
- 高级业务事务
- Web 应用程序
- Web 服务
这天然赋予了 J2EE 以下特性
- 重量级、高粒度的业务事务
- 每个业务事务分配一个线程
- 每个事务可能分配一个数据库连接
- 每个事务至少有一个或多个由框架控制的对象
- 单线程事务
- 事务内操作的严格限制(容器合同要求 Bean 必须位于“盒子”内)
应用程序服务器的目标是可能分布式的业务事务,因为它们通常使用中央数据库存储库来进行 OLTP 类型的数据。业务事务通常是一个工作单元,需要访问多个数据库表,甚至跨多个数据库进行访问和修改。事务通常是离散的、相互独立的事件。这有助于性能扩展,因为事务可以分布。
然而,当开发人员想要运行一个输入量达数十亿行的、数据密集型的应用程序时,应用程序服务器不是首选的引擎。每个记录或事务的开销太高,“事件”不是离散的,因为它们可能有很多依赖关系(考虑聚合),并且每个“事务”可能涉及数据库,也可能不涉及。在这种情况下,需要一个高度可伸缩的数据处理引擎:一个能够并行处理数据、管理数据依赖关系并支持广泛连接性的引擎。
Pervasive 的一个关键 BSP 客户做得很好。他们使用应用程序服务器集群进行“控制”处理。当来自客户的新输入文件到达时,一个控制事件通过 Web 服务到达其网络,并通过应用程序服务器(IBM WebSphere®)进行处理,该服务器写入一个数据库事务来表示新文件及其状态。然后调用数据处理服务器(Pervasive DataRush 引擎)来执行繁重的数据处理。这种数据处理可能涉及更新数据库,但通常更多的是批量抽取/加载或批量更新,而不是 OLTP。一旦繁重的数据处理完成,应用程序服务器再次介入,将业务事务“推”向前进(这可能包括后续更多的繁重数据处理)。这是“控制”和“数据”处理的良好结合,使用了适合工作的工具。
因此,需要应用程序服务器和数据处理服务器这两种服务器框架,因为它们提供了截然不同的功能。它们可以协同工作,以实现业务流程,从而能够以高度可伸缩的方式处理数百万条业务数据记录。