1.4.3 Apache Storm

随着互联网业务数据规模的急剧增加,人们处理和使用数据的模式已然发生了天翻地覆的变化,传统的技术架构已经越来越无法适应当今海量数据处理的需求。MapReduce、Hadoop以及Spark等技术的出现使得我们能处理的数据量比以前要多得多,这类技术避免了我们面对海量数据时的措手不及,也在一定程度上缓解了传统技术架构过时的问题。

但是,随着业务数据规模的爆炸式增长和对数据实时处理能力的需求越来越高,原本承载着海量数据处理任务的批处理系统在实时计算处理方面越发显得乏力。这么说的原因很简单,像Hadoop使用的MapReduce这样的数据处理技术,其设计初衷并不是为了满足实时计算的需求。任务式计算模型与实时处理系统在需求上存在着本质的区别。要做到实时性,不仅需要及时地推送数据以便处理,还要将数据划分成尽可能小的单位,而像HDFS这样的系统存储推送数据的能力已经远不能满足实时性的需求。

因此,Apache Storm实时处理系统的出现顺应了实时数据处理业务的需求。Apache Storm是一个开源的、实时的计算平台,最初由社交分析公司Backtype的Nathan Marz编写,后来被Twitter收购,并作为开源软件发布。从整体架构上看,Apache Storm和Hadoop非常类似。Apache Storm从架构基础本身就实现了实时计算和数据处理保序的功能,而且从概念上看,Apache Storm秉承了许多Hadoop的概念、术语和操作方法。

Apache Storm作为实时处理系统中的一个典型案例,其特点和优势如下。

1)高可扩展性:Apache Storm可以每秒处理海量消息请求,同时该系统也极易扩展,只需增加机器并提高计算拓扑的并行程度即可。根据官方数据,在包含10个节点的Apache Storm集群中可以每秒处理一百万个消息请求,由此可以看出Apache Storm的实时处理性能优越。

2)高容错性:如果在消息处理过程中出现了异常,Apache Storm的消息源会重新发送相关元组数据,确保请求被重新处理。

3)易于管理:Apache Storm使用ZooKeeper来协调集群内的节点配置并扩展集群规模。

4)消息可靠性:Apache Storm能够确保所有到达计算拓扑的消息都能被处理。

本书从实时处理系统的角度出发,结合分布式系统开发过程中的各种实践,开发一套基于C/C++实现的实时处理系统,我们会在编程实践过程中针对语言的特殊性讲解大量实时处理系统编程设计指导、编程原理和实践经验,从通信系统的设计、软件架构的设计、模块接口设计、核心组件内部设计与实现,到一些高级特性设计实现,由浅入深地指导读者开发出高性能分布式实时处理系统。随后介绍一些高层抽象,希望读者可以自行研究并进行设计实现,将本书教授的知识融会贯通。最后我们以几个实例介绍如何使用编写的系统进行分析,并在公有云上部署实际的系统与服务,让读者有更深刻的认识。