2015年6月18日星期四

浅析Apache Storm 0.10.0-beta发布:剑指Heron

  在浅析Storm的发布版本之前,先吐槽一下Storm的版本号。我是从0.8.0版本开始接触Storm的,那时候Storm还是推特的开源项目,作为一个Storm的半个老鸟,看到Storm又推出了一个新版本,当然是有些想法的。从2013年,Apache接手Storm之后版本号的发布继续延续了以前的风格。说白了就是众人期望了无数年,版本依然没有过“1”。

  浅析Storm 0.10.0-beta

  //顺序按照官网的要点顺序,翻译+个人见解

  一、集群安全性以及多用户调度部署。

  我们先把官网列的点列出:

  •   Kerberos Authentication with Automatic Credential Push and Renewal

  •   Pluggable Authorization and ACLs

  •   Multi-Tenant Scheduling with Per-User isolation and configurable resource limits.

  •   User Impersonation

  •   SSL Support for Storm UI, Log Viewer, and DRPC (Distributed Remote Procedure Call)

  •   Secure integration with other Hadoop Projects (such as ZooKeeper, HDFS, HBase, etc.)

  •   User isolation (Storm topologies run as the user who submitted them)

  在早期的Storm设计中,并没有考虑系统安全性的问题。

  其实大部分开源软件的发展过程都差不多,早期的发展肯定是以功能以及性能为主,在发展到一定阶段之后,系统安全才会被加以考虑。如今,随着Storm的发展,以及当前实时业务需求的上涨,实际的集群部署也越来越多,安全性的需求也越来越高。

  这次在安全性的支持方面,除了Storm的社区,雅虎、赛门铁克还有Hortonworks作出了不小的贡献。

  主要改动点:

  •   (1)自动更新Kerberos身份验证机制;

  •   (2)可插拔的访问授权以及访问控制机制;

  •   (3)支持多用户调度,并且对于不同用户可灵活配置资源;//这一点在向资源集中调度方向靠拢

  •   (4)模拟多用户调度;

  •   (5)UI方面的改进,支持SSL协议的日志查看器、DRPC页面监控;

  •   (6)优化了与Hadoop生态的集成,主要是安全性方面,包括Zookeeper、Hbase以及HDFS等等;//随着大数据平台一体化,Storm的推广,越来越多的Hadoop生态组件会集成进去

  •   (7)多用户的隔离,即每个用户中允许操作自己提交的拓扑任务;//其实这点跟在引入多用户的时候,必然是需要支持的

  总结:

  安全性方面,不多说,博客虫(微信ID:blogchong)感觉这个点在一般的企业来说,其实优先级是不高的;

  重点是对多用户调度的支持,以及资源管理方面的优化,自从Hadoop2.0以后,资源的集中管理一直是一个热门方向,所以,Storm在这方面的优化还是值得期待的。

  二、版本升级以及持续改进的优化

  在过去,升级Storm往往会出现很多问题,涉及到拓扑的变更、拓扑的重新部署等等。究其因,不同版本之间的数据结构往往是有所出入的。所以,升级的过程不是一个完全向下兼容的过程。

  从storm 0.10.0开始,版本的升级方面将有很大的优化,甚至是可以在不停止拓扑任务的情况下进行版本升级,整个过程也可以实现自动化。

  总结:

  随着Storm的实际部署节点越来越多,必然会面临版本升级的情况,所以这一点的改进是很重要的,因为其对于用户后续的持续使用是一个巨大的考验。

  三、任务以及拓扑部署上的改进优化

  熟悉Storm的朋友可能知道,对于拓扑任务的部署,往往有任何的拓扑改动,我们都需要进行代码的重新编译。如果部署的拓扑规模较大,这将影响很大。

  在新改进的方向中,希望通过外部配置文件的形式,去定义拓扑的布局以及相关的配置。

  先列上官网改进点:

  •   Easily configure and deploy Storm topologies (Both Storm core and Micro-batch API) without embedding configuration in your topology code

  •   Support for existing topology code

  •   Define Storm Core API (Spouts/Bolts) using a flexible YAML DSL

  •   YAML DSL support for most Storm components (storm-kafka, storm-hdfs, storm-hbase, etc.)

  •   Convenient support for multi-lang components

  •   External property substitution/filtering for easily switching between configurations/environments (similar to Maven-style ${variable.name} substitution)

  主要改动点:

  •   (1)优化拓扑的配置以及部署,在代码中将拓扑结构相关的东西剥离;

  •   (2)依然支持现有的拓扑编码;//向下兼容

  •   (3)使用灵活的YAML DSL去定义Spout以及Bolt;//说白了,还是在拓扑构建方面进行优化

  •   (4)依然支持现有的一些接口,比如storm-kafka、storm-hbase、storm-hdfs;//依然是向下兼容,不多说

  •   (5)多语言组件的支持;//以前虽然号称支持多语言,其实除了python以及java以外的语言,开发难度还是挺大的

  •   (6)支持配置环境之间的切换,类似于Maven中${变量名}代替;

  总结:

  向下兼容的一些东西,咱就不多说了,这是版本升级的理所应当支持的功能;

  重点在于拓扑结构的革命性改变,其实我们可以发现,Storm 0.10.0在灵活性使用方面做了很多的该进,包括了这个拓扑结构

  四、提供新的分组策略:局部关键词分组

  现有的Storm分组策略,在0.8版本到现在一直没有改变,如今引入了一个新的分组策略:局部关键词分组策略。

  局部关键词分组与按字段分组(Grouping)一样,不同之处在于,其考虑了下游Bolt的负载情况,更好的利用了剩余资源,尽量达到了节点间的负载均衡。

  总结:

  从这点我们可以发现,Storm的革命性改进除了在灵活性方面,在资源调度方面也是不余余力啊。

  五、优化了日志框架

  调试分布式程序是一件很困难的事,通常我们会通过一个主要的信息来源去分析,那就是程序产生的日志文件。

  但是这同样会产生矛盾,Storm是实时级别的架构系统,对于日志的记录层级难以掌控:多了,容易刷爆磁盘;少了,难以发现问题。

  在Storm 0.10.0中,使用了log4j v2,这是一个具有更高的吞吐量以及更低的延迟的日志架构。并且更有效的利用资源,对于业务逻辑,我们可以轻松的追踪到。

  同样,列上E文关键点:

  •   Rolling log files with size, duration, and date-based triggers that are composable

  •   Dynamic log configuration updates without dropping log messages

  •   Remote log monitoring and (re)configuration via JMX

  •   A Syslog/RFC-5424-compliant appender.

  •   Integration with log aggregators such as syslog-ng

  主要关键点:

  •   (1)通过日志文件大小、时间日期组合的方式,触发日志的滚动;

  •   (2)动态的修改日志配置,不会丢失日志数据;

  •   (3)支持日志的远程监控,以及JMX的远程配置;

  •   (4)支持RFC-5424协议;

  •   (5)Syslog-ng的整合以及支持日志聚合;//未来很有可能使用syslog-ng完全替代syslog,不过需要时间验证

  总结:

  日志这一块的话,其实没什么多说的地方,现有日志其实也足够用了,问题不是很大,当然如果有更好的支持优化,肯定是大赞的。

  六、支持Hive数据的接入

  这个特性将会在0.13中引入,提供数据从Hive接入Storm的API,以及数据Hive落得的API,让数据从Storm到Hive的流程更加的合理以及方便,一旦数据在源头被提交,在Hive即可查询。

  实现Storm到Hive的一体化,在微批处理以及事务处理中支持Hive。

  总结:

  依然是大数据平台一体化的改进,Storm与Hadoop生态的进一步“合体”。

  七、Microsoft Azure Event Hubs的整合

  在Azure云计算平台上支持Storm的部署执行,这个不多说。只能说Storm的影响力越来越大了,很多云平台已经主动和Storm“联姻”了。

  八、对于Redis的支持

  除了Hadoop生态,对于大行其道的Nosql,Storm也开始整合。跟其他组件的支持类似,提供了一些使用案例,同样是Storm大融合的趋势。

  九、JDBC/RDBMS的整合集成

  Storm 0.10.0支持高灵活可定制的集成,几乎兼容任何类型的JDBC。甚至允许拓扑元组数据与数据库数据在拓扑进行灵活的交互。

  总结:

  在Hadoop盛行之前,其实Storm的数据落地方式很单调,其中将Storm处理过后的数据存入数据库中是一种主流,所以,这一方面的优化可以说解决了很多历史遗留问题。

  十、依赖冲突的优化

  直接总结吧:在以往的Storm历史版本中,其实经常会出现依赖版本冲突的现象。在Storm 0.10.0中,对这方面作了优化。好吧,又是一个历史遗留问题,说明Storm在进一步规范化。

  我们来梳理一下总结

  在推特发布Heron后没几天,Apache就发布了Storm的0.10.0,不可谓不及时。

  也难怪,Heron号称颠覆性的设计,虽然它暂时没有开源,虽然Storm已经占据了数据实时处理领域的半壁江山,但是依然危机感十足啊。

  OK,还是回到正题,说说我的感想:

  (1)大数据平台统一融合趋势

  我在《DT时代变革的反思》一文中,曾经说到:支撑大数据得以发展的核心是数据平台。

  在Hadoop大规模离线数据处理技术日渐成熟的今天,实时业务的需求逐渐在上升,这也是Storm得以快速发展的原因之一。

  实时处理平台以及我们现在盛行的Hadoop生态平台,是两个不同的方向,逻辑上是分离的。

  随着大数据处理的需求多样化,数据在不同平台上流通的需求很迫切。

  如今,不管是现在版本Storm对Hive的支持、对redis的支持,还是以往中对HDFS、Hbase、Zookeeper的支持等,这都是Storm对于数据平台一体化做的努力。

  在大数据平台方面,无论是实时处理,还是以Hadoop为代表的批量离线处理或者Nosql存储等几个方面,平台的统一融合将会是一个趋势。

  (2)资源的集中管理

  Storm在资源拓扑任务资源分配方面,一直以来都是一个硬伤。随着Hadoop2.0之后,Hadoop的资源统一交给Yarn管理,在分布式方面基本算是掀起了一股资源管理优化的风潮。

  PS:翻译以及个人见解若有所误差,欢迎指正。

  来源:博客虫投稿,原文链接