使用 IBM InfoSphere Streams 进行模拟

学习如何使用 IBM® InfoSphere® Streams 进行模拟。在本文中,我们将依据 Nagel-Schreckenberg 模型构建高速公路的交通模拟,以此作为一个示例。

Holger Karn, 高级技术员, IBM

作者 Holger Karn 的照片Holger Karn 于 1993 年加入 IBM,拥有为 IBM 数据库构建成功的数据库工具的丰富经验。在他的职业生涯中,曾担任过多个 IBM 产品的开发的技术软件架构师,这些产品包括 DB2 Performance Expert for LUW、Optim Performance Monitor 和 IBM OMEGAMON XE for DB2 Performance Expert,他还在 IBM 2003 年收购 Candle 时,帮助领导了 IBM DB2 PE 产品与 Candle Corp. 的 OMEGAMON 产品的合并。他现在是一名高级和执行 IT 架构师,帮助客户使用 IBM 最新的技术。



Thorsten Niehues, 顾问, Niehues IT Consulting

Thorsten NiehuesThorsten Niehues 在 Technical University in Stuttgart (HFT) 从事计算机科学研究。他曾在美国的 Contitech North America 实习,担任 IT 领导。Niehues 在 IBM 编写了他的学士论文 “开发一种交通模拟”。他自 2004 年就开始创业,以前曾为多家公司工作过,包括 T-Systems、ETAS (Bosch) 和 IBM。



2012 年 9 月 03 日

免费下载:IBM® InfoSphere Streams V2 试用版
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

简介

IBM 通过 InfoSphere Streams 提供了一个强大且可扩展的解决方案来处理每秒数百万个数据元组的持续流。该流引擎提供了一种健壮、高度可用且可扩展的运行时,能够在数百个节点和 CPU 核心上执行分析逻辑。这为您提供了专心使用数据的自由,让您无需花时间研究如何和在何处使用数据。

在一种典型的操作领域,InfoSphere Streams 可帮助您处理动态传入的数据,在不到一秒内对新事件做出反应,无需在事后延迟几分钟或者甚至几小时再处理数据。图 1 显示了一种系统架构,Streams 在该架构中帮助处理每天 60 万个与手机网络中传送的通话有关的呼叫数据记录。

图 1. Streams 可以帮助检测手机网络中的问题
该图显示了 Streams 如何帮助检测一个手机网络中的问题

处理这些记录,并将它们加载到 BI 和帐户系统中的时间从 12 小时减少到了几秒钟,现在可以实时查看客户活动和网络质量。

尽管 Streams 最初设计来处理动态数据,但它也可用于模拟用途。下一章将介绍如何设置数据流,使数据在处理后再次进入处理引擎。有一些难题需要解决,它们可能不那么明显,但下面将详细介绍它们。


Streams 基础知识

是指从来源到目标的一个持续数据流。该数据具有元组 的形式,其中包含一组固定的属性。一个流可能类似于数据库中的内容。在数据库中,数据存储在行和列格式中。列是由数据记录(或行)组成的单独定义的元素。在 Streams 中,这些数据记录称为元组,列称为属性

要理解 Streams 处理的概念,一定要理解 4 个术语:接收槽/来源适配器、操作符、Streams 编程语言 (SPL) 和 Streams 运行时环境。

图 2. Streams 环境
该图显示了 Streams 环境

一个流的来源称为,而目标称为接收槽。这样一个接收槽或源可能是一个文件、数据库、TCP/IP 套接字或任何其他自定义的 Java™ 或 C++ 程序,用于生成或保存元组。

操作符 允许处理流元组,以便过滤、聚合、合并、转换或执行复杂得多的数学函数,比如快速傅立叶变换。他们接收一个或多个流作为输入,执行元组和属性的处理,生成一个或多个流作为输出。

一个 Streams 应用程序是一组通过流连接的这类操作符的一个集合。Streams 应用程序是使用声明性编程语言(比如 SQL)编写的。不同于更加常见的编程语言,比如 C、C++ 或 Java 编程语言,声明性编程语言不包含完成工作的方式,而包含应有的预期结果。编译器将预期结果的描述转换为编程代码,执行必要的操作来获得预期的结果。

在执行 Streams 应用程序期间,运行时将负责以可靠的方式执行接收槽适配器、源适配器和操作符,将它们分散在可用的处理核心和节点上,以实现最优的吞吐量。

在传入元组的过程中,可使用 Streams 应用程序在流上执行分析。可用的信息在生成后即可使用,所以您拥有这些信息的近实时的视图,无需等待下一个典型处理窗口。


使用 Streams 运行模拟

在一项最新的概念研究中,我们开发了一种交通模拟来模拟高速公路网络(工地、移动的工地、事故、附加车道和速度限制)的吞吐量和交通拥堵时长的变化。选择 Streams 环境是源于它高度可扩展的并行执行运行时,它非常适合 Nagel-Schreckenberg 交通模拟模型。

