本文特别适合流计算应用的开发人员阅读,对需要了解和设计流计算架构的人员也有很大的参考价值。
进入 21 世纪,由于处理器性能的大幅提升以及网络技术和应用的日新月异, 数据的传播和交换正经历革命性的变化。图灵奖获得者吉姆·格雷(Jim Gray)认为,网络环境下每 18 个月产生的数据量等于过去几千年的数据量之和。不仅如此,数据还具有实时、异构、非结构化等一系列特点。目前大多数数据分析平台如 Hadoop,采用离线计算的方式来处理具有上述特征的数据,耗费的时间少则数天,多则数月,极大地延误了业务决策的执行,最终造成商机的丧失。流计算就是伴随着大量非结构化、异构、动态流数据实时分析处理进而快速做出业务决策需要而孕育产生的新技术,它解决了传统离线计算过于耗时这一主要矛盾。与传统离线计算利用相对静态存储的数据进行业务分析的过程不同,流计算要求能够连续地把分析过程运用于不断更新的动态流数据,并且能够对业务分析模型进行动态调整,从而产生更加准确的数据以帮助决策。
IBM 公司的 InfoSphere Streams(以下简称 Streams)产品就是适应这种要求而产生的分布式流计算平台。它源于 IBM 研究院 2003 年开始的 System S 项目,总共有 80 多位 IBM 专业人员参与其中,于 2009 年完成产品化工作,现已成功推出两个主版本。Streams 前瞻性地把支持每秒 6G 或者每小时 21600G (相当于互联网上所有网页数量之和)数据处理能力作为系统设计的指标,实现了流数据“永恒分析”的能力。通过创新的流构架和数学算法,Streams 成功地解决了流计算中一系列具有挑战性的问题:
对于事件和变化需求的迅速响应 对于现有系统连续处理数据能力数量级上的提升 对于多种数据形式和类型的适应 对于系统高可靠性,异构性以及分布性的高效管理
除 Streams 产品之外,比较有名的流计算平台是雅虎贡献给 apache 开源组织的分布式流计算平台 S4。项目开源地址 (http://s4.io/) 首页是这样描述 S4 的:S4 是一个通用的、分布式的、具有可扩展性的、部分容错能力、支持插件的流计算平台。通过研究可以发现,S4 与 Streams 相比,只能算是一个半成品,存在者很多问题尚需解决的问题。比如,数据通讯只支持 UDP 协议,不能保证可靠的数据传输,缺乏负载均衡机制,必须采取手工方式进行部署等。
相比较,Streams 作为一个流计算平台,不仅实现了系统的高可靠性,高可扩展性,负载均衡等设计目标,而且提供了完整的解决方案,包括一个运行时环境和编程模型来简化需要对大批量连续流数据 进行提取、过滤、分析以及关联的应用程序的开发,能够广泛应用于制造、零售、交通运输、金融证券以及监管各行各业的解决方案之中,使得实时快速做出决策的理念得以实现。下面我们先从 Streams 的运行时环境出发,来探讨 Steams 的整体架构;然后给出 Streams 应用程序的拓扑结构以及构建高性能 Streams 应用程序应该考虑的一系列问题。最后将讨论 Streams 的失败恢复机制以及高可用性。
Streams 实例
Streams 运行时环境也称为 Streams 实例,它由一系列相互交互的,运行在一个或多个主机上的服务构成。典型的拓扑结构如下图所示:
图 1 InfoSphere Streams 实例架构
如上图所示的典型的拓扑结构下,管理服务部署于一台独立的管理主机上,提供如下服务:
Streams Web 服务 (SWS) 是一个可选的服务,提供 Streams 实例基于 web 通讯协议的访问与管理。 Streams 应用程序管理器 (SAM) 接收和处理作业的提交和取消请求,主要通过和调度器 (SCH) 进行交互来实现。 Streams 资源管理器 (SRM) 负责 Streams 实例的初始化,聚合系统范围内的性能度量指标,并和 每个应用主机上的主机控制器 (HC) 进行交互。 调度器 (SCH) 从 SRM 收集运行时性能度量指标,之后把这些信息发送给 SAM 来确定哪个应用主机 被调度以运行特定的 Streams 应用程序。缺省的调度模式是基于负载均衡的,基于预测的调度模式 使用资源消耗模型来确定
合适的主机来运行应用程序。 命名服务 (NS) 用于提供管理服务的位置信息。 认证授权服务 (AAS) 用于认证并且授权用户的服务请求和访问。 恢复数据库用来存储管理服务运行状态,当发生软硬件故障时可用于系统的恢复。
除了运行一系列管理服务的管理主机之外,还存在一个或多个应用主机,用于执行 Streams 应用程序。 每个应用主机包括:
主机控制器 (HC) 用于启动和监控运行在特定主机上的所有处理元素 (PE)。 处理元素容器 (PEC) 以操作系统二进制程序形式存在,主要负责对处理元素 (PE) 的动态加载来完成特定的任务。
此外,在这种典型拓扑结构下,还需要共享文件系统来共享实例的配置信息以及跨主机的 SPL 应用程序执行体。共享文件系统必须和 POSIX 兼容,一般可使用网络文件系统 (NFS)和 IBM 通用并行文件系统(GPFS)。