跳转到内容

大数据/监控的实用DevOps

来自Wikibooks,开放世界中的开放书籍

大数据技术已成为学术界和工业界日益关注的焦点。这些技术使企业能够从其可用数据中提取有价值的见解,因此越来越多的中小企业对使用此类技术表现出越来越浓厚的兴趣。用于处理大量数据的分布式框架,例如Apache Hadoop[1]、Spark[2]或Storm[3]越来越受欢迎,并且基于它们开发的应用程序也越来越普遍。然而,开发满足业务关键型云应用程序预期的高质量标准的软件对于中小企业来说仍然是一个挑战。在这种情况下,模型驱动开发 (MDD) 范式和流行的标准(例如 UML、MARTE、TOSCA[4])对解决这一挑战寄予厚望。在开发大数据应用程序期间,监控每个应用程序版本的性能非常重要。获得的信息可供软件架构师和开发人员用来跟踪已开发应用程序随时间的演变。监控也有助于确定影响不同应用程序版本质量的主要因素。在整个开发阶段,运行的应用程序在记录信息的详细程度方面往往更冗长,以便开发人员可以深入了解已开发的应用程序。由于日志的冗长性,数据密集型应用程序会产生大量监控数据,这些数据需要收集、预处理、存储并提供高级查询和可视化功能。很明显,需要一个可扩展、高可用且易于部署的平台来监控多个大数据框架。该平台可以收集资源级指标(例如 CPU、内存、磁盘或网络),以及从 Apache HDFS、YARN、Spark 和 Storm 收集的框架级指标。

在所有开发环境中,尤其是在 DevOps 环境中,基础设施和应用程序性能监控非常重要。它允许开发人员检查当前性能并评估潜在的性能瓶颈。大多数监控工具和服务侧重于提供特定应用程序和/或平台的独立视图。这意味着,如果 DIA 基于多个平台,则很可能一个监控解决方案无法支持所有平台。DMon 的设计使其能够监控最常见的大数据平台以及系统/基础设施指标。这样,在开发过程中,只有一个监控解决方案能够处理所有监控需求。

当然,平台监控是不够的,大多数情况下开发人员需要了解其应用程序的性能。DMon 可以轻松扩展以通过JMX或自定义日志格式收集指标。然后,可以使用 DMon 查询和可视化所有生成的指标。

现有解决方案

[编辑 | 编辑源代码]

目前市场上有很多工具和服务致力于监控不同的云部署资源和服务。大数据服务也不例外,以下是一些使用的解决方案:

  • Hadoop 性能监控 UI[5]提供了一个 Hadoop 内置解决方案,用于快速查找性能瓶颈并提供可能针对更好性能进行调整的配置参数的可视化表示。基本上,它是一个轻量级的 Hadoop 服务器监控 UI。其主要优势之一是 Hadoop 发行版中的可用性和易用性。另一方面,它在性能方面被证明是相当有限的。例如,每个任务在 gc 中花费的时间相当高。
  • SequenceIQ[6]提供了一个用于监控 Hadoop 集群的解决方案。SequenceIQ 提出的用于监控的架构基于 Elasticsearch[7]、Kibana 和 Logstash。该架构的主要目标是在监控工具和现有的 Hadoop 部署之间实现清晰的分离。为此,使用了三个 Docker 容器。简而言之,监控解决方案由客户端和服务器容器组成。服务器容器负责实际的监控工具。在此特定部署中,Kibana 用于可视化,Elasticsearch 用于合并监控指标。通过 Elasticsearch 的功能,可以水平扩展和集群多个监控组件。客户端容器包含要监控的工具的实际部署。此实例包含 Logstash、Hadoop 和 collectd 模块。Logstash 作为客户端连接到 Elasticsearch 集群并在那里存储已处理和转换的指标数据。基本上,此解决方案由一系列用于监控不同层级不同指标的工具组成。此解决方案的主要优势之一是能够轻松地向系统添加和删除不同的组件。此架构的另一个有趣方面是能够轻松地从工具中提取不同的信息。
  • Datastax[8]提供了一个解决方案 OpsCenter,可以将其集成以监控 Cassandra[9]安装。使用 OpsCenter,可以监控 Cassandra 实例的不同参数。它还可以处理其运行的实际机器提供的许多其他参数。OpsCenter 公开了一个交互式 Web UI,允许管理员向部署中添加或删除节点。OpsCenter 提供的一个有趣功能是自动负载平衡。为了将 OpsCenter 与其他工具和服务集成,提供了开发人员 API。

工具的工作原理

[编辑 | 编辑源代码]

DICE 监控平台 (DMon)[10]架构被设计为一个 Web 服务,它能够部署和管理多个子组件,这些子组件又能够监控大数据应用程序和框架。与其他监控解决方案相比,DMon 旨在提供尽可能多的有关大数据框架子组件当前状态的数据。这一意图带来了许多传统监控解决方案中不存在的技术挑战,因为提供近乎实时的细粒度指标需要一个系统,该系统应具有高可用性以及易于扩展性。传统上,Web 服务是使用单体架构构建的,其中系统的大多数组件都在单个进程(传统上是 JVM)中运行。这种类型的架构具有一些关键优势,例如:部署和网络非常简单,而扩展此类系统需要在负载均衡器实例后面运行服务的多个实例。另一方面,这种单体架构有一些严重的限制,这将直接影响 DMon 的开发。首先,对一个组件的更改可能会对应用程序看似无关的区域产生不可预见的影响,因此添加新功能或任何新开发在时间和资源方面都可能代价高昂。其次,各个组件不能独立部署。这意味着,如果只需要服务的特定功能,则无法将其解耦和单独部署,从而阻碍了可重用性。最后,即使组件被设计为可重用的,它们也往往更注重可读性而不是性能。