此模型模拟了每辆汽车、卡车或摩托车的移动。一次模拟循环为 1 秒。道路划分为分段,每个分段 7.5 米长,每个车辆将依据交通规则和速度来移动,并且可以加速或减速。

出于简单性和可管理性,我们无法在一个大实体中模拟整个街道网络。一个街道的每一分段(十字路口、高速路互通路口或人行横道)将作为一个独立的 Nagel-Schreckenberg 模型来管理,然后将每一分段与其他分段连接起来。离开一个分段并进入另一个分段的车辆必须在每个模拟周期结束时转交给相应的分段。

图 3. 互联的 Nagel-Schreckenberg 分段
该图显示了互联的 Nagel-Schreckenberg 分段

为什么每个循环必须是同步的

每个街道由一个 Streams 应用程序模拟。Streams 环境将计算任务分配给可用的计算机和处理器资源。在每个 Streams 应用程序完成一个循环后,新的循环才能开始,这至关重要,因为计算较短的街道的应用程序将会处理比其他应用程序更多的循环,这会导致较短的街道在后续街道上放入更多的车辆。只要每个街道只有一个后续街道,就不会出现这个问题。只要存在入口/出口匝道和高速公路互通路口,就像真实生活中一样,不同的循环速率就会导致问题。

进入和离开道路分段

每个 Streams 应用程序可以使用预定义或自定义的接收槽和源适配器,让 Streams 元组进入或离开一个 Streams 应用程序。在我们的示例中,一个源适配器将等待车辆从以前的道路分段进入,另一个接收槽适配器将处理离开这些分段以进入互联的分段的车辆。标准的源适配器和接收槽操作符可在文件、数据库或 TCP/IP 套接字中读取或写入各种格式的数据,但没有跨所有 Streams 应用程序同步模拟周期的必备能力。我们实现了一个独立的服务器来同步我们的接收槽和源适配器:TCP/IP 接收槽和源适配器。

实现同步

在每个循环开始时,所有车辆都通过一个监听 TCP/IP 套接字的源适配器插入 Streams 应用程序。要同步所有 Streams 应用程序的循环速率,每个应用程序需要在所有应用程序都完成前一个循环之后才能继续处理输入数据。Streams 排序操作符可用于此用途。它在所谓的窗口中对元组进行排序,并一次释放所有排序的元组。在我们的示例中,源适配器在道路分段上放置了一个称为 punctor 的特殊车辆,以表明已经接收到所有车辆。punctor 操作符会等待这样一个 punctor 车辆并生成一个窗口标记,该标记告诉排序操作符已经收到此模拟周期的所有车辆并且可以一次释放它们。在下图中,每个车辆随后都会依据 Nagel-Schreckenberg 模型的规则进行移动。

图 4. Streams 应用程序和 Java 线程之间的流
该图显示了 Streams 应用程序和 Java 线程之间的流

处理结束时,会将该流拆分为两部分:所有离开的车辆(包括 punctor 车辆本身)由 TCP 接收槽发送到同步器,停留的车辆直接重定向到 punctor 操作符。

同步器和 Streams 应用程序通过 TCP 套接字进行通信。Streams 应用程序使用一个 TCP/IP 接收槽操作符将车辆数据以逗号分隔值 (CSV) 字符串的形式写入套接字。同步器已实现为一个独立的 Java TCP/IP 服务器,它从该套接字接收车辆数据。它跟踪所有已经启动的 Streams 应用程序,并且知道哪些应用程序已发送了它们的 punctor 车辆。一旦所有 Streams 应用程序完成了它们的模拟周期,就会向车辆生成器发送一个信号,车辆生存期现在会将所有离开某个分段的车辆发送到它们现在进入的分段的源适配器。


结束语

我们展示了 InfoSphere Streams 不仅可用于数据元组的实时处理,还可用作用于模拟的并行处理基础架构。它的基础运行时支持高可用性、调度和并行执行,允许您将精力集中在数据的使用上。Streams 运行时随带了一组预定义的操作符和函数,它们将使您能够更好地满足您的处理需求。如果它们不够用,您可以轻松地向它添加自定义操作符和函数。

参考资料

学习

获得产品和技术

  • 使用 IBM 产品评估试用版软件 构建您的下一个开发项目,这些软件可直接从 developerWorks 下载。
  • 现在您可以免费使用 DB2。下载 IBM 软件下载:IBM DB2 Express-C 10.1,这是 DB2 Express Edition 的一个面向社区的免费版本,提供了与 DB2 Express Edition 相同的核心数据功能,为构建和部署应用程序提供了牢固的基础。

讨论

条评论

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=Information Management
ArticleID=832892
ArticleTitle=使用 IBM InfoSphere Streams 进行模拟
publish-date=09032012