用于构建分布式系统的数据收集和监视的中间件

时间:2012-11-20 23:11:06

标签: monitoring rabbitmq zeromq data-distribution-service data-collection

我目前正在寻找一个好的中间件来构建监控和维护系统的解决方案。我们的任务是监控,收集数据并维护一个由多达10,000个单独节点组成的分布式系统。

系统聚集成5-20个节点的组。每个组通过处理传入的传感器数据来生成数据(作为一个团队)。每个组都有一个专用节点(蓝色框),充当该组的外观/代理,将数据和状态从组暴露给外部世界。这些集群在地理上是分开的,可以通过不同的网络连接到外部世界(一个可以通过光纤运行,另一个通过3G /卫星运行)。我们可能会遇到更短(秒/分钟)和更长(小时)停机。数据在本地由每个群集保留。

这些数据需要通过外部和外部收集(连续可靠)。集中式服务器(绿色框),供各种客户进一步处理,分析和查看(橙色框)。此外,我们需要通过每个组代理节点监视所有节点的状态。不需要直接监视每个节点,即使中间件可以支持它(处理来自~10,000个节点的心跳/状态消息)也是好的。在代理失败的情况下,可以使用其他方法来精确定位各个节点。

此外,我们需要能够与每个节点进行交互以调整设置等,但这似乎更容易解决,因为这主要是在需要时按节点手动处理。可能需要进行一些批量调整,但总体而言,它看起来像标准RPC情况(Web服务或类似情况)。当然,如果中间件也可以通过一些加号的请求/响应机制来处理这个问题。

Monitoring

要求:

  • 发布/提供连续数据的1000多个节点
  • 数据需要可靠(以某种方式)并连续收集到一个或多个服务器。这可能会建立在中间件之上,使用某种显式请求/响应来请求丢失数据。如果这可以由中间件自动处理,那当然是一个加号。
  • 多个服务器/订户需要能够连接到同一个数据生产者/发布者并接收相同的数据
  • 数据速率最大值为每组10-20每秒
  • 消息大小范围从大约100字节到4-5千字节
  • 节点范围从嵌入式约束系统到普通COTS Linux / Windows盒
  • 节点通常使用C / C ++,服务器和客户端通常使用C ++ / C#
  • 节点应该(最好)不需要安装额外的SW或服务器,即每个节点有一个专用代理或额外服务是昂贵的
  • 安全性将基于消息,即不需要传输安全性

我们正在寻找一种解决方案,可以处理主要代理节点(蓝色)和服务器(绿色)之间的数据发布/轮询/下载以及从客户端(橙色)到单个节点(RPC样式)之间的通信,以便调整设置

似乎有很多关于逆转情况的讨论和建议;将数据从服务器分发到许多客户端,但是很难找到与所描述的情况相关的信息。一般的解决方案似乎是使用SNMP,Nagios,Ganglia等来监控和修改大量节点,但对我们来说,棘手的部分是数据收集。

我们简要介绍了DDS,ZeroMQ,RabbitMQ(所有节点都需要代理?),SNMP,各种监控工具,Web服务(JSON-RPC,REST /协议缓冲区)等解决方案。

那么,您是否对易于使用,强大,稳定,轻松,跨平台,跨语言的中间件(或其他)解决方案有任何建议?尽可能简单但不简单。

2 个答案:

答案 0 :(得分:5)

披露:我是DDS的长期专家/爱好者,我在其中一家DDS供应商工作。

良好的DDS实施将为您提供所需的信息。收集数据和监控节点是DDS的传统用例,应该是它的最佳选择。与节点交互并调整它们也是可能的,例如通过使用所谓的内容过滤器将数据发送到特定节点。这假设您可以通过字符串或整数ID来唯一标识系统中的每个节点。

由于系统的层次性及其纯粹(潜在)大小,您可能必须引入一些路由机制来在集群之间转发数据。一些DDS实现可以为此提供通用服务。通常也支持桥接其他技术,如DBMS或Web界面。

特别是如果您可以使用多播,系统中所有参与者的发现都可以自动完成,并且需要最少的配置。但这不是必需的。

对我而言,您的系统看起来很复杂,需要自定义。我不相信任何解决方案都能“轻松满足要求”,特别是如果您的系统需要具有容错性和强大性。最重要的是,您需要了解自己的要求。在你提到的那些背景下关于DDS的几句话:

  

1000多个节点发布/提供连续数据

这是一个很大的数字,但应该是可能的,特别是因为您可以选择利用DDS支持的数据分区功能。

  

数据需要可靠(以某种方式)并不断收集到   一个或多个服务器。这很可能建立在   中间件使用某种显式请求/响应来请求   丢失数据。如果这可以由中间件自动处理   这当然是一个加号。

DDS支持一组丰富的所谓服务质量(QoS)设置,指定基础架构应如何处理它正在分发的数据。这些是开发人员设置的名称 - 值对。支持的QoS中的可靠性和数据可用性区域。这应该自动处理您的要求。

  

需要能够连接多个服务器/订户   相同的数据生产者/发布者并接收相同的数据

一对多或多对多分发是一种常见的用例。

  

数据速率最大值为每组10-20每秒

每秒最多可添加20,000条消息,尤其是在数据流被分区的情况下。

  

消息大小范围从大约100字节到4-5千字节

只要消息不会过大,消息的数量通常比通过线路传输的总kbytes更有限 - 除非大消息的结构非常复杂。

  

节点范围从嵌入式约束系统到普通COTS   Linux / Windows盒子

某些DDS实现支持大量OS /平台组合,可以在系统中混合使用。

  

节点通常使用C / C ++,服务器和客户端通常是C ++ / C#

这些通常是受支持的,可以在系统中混合使用。

  

节点应该(最好)不需要安装额外的SW或   服务器,即每个节点一个专用代理或额外服务   昂贵

此类选项可用,但需要额外服务取决于DDS实施和您要使用的功能。

  

安全性将基于消息,即不需要传输安全性

这肯定会让生活更轻松。

答案 1 :(得分:3)

似乎ZeroMQ很容易满足要求,没有中央基础设施可供管理。由于您的监控服务器是固定的,因此解决这个问题确实非常简单。 0MQ指南中的这一部分可能有所帮助:

http://zguide.zeromq.org/page:all#Distributed-Logging-and-Monitoring

您提到“可靠性”,但您是否可以指定要恢复的实际故障集?如果您使用TCP,则网络根据定义已经“可靠”。