Storm会更好.比如, 在Hadoop的workers不关闭,所有的进程不做任何操作的情况下。这些”僵死进程“积累到一定程度用尽了所有的资源,最终会导致这个集群停止不能运作——Hadoop最严重的问题之一. 这个问题的关键在于Hadoop中关闭worker的工作是由它自身负责。但是有时会因为其他很多原因导致worker自我关闭失败. 所以在Storm的设计里面,我把关闭worker的任务交给第一次启动这个worker的daemon负责.最后也证明Storm的这种设计比 Hadoop更鲁棒,也不存在”僵尸进程”的问题.
?
我在Hadoop中遇到的另一个问题就是如果JobTracker因为某种原因停掉,那么在这个JobTracker跑的所有的任务都会终止.真正让人着急的是已经跑了几天的任务就这样被停止了.在Storm里面不会存在单个节点失败的问题,因为“topologies"是一旦开始就不会停止的。因为设计 Storm时就加入了”进程容错“机制:一个Storm daemon的停止和重启对一个正在运行的topologies绝对不会有影响. 当然这种考量会使设计面临更多的挑战,因为你必须要考虑到进程可能在任何时候用kill -9强行停止和重启的情况,但是这样也使它更健壮。
?
在开发阶段的早期我做的一个很关键性的决定就是让我们的一个实习生--Jason Jackson-- 在AWS上做一个Storm的自动部署工具.这个工具在很大程度加快了Storm的开发,因为它能够让我很容易的测试不同大小的集群和配置, 并且迭代更快.
?
被Twitter收购
?
2011年5月,BackType与Twitter谈收购问题. 从各方面来讲,这次收购对我们来讲非常的重要.另外, 对我个人而言也很具有吸引力,因为Twitter品牌效应的作用,由Twitter来发布Storm比由BackType发布更能让Storm有所作为.
?
在收购谈判期间,我在BackType's的科技板块发布了一篇博客向世界宣布了Storm的存在. 这篇博客的真正目的仅仅是为了在与Twitter的谈判中增加我们的谈判筹码.它确实起到了作用:Twitter对这项技术特别感兴趣,在做技能评测的时候,整个评测就演变成了一次大型的Storm演示.
?
这引发了其他令人惊讶的影响。在那篇博客上我不经意的提及Storm作为 “实时的Hadoop” ,这句话就这样流行起来。直到现在人们还在使用它,甚至被许多人简洁地称为 “实时Hadoop” 。这个意外的品牌是非常强有力的,也有利于推广。
?
开源的Storm
?
我们在官方上加入Twitter是在2011年七月,之后我立即开始计划Storm的发布。
?
有两种方式你可以取得发布版的开源软件。第一种是“使之变大”,为项目做许多宣传,尽可能多地在发布的时候增加曝光率。这条途径会有风险(如果软件质量有缺陷或者你陷入困境,项目的人气就会与日递减)。那样就会杀死任何有可能成功的项目。
?
第二条途径是安静地发布代码并且让软件缓慢地获得认可。这避免了第一种途径的风险,(因为)它所拥有的风险与人们查看工程是无关紧要的,可以忽略。
?
我决定采用第一种方式。 我知道Storm是一款高质量且实用的软件,并且因为我有发布第一个开源项目Cascalog ?的经验,我对Storm能否获得认可充满信心。
?
开始我计划通过一篇博文来发布Storm,但后来我有个在大会上发布Storm的想法。在大会上发布可以:
?
1.大会能帮助做营销和推广。
?
2. 我可以直接面向使用Storm的潜在早期使用者群体,他们可以通过博客/微博/电子邮件更大泛围的推广Storm。
?
3. 我可以炒作这次会议, 建起人们对此项目的渴望,这样在发布的那一天它一定会备受关注。
?
所以从多个角度考滤,在大会上发布似乎更好。巧合的是,我已经计划在9月的Strange Loop上讨论一个完全不同的主题。因为我计划在那时发布Storm,我给Strange Loop的组织者,Alex发了封邮件, 将我的会议改为Storm的发布. 正如你从会议简介上看到的, 我会以Twitter的名义对Storm进行介绍。
?
然后,我开始炒作Storm。 在2011年8月,会议前的一个月,我在Twitter的科技博客板块发表了一篇文章,宣布我将在Strange Loop 会议上发布Storm。 在那篇文章中,我通过展示Storm 工作方式的很多细节、并给出示例证明Storm的优雅,以勾起人们对Storm 的兴趣。文章达到了我想要的效果,Storm让人们很兴奋。
?
第二天,我做了一些我认为比较聪明的事情。 我在Storm 邮件列表中写道:
?
如果你想继续了解Storm 或者对Storm 有疑问,请加入Google 讨论组 http://t.co/S7TJlCB。 — Nathan Marz (@nathanmarz) 2011年5月。
这就是我认为聪明的原因。 为了使项目获得认可,你必须解决的一个关键的问题是建立社会认同。 社会认同以很多形式表现: 项目的实际使用记录,Github 上关注者,邮件列表活动,邮件列表订阅者,Twitter 粉丝,项目相关的博客文章数量,等。 如果我在发布项目时就发起邮件列表活动,那么当人们查看邮件时,邮件会显示没有相关活动且关注者很少。 项目有可能会立刻变得很流行,邮件列表活动建立起了社会认同,但是对于这一点,我不敢保证。
?
在邮件列表发布之前,我处在被仲裁的情况。开始时人们问问题和订阅,然后我在建立社会认同感。如果什么事都没有发生,这并不重要,因为项目还没有公布。?
我在最初的那些日子里犯了一个错误,从我是在Twitter上工作这是奇异的,不是为项目而注册一个Twitter账号。Twitter的一个很棒的方式让人们保持关注最新的项目以及不断的展示人们的项目(通过转发)。我没有意识到我应该有一个Twitter帐户,直到后来发布,但幸运的是它证明没有什么大不了的。如果我能再做一次我就会在我的邮件列表上一天内开始 Twitter帐户。?
我写在Twitter上的科技博客和奇怪的循环的开始的时间之间,我花了我的大部分的时间为Storm编写文档。为这个项目这是我做的最重要的事情之一。我写了约12000字的仔细考虑过得文档——教程,引用,API文档等等。很多开源开发者不知道文档是多么的重要:如果人们不理解你的软件,他们就不会使用你的软件。写好的文档是痛苦的,耗时的,但绝对必要的。
?
项目发布在2011年9月19日进行。在发布时我感觉很高兴。 我以“我一直在争论是否开源Storm”为话题开始了我的演讲,伴随着一声巨响演讲开始,我在观众的惊叹中结束了演讲。 在演讲进行到一半时,我说我决定开源Storm来做到两全其美。 并且告诉观众,如果未来我没有开源Storm,请在网上大声地喊出来。 此时,伴随着观众的尖叫,我发布了Storm。
?
一切按照计划进行。 Storm获得了大量的关注,发布的第一天, Github上的粉丝就超过 1000人。 Storm立刻登上了 Hacker News 网站的头条