Storm介绍(二)

作者:Jack47

转载请保留作者与原文出处

欢迎关注自己的微信公众账号程序员杰克,两限的章会并,也可补加我的RSS订阅源。

本文是Storm系列之一,主要介绍Storm的架构设计,推荐读者在读书Storm介绍(一)的底蕴之上,阅读这等同篇。本文只是作者的读书笔记,偏重于肤浅层次的架介绍,如果想真正了解中设计时的权衡,还欲再多之失读书Storm源码。

了解Storm的架构,有助于帮助我们清楚大型分布式系统设计被得解决的题目,以及缓解问题的笔触,帮助我们再度好的拓展Storm性能调优化。

架构

先上同一摆设Storm的架构图,如果熟悉
GFS和Hadoop的架,会意识这些网的架构图都挺相近。
房地产公司 1

Storm架构图

各个节点的用意

只要你熟悉Hadoop的说话,可以如此做一下类比较:

Hadoop Storm
JobTracker Nimbus(只有一个)
TaskTracker Supervisor(有很多个)
MapReduce任务 Topology

好看看Nimbus大凡调度器,WorkerTask的容器,Task举凡职责的实在实施者。

起步拓扑

以在集群达启动一个拓扑,需要首先将代码打包改成一个“胖jar包”–必须带有有的借助代码,除了Storm它自身,因为Storm集群会提供。然后以平尊设置了storm命令行的机及通过storm jar指令来交付拓扑:

storm jar my-topology-version-with-dependency.jar com.corp.MyTopology arg1 arg2

夫令会连到Nimbus,上传jar包。接下来Nimbus会把拓扑的代码运送至多台不同的机械要JVM上。只有当拓扑在机上部署成功了还要在JVM中初始化了今后,才会真的开始拍卖消息。

Master结点(Master node)

在分布式系统中,调度服务大关键,它的计划性,会直接涉及及网的运行效率,错误恢复(fail
over),故障检测(error detection)和水平扩展(scale)的力量。

集群达职责(task)的调度由一个Master节点来顶住。这大机器上运行的Nimbus进程负责任务的调度。另外一个历程是Storm
UI,可以界面上查看集群和有的拓扑的运行状态。

从节点(Slave node)

Storm集群上有差不多个从节点,他们打Nimbus上下载拓扑的代码,然后去真正履行。Slave上的Supervisor进程是为此来监督与保管实际上运作工作代码的历程。在Storm
0.9过后,又多了一个历程Logviewer,可以用Storm
UI来查看Slave节点上的log文件。
于部署文件storm.yaml蒙,决定了同样尊机器及运行几个worker:

supervisor.slots.ports:
- 6700
- 6701
- 6702

ZooKeeper的作用

ZooKeeper于Storm上不是用来开信息传用之,而是用来提供协调服务(coordination
service),同时储存拓扑的状态与统计数据。

  • ZooKeeper相当于平块黑板,SupervisorNimbus和worker都在上头留约定好之音讯。例如Supervisor启动时,会在ZooKeeper上注册,Nimbus就算可以发现SupervisorSupervisor于ZooKeeper上留心跳信息,Nimbus经这些心跳信息来对Supervisor拓展例行检测,检测出好节点
  • 鉴于Storm组件(component)的状态信息存储于ZooKeeper上,所以Storm组件就好任由状态,可以
    kill -9来杀死

    • 比如:Supervisors/Nimbus的重开不影响在运作面临之拓扑,因为状态还以ZooKeeper上,从ZooKeeper上重复加载一下尽管好了
  • 所以来举行心跳
    • Worker通过ZooKeeper把孩子executor的景以心跳的款式反映给Nimbus
    • Supervisor进程经过ZK把自己的状态为坐心跳的形式反映给Nimbua
  • 囤最近任务之失实情况(拓扑停止时会见去)

Storm的容错(Fault Tolerance)机制

正如“搭建一个Storm集群”一如既往温软介绍的相同,必须用工具要daemontools或者monit来监督Nimbus和Supervisor的后台进程。这样一旦Nimbus或者Supervisor进程挂掉,会为daemontools检测到,并进行再次开。

