首页 文学文摘 时政新闻 科技科普 经济法律 健康生活 管理财经 教育教学 文化艺术 社科历史

基于分布式流计算的运维数据分析

作者:陈希 杨世登 吴志力 来源:电子技术与软件工程

摘 要 随着运维领域数据采集技术的不断更新,出现了大量实时的非结构化数据,这些实时产生的数据如同流水一样源源不断地流入到数据仓库。如何实时获取运维数据流中的关键信息,并实现快速精准分析至关重要。单靠当前传统的批处理模式很难实现。所以,一种全新的分布式流计算处理模式应运而生,这种处理模式以其良好的扩展性、灵活性、易用性受到业界的欢迎。本文基于分布式流计算技术,采用了插件式可配置的设计理念,构建了分布式的运维分析系统。通过可配置化的资源管理,实现新的监控资源自动注册、汇总注册节点、快速分析、处理、计算,实现对运维数据的实时展现。

【关键词】运维 管理 数据分析 分布式流计算

1 系统设计介绍

分布式流计算系统在各大科技公司拥有无可替代的重要地位,尤其是在在线及近线的海量数据处理上。低延时高可靠是其核心指标。

Spark是一种支持流式计算、批处理和实时查询的计算系统。仅使用一个通用的stack就能够解决一系列问题,同时减少开发及维护成本。除了Spark以外,Twitter的Storm也是比较出名的流式计算系统。

1.1 Spark的设计

Spark Streaming指的是将流式计算分解成一段段的、短小的批处理作业。Spark是这里的批处理引擎,负责把Spark Streaming中的输入数据按照批处理尺寸(比如1秒钟)切成一段段数据,每一段数据又转换成RDD,然后Spark Streaming会将DStream的Transformation操作转换为对RDD的Transformation操作,最后中间结果会保存在内存中。用户可根据业务需求,决定是否将整个流式计算的中间结果进行叠加,又或者直接放到外部存储上。

1.2 Storm的设计

Storm是将Stream流中的事件抽像为元组,而每个Stream流都有一个Stream源,这个源被抽像为Spout,Spout可能装载的是日志文件,也有可能是不断读取队列消息并加工为Tuple。Bolt负责处理数据,Bolt理论上可以消费任意数量的输入流。

Storm的核心抽象就是将Stream流的源头抽像为Spout,再将Stream流的中间状态抽像为Bolt,只要将流的方向指向对应的Bolt,同时它也可以发送新的流给其他 Bolt 使用。Spout和Bolt构成了Storm的最高层次抽像Topology,一个Topology就是一个流的转换图。

1.3 设计的要点

设计系统时,有几个要点需要特别注意,那就是在定义计算拓扑的同时,要兼顾数据如何流动。要方便算法开发人员开展工作,最好是能定义一个算法与框架的交互方式,定义好算法的输入和输出结构。然后拓扑能够组合不同的算法,以便为用户提供统一的服务。计算平台最重大的意义就在于算法开发人员无需了解程序的运行处理方式,只需提供算法与计算逻辑即可高速、可靠地处理海量数据。流式系统最重要的抽象就是Streaming。那么Steaming如何流动?实际上这涉及到消息的传递和分发。数据如何从一个节点传递到另外一个节点是由拓扑定义的,具体实现可以参照下一小节。

2 消息传递和分发

何设计数据之间的消息传递?通过对比Storm和Spark,我们就能明白消息传递和分发是取决于具体系统来实现的。

2.1 Spark的消息传递

Spark的消息传递是通过将用户定义的数据先转换成RDD DAG,由DAG Scheduler 把RDD DAG转化为Stage DAG,每个Stage中包含了一组相同的Task,这便构成了TaskSet,然后TaskSet中的Task被分发到Executor中去执行Stage中包含的算子。最终,转换到开发人员的工作就是事先定义好一系列的RDD,再在RDD上做相应的转化规则,最后系统会将所有的RDD批量放到Spark集群中去运行。

2.2 Storm的消息传递

Storm消息传递机制是单独用一个线程负责执行反序列化并执行用户逻辑,每个Worker都会有一个端口,用于监听接收到的消息并放到消息的目标Task的反序列化队列中。Storm有六种消息分发模式,分别是Shuffle Grouping、Fields Grouping、All Grouping、Global Grouping、Non Grouping和Direct Grouping。

2.3 消息传递要点

消息队列是實现多服务间通信的一个非常通用的解决方案,它使得事务可接受异步处理,应用程序耦合度低,这对于分布式系统尤为重要,毕竟我们不能过于限制应用仅仅部署在同一台物理机上,从而限制了其横向扩展。

3 如何与企业现有的运维系统进行融合

国内各大科技企业,像BAT其实都有应用Spark和Storm。但是它究竟贡献了多少流量,我们无从得知。实际上,大部分的流量,尤其是核心流量还是沿用公司老架构的。

虽然这些公司迭代产品很快,但核心算法和架构基本没有改动太多,因此企业不太可能为了推Storm和Spark这类开源系统而进行大规模的重新开发。只有从零发起的项目,又或者那些小型的试验性项目才有可能采用此类产品。当然了,因为开源产品是“通用”的平台,这就意味着不能达到较高的生产效率,因为它无法针对某些特殊应用场景或需求去进行优化。因此企业最好具备高效开发切合自身需求系统的能力。

4 结论

本文为提升运维数据分析的实时性,引入了分布式流式计算技术。结果表明,本文提出的方法不仅大大缩短了任务的调度时间,显著提升了平台性能,而且此方法还具有非常强的通用性,极大地提升了系统监控实时性。本文研究的内容已经应用实际工程,并在项目工程中得到较好的测试验证,进一步证明系统研究内容是可行且具有一定实际工程价值的。

参考文献

[1]梁奕,李立,宋真祥.基于分布式流计算的路网指挥中心系统数据处理技术[J].城市轨道交通研究,2016(03).

[2]邹志勇.分布式流计算框架容错功能的设计与实现[D].北京邮电大学,2011.

作者简介

陈希(1981-),女,广东省深圳市人。大学本科学历。现深圳市脉山龙信息技术股份有限公司副总经理。研究方向为计算机软件及计算机应用,互联网技术。

作者单位

深圳市脉山龙信息技术股份有限公司 广东省深圳市 518000