考虑到单体架构的这些局限性,我们决定为DMon使用所谓的微服务架构,该架构在大型互联网公司中被广泛使用。这种架构用轻量级服务的分布式系统替换了单体服务,这些服务在设计上是独立的并且专注于狭窄的领域。这些服务可以单独部署、升级和扩展。由于这些微服务是松耦合的,因此它更好地实现了代码重用,而对单个服务的更改不应该需要更改其他服务。集成和通信应使用HTTP(REST API)或RPC请求进行。我们还想将相关的行为分组到单独的服务中。这将产生高内聚性,使我们能够通过仅修改或更新一项服务而不是多项服务来修改整个系统行为。DMon使用REST API在不同服务之间进行通信,请求有效负载编码为JSON消息。这使得创建同步或异步消息变得更加容易。

DMon架构

该图显示了DMon平台的整体架构,它将与异常检测和跟踪检查工具一起成为lambda架构的一部分。为了创建一个可行的lambda架构,我们需要创建三层:速度层、批处理层和服务层。Elasticsearch将代表服务层,负责加载收集的监控数据的批处理视图,并使其他工具/层能够在其上进行随机读取。速度层将用于查看最近的数据并在查询函数中表示它。在异常检测的情况下,这意味着使用无监督学习技术或使用来自批处理层的预训练模型。批处理层需要对存储在Elasticsearch中的数据集的大部分进行任意函数计算。这意味着运行长时间运行的作业来训练预测模型,然后可以在速度层上实例化这些模型。然后,所有训练好的模型都将存储在服务层中,并通过DMon查询进行访问。平台的核心组件是Elasticsearch,用于存储和索引收集的数据,以及Logstash,用于收集和处理日志文件数据。Kibana服务器提供了一个用户友好的图形用户界面。构成DMon的主要服务如下:dmon-controller、dmon-agent、dmon-shipper、dmon-indexer、dmon-wui和dmon-mas。这些服务将用于控制核心和节点级组件。

开放挑战

[编辑 | 编辑源代码]

大数据技术正在不断发展。因此,任何监控解决方案都必须跟上不断变化的指标和指标公开系统。例如,DMon能够监控当前正在使用的最常见的平台,但是尚未支持Apache Flink等新平台。

此外,DMon已经支持一些基本的数据预处理,例如平均、窗口和过滤,未来版本可能需要其他操作。数据导出格式也是如此。

应用领域

[编辑 | 编辑源代码]

DMon已在DICE当前支持的所有大数据平台上进行了测试。这些包括

  • Apache Yarn(包括HDFS)
  • Apache Spark(1.6.x和2.x.x版本)
  • Apache Storm
  • Cassandra
  • MongoDB

除了这些平台之外,DMon还能够通过collectd收集各种系统指标。简而言之,它支持所有collectd 支持的指标。在开发过程中,应用程序指标在某种程度上比平台指标更重要,因此,DMon可以轻松扩展以通过Logstash过滤器插件支持任何所需的日志或指标格式。

需要说明的一点是,为使用多个支持平台的DIA收集的指标可以根据接收到的时间戳轻松聚合和导出。例如,如果我们有一个使用Spark的DIA,而Spark又运行在Yarn和HDFS之上,则DMon能够显示上述平台在任何给定时间范围内的所有指标。

DICE监控平台是一个分布式、高可用系统,用于监控大数据技术以及系统指标。将DMon的目标与DICE的愿景相一致,即整合模型驱动开发和DevOps,以实现高质量数据密集型应用程序的快速开发。

DMon在多个层面实现了自动化:监控集群节点上软件组件的部署、监控平台本身的轻松管理,或基于收集的数据自动创建可视化。由于与DICE部署服务(基于Cloudify和Chef cookbook)紧密集成,软件工程师/架构师只需要在DDSM模型或TOSCA蓝图中注释相应的节点为可监控节点,部署服务就会在选定的节点上安装和配置代理,以便DIA部署到集群的那一刻,运行时数据就会流入DMon平台,而无需最终用户进行任何手动干预。

该平台采用微服务架构设计,易于部署和操作,适用于异构分布式云环境。我们报告了使用Vagrant脚本在Flexiant Cloud Orchestrator和OpenStack上成功部署的情况。

这项工具的工作突出了在DevOps环境中对专业监控解决方案的需求。使用轻量级但高吞吐量的分布式监控解决方案,能够跨广泛的大数据服务收集数千个指标,这一点至关重要。在处理开发中的应用程序的初步版本时,这种重要性更加明显。像DMon这样的监控解决方案可以提供应用程序版本当前性能的出色概览。

参考文献

[编辑 | 编辑源代码]
  1. https://hadoop.apache.ac.cn/
  2. https://spark.apache.ac.cn/
  3. http://storm.apache.org/
  4. https://www.oasis-open.org/committees/tosca/
  5. https://www.datadoghq.com/blog/monitor-hadoop-metrics/
  6. http://sequenceiq.com/
  7. https://elastic.ac.cn/
  8. https://www.datastax.com/
  9. https://cassandra.apache.ac.cn/
  10. https://github.com/dice-project/DICE-Monitoring
华夏公益教科书