父节点和节点之间的通信

时间:2015-03-16 15:04:08

标签: java message-queue

我们有一个parent,其中包含许多nodes的信息。每个节点都是独立的VM实例,执行不同的任务。 parent就像是所有节点的仪表板。

parent需要:

  • 偶尔向某些node
  • 发送配置更改
  • 监控心跳,即node
  • 的健康状况
  • node
  • 获取一些统计数据

我希望node尽可能不了解外面的世界。每个node都可以作为网络服务器使用,有时会产生很大的流量。

如何在parentnode之间以最佳方式进行沟通?

我正在考虑使用文件进行通信,因此parent可以在node文件系统上使用命令设置文件,然后让dir监视器读取这些文件。< / p>

或者在后台有一些事件总线/消息队列,但他们正在使用套接字,因此node对于parent消息可能会在高流量时无响应。或者我担心太多了?

修改

是否有任何事件/消息总线提供频道之间的直接通信,以节省广播时间?在我的示例中,之间的通信始终在parent和单child之间,不需要广播。所以我们可以像电子邮件一样发送消息;)

编辑#2 - 关于沟通和交通

有一个parent(或代表父项一个实例的集群)。 childs的数量未确定,可能是任意数量;只要系统正常工作,目标就是尽可能多地拥有。沟通是:

  1. 命令(parent - &gt; child) 低频率命令,通常由管理员发起(例如&#34;重启&#34;,&#34;上传&#34;,&#34;重新加载配置&#34;)。它直接转到特定的child

  2. 运行时统计信息(每个child - &gt; parent) 每个child都会通知parent有关其健康状况(心跳)和一些次要统计信息。这不必是实时通信,只要消息在例如传输下传输即可。 10秒。

  3. 运行时日志(每个child - &gt; parent) 有关流量和使用情况的重要日志。这可能是高容量数据,因为测量每个节点很重要,如果计算超过一定限度,我们需要注意等等。再次,不是实时,但我们需要在高计算时及时发出警报。 / p>

  4. 不需要一般广播(因为child不知道其他孩子),这是更直接的消息。

2 个答案:

答案 0 :(得分:1)

我建议您使用RMI,因为您可以实现节点之间需要进行通信的方法,使您想要通信的类扩展Remote接口。

您必须在通信开始时使用rmiregistry,但如果您有一个“中心”节点来分发引用/消息(例如在聊天中),那么将不再需要它(服务器/客户端)模型)。

更新:我不是那么先进,无法回答您的上一个问题,但也许这些链接可以帮助您了解这是否是您需要的:

1.- Overview

2.- How fast RMI?

答案 1 :(得分:1)

也许最简单的解决方案是向节点发送http POST以更改配置(特别是如果它已经是Web服务器)。心跳可能只是HEAD请求。统计信息收集请求可能是获取。

您可以使用servlet安全机制来确保配置仅由父级更改。

如果遇到性能问题,像RMI或ZeroMQ这样的解决方案可能会很好,但它会带来额外的复杂性。

像这样一个https://code.google.com/p/google-http-java-client/的好的http客户端库可以帮到你。

相关问题