-
Storm是什么:
如果只用一句话来描述storm的话,可能会是这样:分布式实时计算系统。按照storm作者的说法,storm对于实时计算的意义类似于hadoop对于批处理的意义。我们都知道,根据google mapreduce来实现的hadoop为我们提供了map, reduce原语,使我们的批处理程序变得非常地简单和优美。对比Hadoop的批处理,Storm是个实时的、分布式以及具备高容错的计算系统。同Hadoop一样Storm也可以处理大批量的数据,然而Storm在保证高可靠性的前提下还可以让处理进行的更加实时;也就是说,所有的信息都会被处理。Storm可以扩展到不同的机器上进行大批量的数据处理,他同样还有其他一些特性。
-
Storm的架构:
Storm的集群由一个主节点和多个工作节点组成。主节点运行了一个名为“nimbus”的守护进程,用于分配代码、布置任务及故障检测。每个工作节点都运行了一个名为“supervisor”的守护进程,用于监听工作,开始并终止工作进程。Nimbus和Supervisor都能快速失败,而且是无状态的,这样一来他们都变得十分健壮,两者的协调工作是由Zookeeper来完成的。Zookeeper用于管理集群中的不同组件。ZeroMQ是内部消息系统,JZMQ是ZeroMQ的Java Binding。有个名为storm-deploy的子项目,可以在AWS上一键部署Storm集群。
-
Storm优势:
a.简单的编程模型。类似于MapReduce降低了并行批处理复杂性,Storm降低了进行实时处理的复杂性。
b.服务化,一个服务框架,支持热部署,即时上线或下线App。
c.可以使用各种编程语言。你可以在Storm之上使用各种编程语言。默认支持Clojure、Java、Ruby和Python。要增加对其他语言的支持,只需要实现一个简单的Storm通信协议即可。
d.容错性。Storm会管理工作进程和节点故障。
e.水平扩展。计算是在多个线程、进程和服务器之间并行进行的。
f.可靠的消息处理。Storm保证每个消息至少能得到一次完整处理。任务失败时,它会从消息源重试消息。
g.快速。系统的设计保证了消息能得到快速的处理,使用ZeroMQ作为其底层的消息队列。
h.本地模式。Storm有一个“本地模式”,可以在处理过程中完全模拟Storm集群。这让你可以快速进行开发和单元测试。
-
Storm存在的问题:
a、目前的开源版本中只是单节点nimbus,挂掉只能自动重启,可以考虑实现一个双nimbus的布局。
b、Clojure是一个在JVM平台运行的动态函数式编程语言,优势在于流程计算,Storm的部分核心内容由Clojure编写,虽然性能上提高不少但同时也提升了维护成本。
-
storm的适用场景:
流数据处理。Storm可以用来处理源源不断流进来的消息,处理之后将结果写入到某个存储中去。
分布式rpc。由于storm的处理组件是分布式的,而且处理延迟极低,所以可以作为一个通用的分布式rpc框架来使用。当然,其实我们的搜索引擎本身也是一个分布式rpc系统。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/opensource/192164.html