NimbusSupervisor进程被设计改为很快砸(fail
fast)的(当遇特别的景,进程就会见挂掉)并且是无状态的(状态还保存于Zookeeper或者在磁盘上)。

绝关键之是,worker进程不会见盖Nimbus或者Supervisor挂掉而深受影响。这跟Hadoop是无相同的,当JobTracker挂掉,所有的职责都见面没有了。

  1. 当Nimbus挂掉会咋样?

    而Nimbus是为引进的方处于进程监管(例如通过supervisord)之下,那它们会受再度开,不见面出另影响

    否则当Nimbus挂掉后:

    • 已在的拓扑可以延续健康运转,但是非克交到新拓扑
    • 凑巧于运作的worker进程仍然可继续做事。而且当worker挂掉,supervisor会一直还开worker。
    • 失败的职责不见面被分配至任何机器(是Nimbus的任务)上了
  2. 当一个Supervisor(slave节点)挂掉会如何?

    要是Supervisor是盖引进的道处于进程监管(例如通过(supervisord)[supervisord.org/])之下,那它见面叫另行开,不会见生出另影响

    再不当Supervisor挂掉:
    分配到当时尊机器的保有任务(task)会过,Nimbus会把这些职责(task)重新分配给另外机器。

  3. 当一个worker挂掉会什么?

    当一个worker挂掉,supervisor会重开它。如果开行一直失败那么此时worker也尽管不可知跟Nimbus保持中心跳了,Nimbus会重新分配worker到任何机器

  4. Nimbus算是一个单点故障吗?
    假若Nimbus节点挂掉,worker进程仍然可继承做事。而且当worker挂掉,supervisor会一直还开worker。但是,没有了Nimbus,当需要的时(如果worker机器挂掉了)worker就非可知于重新分配到外机器了。
    之所以答案是,Nimbus在“某种程度”上属于单点故障的。在骨子里被,这种状况没什么不行莫了底,因为当Nimbus进程挂掉,不见面出悲惨的事体闹

硬件要求

ZooKeeper

  1. 推介精心设计过的机器,因为ZooKeeper是Storm的瓶颈
    • 每个机器使用一个ZK的实例
    • 小心为同台机械及之其它进程或虚拟机他们是共享这尊机械的,所以可能会见影响ZK的性能(来源)
  2. I/O是ZooKeeper的瓶颈

  3. 拿ZooKeeper的储存放到自己的磁盘上

  4. 动SSD会显著提升性能
  5. 好端端情况下,Zookeeper的历次写操作都见面联合到磁盘,这就算造成了区区坏磁盘寻址操作(一差是数码,一次是数额的日记)。当所有的worker都发心跳给ZooKeeper时,可能会见明显影响属性(来源)。

    • 需要监控ZooKeeper节点的I/O负载
  6. 推介以生条件达标运行的ZooKooper集群有最少3单节点,这样即便出一个ZooKeeper服务器挂掉了(例如进行保护),也是可以的。

Storm安全性

初设计Storm时,完全无将安全性考虑在内
今天平安性能相关的机能以一步步加进去
Storm 0.9.x版本及的安全题材:

  1. 没有说明机制(authentication),没有授权机制(authorization)
  2. 传输的数额(例如worker之间)没有加密
  3. ZooKeeper上囤积的多少尚未看限制
  4. 假如Nimbus的Thrift端口没有锁住,任意的用户房地产公司代码都得于节点上推行

双重多Storm安全性方面的提议见这里

题外话:
每当触及Storm之后,有个问题在自己之脑际里升起,国内的死去活来商店,比如Baidu,Ali,腾讯,都是来出生Storm这好像实时计算框架的土壤的,可是怎么从来不举行出来吧?

Apache Storm Basic
Training
Fault
tolerance

Storm in pictures

Storm 0.9 Basic
Training


倘你看了本篇博客,觉得对君抱有获,请点击右侧下角的“推荐”,让更多人张!

资助Jack47写作,打赏一个鸡蛋灌饼钱吧

房地产公司 2

微信打赏

房地产公司 3

支付宝打赏

相关文章