【问题标题】:Asynchronous event triggers in a distributed system? (java)分布式系统中的异步事件触发器? (爪哇)
【发布时间】:2015-02-07 03:17:45
【问题描述】:

我正在实现一个运行共识协议的分布式系统。我使用的算法对我的问题无关紧要。我关心的是系统中节点之间的通信。我需要一种方法来允许节点之间的异步消息传递。某些类型的消息应该在侦听节点中触发事件。例如

(node_1) sendMessageA()              ---> (node_2, ..., node_n) recvMessageA()
(node_2, ..., node_n) sendMessageB() ---> (node_1) recvMessageB()
(node_1) sendMessageC()              ---> (node_2, ..., node_n) recvMessageC()
...

基本上,我有一个可以从给定 node_i 调用的函数,这应该向系统中的其他节点发送消息并触发其他节点中的相应函数。这些消息在这个分布式系统中需要是异步的。

有哪些好的框架或工具可以帮助实现这种类型的交流?

我知道NettyZeroMQ 似乎都与此类问题相关,但我都没有这方面的经验。 其中哪一个更适合此类问题?还有更好的替代方案吗?我更喜欢使用 java 的框架,但我也会考虑使用其他语言的技术。

【问题讨论】:

  • 使用 RMI,您可以在纯 java 中的对等方之间进行通信。如果您坚持使用 java 并希望避免第二个框架的复杂性,我建议您使用它。

标签: java asynchronous netty zeromq distributed-system


【解决方案1】:

我建议您查看JGroups。它是一个基于 Java 的群组通信工具包。如果您查看文档,您将看到您可以通过实现协议接口来添加所需的功能。需要一点时间来适应它,但文档非常好。另外,community 很大:如果遇到困难应该可以轻松找到帮助。

【讨论】:

    【解决方案2】:

    我决定使用的解决方案是Apache Thrift。即使我没有将它用于跨语言通信,它仍然非常有用,因为它允许我创建一个我想在节点之间使用的接口的简单定义,然后它会自动生成适当的类。引用他们的网站:

    您无需编写大量样板代码来序列化和传输您的对象并调用远程方法,而是可以直接开始工作。

    这绝对是真的,在了解了 Thrift 的工作原理几个小时后,我能够建立与 RPC 的通信。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 2011-06-04
      • 2015-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多