前 言
开源已经在许多方面从根本上改变了软件的原有面貌。在很多应用环境中,人们都会争论使用开源带来的好处和坏处,主要体现在支持、风险以及总体拥有成本等方面。开源在某些领域比其他领域流行,比如在研究机构中就比在大型金融服务提供商中应用得多。在某些新兴领域,比如Web服务供应商、内容供应商以及社交网络等,开源软件占据主导地位。其原因是多方面的,其中成本是一个非常大的因素。怎么说呢?如果方案要上升到网络规模,那么一般会应用“大数据”解决方案,以期获得更好的效果。凭借极佳的可用性,这些解决方案每秒处理数百万条请求,同时通过各式各样的服务为客户提供定制体验。
这种规模的系统设计需要我们用不同的方式思考问题,采用不同的架构解决方案,而且要了解什么时候应该接受系统的复杂性以及什么时候应该避免这种复杂性。作为行业中人,我们应该掌握这种大规模批处理系统的设计方法。由MapReduce、Bulk Synchronous Parallel以及其他计算范式衍生而来的大规模计算集群已经广泛实施,并且得到了很好的理解。开源掀起了创新浪潮,并推动其发展,而即使是顶级软件开发商也只能努力将Hadoop集成到自家的技术架构中,更别提试图与开源竞争了。
然而,客户是永不满足的,他们想要更多的数据、更多的服务、更多的价值、更多的便利,而且现在就要,并希望成本更低。随着数据量的增加,对实时响应时间的需求也在提高。专注于实时性、规模化的计算平台新时代已经来临。这带来了许多新的挑战,不管是理论上还是实践上都具有挑战性。
本书将帮助你掌握一个平台:Storm处理系统。Storm处理系统是一个开源的、实时的计算平台,最初由社交分析公司Backtype的Nathan Marz编写,后来被Twitter收购,并作为开源软件发布。从那时起,该平台茁壮成长,目前已经成长为一个日益扩大的开源社区:拥有众多用户、贡献者以及产品页面上的成功案例。写这篇前言的时候,该项目在GitHub上拥有超过6000个星、3000多个Twitter粉丝,每个节点每秒可以完成超过100万次交易,而且有近80名相关用户在使用Storm产品实例。这些数字极其可观。此外,在本书的结尾你会发现,无论你用哪种语言(与你的思维方式以及解决方案交付方式相一致的语言)研发系统,以Storm平台为基础都会非常愉快。
本书通过一系列实例指导你学习Storm。书中的例子源于实战用例,并随着内容的展开介绍各种概念。此外,本书旨在围绕Storm技术促进DevOps实践,使读者能够开发Storm解决方案,同时可靠地交付具有价值的产品。
目 录
第1章 搭建开发环境 /
1.1 简介
1.2 搭建开发环境
1.3 分布式版本控制
1.4 创建“Hello World”Topology
1.5 创建Storm集群——配置机器
1.6 创建Storm集群——配置Storm
1.7 获取基本的点击率统计信息
1.8 对Bolt进行单元测试
1.9 实现集成测试
1.10 将产品部署到集群
第2章 日志流处理 /
2.1 简介
2.2 创建日志代理
2.3 创建日志Spout
2.4 基于规则的日志流分析
2.5 索引与持久化日志数据
2.6 统计与持久化日志统计信息
2.7 为日志流集群创建集成测试
2.8 创建日志分析面板
第3章 使用Trident计算单词重要度 /
3.1 简介 /
3.2 使用Twitter过滤器创建URL流 /
3.3 从文件中获取整洁的词流 /
3.4 计算每个单词的相对重要度 /
第4章 分布式远程过程调用 /
4.1 简介 /
4.2 通过DPRC实现所需处理流程 /
4.3 对Trident Topology进行集成测试 /
4.4 实现滚动窗口Topology /
4.5 在集成测试中模拟时间 /
第5章 在不同语言中实现Topology /
5.1 简介 /
5.2 在Qt中实现多语言协议 /
5.3 在Qt中实现SplitSentence Bolt /
5.4 在Ruby中实现计数 Bolt /
5.5 在Clojure中实现单词计数Topology /
第6章 Storm与Hadoop集成 /
6.1 简介 /
6.2 在Hadoop中实现TF-IDF算法 /
6.3 持久化来自Storm的文件 /
6.4 集成批处理与实时视图 /
第7章 实时机器学习 /
7.1 简介 /
7.2 实现事务性Topology /
7.3 在R中创建随机森林分类模型 /
7.4 基于随机森林的事务流业务分类 /
7.5 在R中创建关联规则模型 /
7.6 创建推荐引擎 /
7.7 实时在线机器学习 /
第8章 持续交付 /
8.1 简介 /
8.2 搭建CI服务器 /
8.3 搭建系统环境 /
8.4 定义交付流水线 /
8.5 实现自动化验收测试 /
第9章 在AWS上部署Storm /
9.1 简介 /
9.2 使用Pallet在AWS上部署Storm /
9.3 搭建虚拟私有云 /
9.4 使用Vagrant在虚拟私有云上部署Storm /