新書推薦:
《
宽容是件奢侈品(人生360度·一分钟经典故事)
》
售價:NT$
203.0
《
甲骨拼合六集
》
售價:NT$
1520.0
《
视觉美食家:商业摄影实战与创意解析
》
售價:NT$
602.0
《
中国经济发展的新阶段:机会与选择
》
售價:NT$
454.0
《
DK月季玫瑰百科
》
售價:NT$
959.0
《
为你想要的生活
》
售價:NT$
301.0
《
关键改变:如何实现自我蜕变
》
售價:NT$
352.0
《
超加工人群:为什么有些食物让人一吃就停不下来
》
售價:NT$
454.0
|
內容簡介: |
本书是一本指导Storm用户实践应用的指南,从Storm组件的应用细节、Storm的代码逻辑,到如何优化拓扑性能,以及如何在生产环境中部署Storm集群,作者将TheLadders的项目实践经验都整理归纳并在本书中完整呈现,配上大量图例说明,还附带了应用代码演示,使读者可以在短时间内学到作者花费多年才总结出来的Storm知识精华。
|
目錄:
|
目录?Contents
译者序
序
前言
致谢
关于本书
关于原书封面插图
第1章 Storm简介1
1.1 什么是大数据1
1.1.1 大数据的四大特性2
1.1.2 大数据工具3
1.2 Storm如何应用于大数据应用场景5
1.3 为什么你希望使用Storm9
1.4 小结10
第2章 Storm核心概念11
2.1 问题定义:GitHub提交数监控看板11
2.1.1 数据:起点和终点12
2.1.2 分解问题12
2.2 Storm基础概念13
2.2.1 拓扑13
2.2.2 元组15
2.2.3 流16
2.2.4 spout17
2.2.5 bolt18
2.2.6 流分组20
2.3 在Storm中实现GitHub提交数监控看板22
2.3.1 建立一个Storm工程22
2.3.2 实现spout23
2.3.3 实现bolt26
2.3.4 集成各个部分组成拓扑29
2.4 小结30
第3章 拓扑设计31
3.1 拓扑设计方法32
3.2 问题定义:一个社交热力图32
3.3 将解决方案映射至Storm的逻辑33
3.3.1 考虑数据流本身施加的要求33
3.3.2 将数据点表示为元组34
3.3.3 确定拓扑组成的步骤35
3.4 设计的初步实现38
3.4.1 spout:从数据源读取数据38
3.4.2 bolt:连接至外部服务39
3.4.3 bolt:将数据寄放在内存里41
3.4.4 bolt:持久化存储到数据库45
3.4.5 定义组件间的流分组策略47
3.4.6 在本地集群模式中构建一个拓扑48
3.5 扩展拓扑49
3.5.1 理解Storm中的并行机制50
3.5.2 调整拓扑配置来解决设计中遗留的瓶颈54
3.5.3 调整拓扑以解决数据流中固有的瓶颈60
3.6 拓扑的设计范式63
3.6.1 分解为功能组件的设计方法65
3.6.2 基于重分配来分解组件的设计方法65
3.6.3 最简单的功能组件与最少的重分配次数69
3.7 小结70
第4章 设计健壮的拓扑71
4.1 对可靠性的要求71
4.2 问题定义:一个信用卡授权系统72
4.2.1 有重试特性的概念性解决方案72
4.2.2 定义数据点74
4.2.3 在Storm上实现带有重试特性的方案74
4.3 bolt基础实现76
4.3.1 AuthorizeCreditCard的实现76
4.3.2 ProcessedOrderNotification的实现77
4.4 消息处理保障78
4.4.1 元组状态:处理完成或失败78
4.4.2 bolt中的锚定、应答和容错80
4.4.3 spout在消息处理保障中的角色84
4.5 回放语义87
4.5.1 Storm中可靠性的级别87
4.5.2 在Storm拓扑中检查仅一次处理88
4.5.3 检查拓扑中的可靠性保障89
4.6 小结94
第5章 拓扑由本地到远程的实施95
5.1 Storm集群96
5.1.1 解析工作结点98
5.1.2 基于信用卡授权拓扑的上下文来理解工作结点99
5.2 Storm集群容错中的快速失败机制100
5.3 安装Storm集群101
5.3.1 配置Zookeeper集群101
5.3.2 在 Storm 的主结点和工作结点上安装依赖组件102
5.3.3 安装Storm到主结点和工作结点102
5.3.4 通过storm.yaml配置主结点和工作结点102
5.3.5 在监督机制下启动Nimbus和Supervisor103
5.4 在Storm集群上运行拓扑104
5.4.1 重新考虑如何将拓扑组件组合在一起104
5.4.2 在本地模式下运行拓扑105
5.4.3 在一个远程 Storm 集群上运行拓扑105
5.4.4 在一个远程Storm集群上部署拓扑106
5.5 Storm UI及其在集群中的角色 107
5.5.1 Storm UI:Storm集群概要107
5.5.2 Storm UI:独立拓扑概要111
5.5.3 Storm UI:独立spoutbolt概要115
5.6 小结118
第6章 对Storm进行调优120
6.1 问题定义:Daily Deals!重生版121
6.1.1 创建概念性解决方案121
6.1.2 将方案转换为Storm设计122
6.2 初始化实施122
6.2.1 spout:读取自一个数据源124
6.2.2 bolt:查找推荐商品125
6.2.3 bolt:为每个商品查询详细信息126
6.2.4 bolt:保存推荐的商品详情127
6.3 调优:我想为它提速128
6.3.1 Storm UI:调优的定位工具128
6.3.2 为性能值建立一个基线集130
6.3.3 判断瓶颈131
6.3.4 spout:控制数据流入拓扑的速率135
6.4 延迟率:当外部系统依然能正常工作时137
6.4.1 在拓扑中模拟延迟137
6.4.2 延迟的外因和内因139
6.5 Storm的指标统计API143
6.5.1 使用Storm的内建
CountMetric143
6.5.2 设置一个指标接收器144
6.5.3 创建一个自定义的SuccessRateMetric145
6.5.4 创建一个自定义的MultiSuccessRateMetric147
6.6 小结149
第7章 资源冲突150
7.1 调整一个工作结点上运行的工作进程数量152
7.1.1 问题152
7.1.2 解决方案152
7.1.3 讨论153
7.2 修改工作进程(JVM)上的内存分配153
7.2.1 问题153
7.2.2 解决方案154
7.2.3 讨论154
7.3 定位拓扑上运行的工作结点进程154
7.3.1 问题154
7.3.2 解决方案155
7.3.3 讨论155
7.4 在一个Storm集群中的工作进程冲突156
7.4.1 问题157
7.4.2 解决方案157
7.4.3 讨论158
7.5 在一个工作进程(JVM)中的内存冲突159
7.5.1 问题162
|
內容試閱:
|
前言?Preface在TheLadders,我们从Storm刚发布时就开始使用(那时的版本号还是0.5.x)。刚开始,我们只在一些非关键的业务流程上部署Storm,在很长的一段时间里,我们的Storm集群都一直处于持续运行的状态,且十分稳定。正因为没出过什么问题,所以我们也没花太多的心思在上面。直到需要应对更多业务时,我们意识到Storm刚好是最合适的解决方案,可结果在实施的过程中暴露出了各种各样的问题。例如,我们需要在生产环境中去应对资源争夺,缺乏对底层运行原理的充分认知,不断寻找优化性能的次优方案,面临缺少可视化的系统运行状态监控,等等。
这促使我们花费大量的时间和精力去研究本书中即将呈现的内容。在学习理解Storm的过程中,我们多次翻阅了所有可找得到的文档,深入研究相关源代码,整理最适合的Storm解决方案,不断总结“最佳实践”,并且我们还增加了自定义的监控系统,便于更有效地排查故障和优化方案。
你可以在网上轻松查到有关Storm的原理文档,但我们发现,市面上依然缺少可以基于生产环境,指导使用Storm的实践应用文档。我们为此在博客上撰写了大量有关Storm的使用经验,所以当Manning找到我们希望合作一本Storm书籍时,大家一拍即合。我们有太多的知识想和大家一起分享,希望可以帮助大家少走我们曾走过的弯路,避开一些我们曾踩过的坑。
虽然我们分享出来的内容主要是基于在生产环境中,如何对Storm集群做优化、调试和故障排查,但我们更希望强调这里对Storm原理所需要的深入理解,同时展示出Storm的灵活性和广泛适用性,即使我们仅能代表众多使用Storm公司中的一员。
在本书中,我们将尽可能演示基于Storm下不同类型的应用案例,讲解Storm的核心概念,以便更容易理解如何在生产环境中执行优化、调试和故障排查。希望这种形式能适用于不同层次的读者,无论是刚接触Storm的新人,还是拥有丰富经验而且遇到过和我们有相似经历的开发者。
本书绝对是一个团队协作的结晶,无论是来自Manning的伙伴,还是来自TheLadders的同事,大家都从最开始就尽可能地支持我们,耐心地协助我们完成测试和验证所有想法。
无论你的Storm使用经验处于什么样的层次,都希望本书能对你有所帮助,我们也很享受撰写本书的过程,因为每一天我们都学到了更多关于Storm的知识。
致谢?Acknowledgements感谢TheLadders所有为我们提供反馈和支持的同事,无论如何,这都是一本属于集体的书,指导着我们在集群上实现更多更酷的功能。
也感谢来自Manning并为本书撰写提供大量帮助的伙伴,这是一个很棒的团队,在合作期间我们从他们身上学到了很多关于写作的知识。特别感谢编辑Dan Maharry,从第1章开始一直到最后一章完成,他为第一次写书的我们提供了大量的帮助,指导我们在错误和挫折中成长。
感谢所有参与本书的技术审校人员,感谢他们贡献了自己私人的时间来核实书中的各技术要点:Antonios Tsaltas,Eugene Dvorkin,Gavin Whyte,Gianluca Righetto,Ioamis Polyzos,John Guthrie,Jon Miller,Kasper Madsen,Lars Francke,Lokesh Kumar,Lorcon Coyle,Mahmoud Alnahlawi,Massimo Ilario,Michael Noll,Muthusamy Manigandan,Rodrigo Abreau,Romit Singhai,Satish Devarapalli,Shay Elkin,Sorbo Bagchi以及Tanguy Leroux。其中我要着重感谢Michael Rose,感谢他为本书提供了大量高质量的反馈,可以说是本书最重要的技术审校人员。
感谢那些创造了Storm的人,没有他们,我们就不会有日夜奋斗的理由!我们还会坚持使用Storm,也期待未来Storm可以带来更新的改进。
感谢Andrew Montalenti在我们早期手稿中提供的反馈,这给了我们很大的启发,并支撑我们完成了本书,他写的推荐序也很棒,我们没办法要求更多了。
最后还要感谢Eleanor Roosevelt,她那句被大量错误引用的励志名言“美国在哪里都讲速度,燥热、肮脏、惹是生非的速度”,鼓舞着我们在困难中前进,持续地学习Storm。
我们在看颁奖仪式时学到的一件事情,就是一定要感谢一路走来帮助我们的每一个人。
Sean Allen感谢Chas Emerick,如果不是因为和他激烈的争论,我可能根本不会下决心来写一本书,如果没有他的付出,可能就不会有人有机会读到这本书了。Stephanie,感谢他在我每次都想放弃的时候鼓励我坚持下去。Kathy Sierra,感谢他在Twitter上和我沟通,让我能梳理清晰写作的思路。感谢Matt Chesler和Doug Grove,他们帮助纠正了第7章的写作方向。感谢在TheLadders向我咨询问题的伙伴,是他们帮助我完成了第8章。感谢Tom Santero,帮我审阅了我在分布式系统上的一些细节。感谢Matt,帮我做了大量写书期间必须要做但我又不想做的事情。
Matthew Jankowski首先感谢我的妻子Megan,她是我永恒的动力来源,无论写书会占用多少时间,她都表现出无限的耐心,给予我坚定的支持。可以说没有她,我是无法完成本书的。还有我的女儿Rylan,感谢她出生在写作的这段时间里,她给了我很大的启迪,也许她到现在还根本没意识到吧。感谢我的家人、朋友和同事,感谢他们的无限支持和建议。感谢Sean和Peter在刚开始听到这个想法后,就愿意一起参与到本书的创作,这的确是一段漫长的经历,感谢有他们一起一路走来。
关 于 本 书?About this book大数据的概念日趋流行,能用于处理实时流数据的工具显得尤其重要,Apache Storm就是这样一个能处理无限流数据的工具。
本书不仅供新手入门,也不只针对高阶学习。尽管理解大数据技术以及分布式系统可以帮助阅读,但我们并不希望这是作为阅读本书的前提条件。我们尽可能尝试迎合新人或是熟悉该领域的读者,本书最初的目的就在于呈现如何在生产环境中应用Storm的“最佳实践”,但为了更深刻地了解Storm的应用,一些基础知识还是有必要预习的,所以我们希望本书的内容可以面向不同经验层次的工程师。
如果你是刚开始学习Storm的新人,那么我们建议先阅读第1~4章,并且确保要全面理解,因为这几章包含了后面所需要的全部基础概念知识。如果你是有Storm应用经验的读者,那希望后面的章节会对你们更有帮助。总之,设计开发基于Storm的解决方案仅仅是个开始,在生产环境中实践这些方案才是我们需要在Storm上思考的重点。
本书的另外一个目的就是希望尽可能描述Storm的应用领域,基于此我们选择了一些典型的用户场景,希望对于理解未覆盖到的用户场景可以起到举一反三的作用。我们在选择用户场景的时候也做了不同难度的区分,希望至少能有一种可以适用于你当前正在使用的Storm场景。
本书旨在关注Storm的运行方式,而我们意识到Storm需要和许多不同的技术一起使用,包括不同的消息队列实现以及数据库操作实现等,所以在讲解每种用户场景的时候,我们会很谨慎地选择使用到的技术。我们不希望花太多精力在技术选型上,从而忽视了Storm使用上的重点讲解,所以你看到的每一个演示都默认使用的是Java语言。如果将案例中的应用切换到使用另外一门语言,这么做其实很容易,但我们还是希望明确一点,那就是本书的核心讲解并不在这些上面(事实上,我们在自己写的拓扑上大量使用了Scala)。
路线图第1章介绍大数据和Storm在大数据中所处的地位,该章的目的是展示一个选择Storm的理由和时机,一些关于大数据应用的关键特性,各类用于处理大数据的工具,以及明确Storm的工具类型。
第2章借助一个对某GitHub库提交数的统计案例,解释Storm的核心概念。该章将建立学习Storm的相关术语基础,尝试一小段代码来学习建立Storm工程,而这个案例中的概念也将贯穿本书。
第3章讲解在Storm下设计拓扑结构的最佳实践,同时以一个社交热力图的应用为例,展示了如何将问题基于Storm的结构来做分解,以便适用于程序的上下文实现部署。该章还讨论了如何处理不稳定的数据源,或者是不可靠的外部服务。同时在该章中介绍的首字节并行性,也将成为后续章节中的重点,最后在该章中还深入讨论了高级拓扑设计范式。
第4章以一个信用卡的授权系统为例,探讨Storm如何确保消息以上下文的形式传输,阐述Storm的实现机制,并且如何基于一套方案的部署,提供不同层面的可靠性支持。同时该章在最后做一个总结,说明如何在Storm的拓扑结构上,实现这种不同层次的可靠性支持。
第5章涵盖Storm集群的相关细节,还将讨论Storm集群的各类组件,Storm集群如何提供容错机制,以及如何配置一个Storm集群,并在Storm集群生产环境中部署并启动拓扑。该章的提示内容将重点解释Storm的UI部分,因为后面的章节会越来越多地涉及Storm UI中的相关操作。
第6章阐述在Storm的拓扑结构中,基于一个限时抢购系统的应用案例,如何实现反复调优的过程。同时还讨论如何与外部系统协作,以及会对现有拓扑结构产生的影响。最后,我们将借助Storm现有的指标收集API,讲解如何建立你的自定义指标。
第7章涵盖在同时使用多拓扑的时候,Storm集群可能发生的各种冲突。我们将从一个拓扑中出现资源冲突的情况开始,逐步展开至拓扑间的系统资源冲突,以及Storm进程和其他进程甚至是操作系统之间的系统资源冲突分析,该章将带你领略Storm集群的完整应用效果。
第8章深入讲解Storm,在完整理解后,你基本上就能应对各种情况下的调试了。还深入讲解Storm的并行化和执行器的中心单元,Storm的内部缓存调用方式,溢出的前提条件,如何优化这些缓冲配置等,最后讨论Storm的调试日志输出。
第9章讲解Trident架构,它是一个基于Storm的上层抽象应用架构,同时演示基于它开发一个互联网广播应用。还解释Trident结构的优势,以及什么情况下你会使用到它。我们会比较一个常规的Storm拓扑和一个基于Trident结构的拓扑,分析两者之间的区别。该章还将涉及Storm的分布式远程过程调用(DRPC)组件,以及如何借助它来实现拓扑的状态查询。最后,演示一个完整的Trident拓扑部署,以及如何实现该结构的扩展。
代码的下载和使用规范本书中的所有代码可以在https:github.comStorm-Applied中下载,包含以下章节中涉及的源代码。
第2章,GitHub的提交次数计数。
第3章,社交热力图。
第4章,信用卡授权。
第6章,限时抢购系统。
第
|
|