我目前正在寻找一个好的中间件来构建监控和维护系统的解决方案。我们的任务是监控,收集数据并维护一个由多达10,000个单独节点组成的分布式系统。
系统聚集成5-20个节点的组。每个组通过处理传入的传感器数据来生成数据(作为一个团队)。每个组都有一个专用节点(蓝色框),充当该组的外观/代理,将数据和状态从组暴露给外部世界。这些集群在地理上是分开的,可以通过不同的网络连接到外部世界(一个可以通过光纤运行,另一个通过3G /卫星运行)。我们可能会遇到更短(秒/分钟)和更长(小时)停机。数据在本地由每个群集保留。
这些数据需要通过外部和外部收集(连续可靠)。集中式服务器(绿色框),供各种客户进一步处理,分析和查看(橙色框)。此外,我们需要通过每个组代理节点监视所有节点的状态。不需要直接监视每个节点,即使中间件可以支持它(处理来自~10,000个节点的心跳/状态消息)也是好的。在代理失败的情况下,可以使用其他方法来精确定位各个节点。
此外,我们需要能够与每个节点进行交互以调整设置等,但这似乎更容易解决,因为这主要是在需要时按节点手动处理。可能需要进行一些批量调整,但总体而言,它看起来像标准RPC情况(Web服务或类似情况)。当然,如果中间件也可以通过一些加号的请求/响应机制来处理这个问题。
要求:
我们正在寻找一种解决方案,可以处理主要代理节点(蓝色)和服务器(绿色)之间的数据发布/轮询/下载以及从客户端(橙色)到单个节点(RPC样式)之间的通信,以便调整设置
似乎有很多关于逆转情况的讨论和建议;将数据从服务器分发到许多客户端,但是很难找到与所描述的情况相关的信息。一般的解决方案似乎是使用SNMP,Nagios,Ganglia等来监控和修改大量节点,但对我们来说,棘手的部分是数据收集。
我们简要介绍了DDS,ZeroMQ,RabbitMQ(所有节点都需要代理?),SNMP,各种监控工具,Web服务(JSON-RPC,REST /协议缓冲区)等解决方案。
那么,您是否对易于使用,强大,稳定,轻松,跨平台,跨语言的中间件(或其他)解决方案有任何建议?尽可能简单但不简单。
答案 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,则网络根据定义已经“可靠”。