可靠的网络全通信:消息总线或发布/订阅或多播/ PGM?

时间:2014-03-29 08:31:11

标签: c zeromq publish-subscribe multicast bus

我有一个粒子模拟程序,想把它拆分到局域网中的多台机器上。 每个服务器节点计算一些粒子'位置和需要将更新的位置(即相同的数据)发送到所有其他服务器节点。因此,每个服务器节点都需要连接到所有其他节点。

这种可靠的全面通信应该在没有中央服务器/消息代理的情况下工作,并且应该具有很少的延迟。如果可能,也应该避免通过网络多次发送相同的数据(如多播)。

我环顾四周,ZeroMQ(支持Bus,Pub / Sub和PGM)以及Nanomsg(支持Bus和Pub / Sub,但没有PGM)看起来像是适合问题的好库

在这种情况下哪种网络技术最适合,消息总线,发布/订阅或多播/ PGM?

1 个答案:

答案 0 :(得分:2)

Pub / Sub实现为多播,使用PGM作为传输方法对ZeroMQ客户端是透明的。 ZeroMQ努力隐藏客户端的实现细节,这也是它工作得很好的原因之一。但是,不要让简单欺骗你,ZeroMQ是一个专业设计的消息传递解决方案,非常强大和灵活。它快速,高效,并且可以轻松处理大量的消息。

ZeroMQ用于一些令人印象深刻的大型部署,在我的工作场所,我们使用ZeroMQ来处理每秒超过200k的消息。我们已经发现ZeroMQ可以毫不费力地进行扩展,该库经过精心设计和优化(没有内存泄漏,性能良好),并且已经证明无论我们投入的是什么都能很好地工作。

在ZeroMQ中,发布/订阅是在用户定义的主题上完成的,这些主题决定了向哪些连接的客户端发送了哪些数据。因此,如果我有10个客户端连接到我的发布套接字,9个订阅了一个名为“A”的主题,1个客户端订阅了一个主题“B”,我发送了一个主题为“B”的消息,那么只有订阅主题“B”的客户端将发送消息。 ZeroMQ在传输点(以避免浪费带宽)和接收点(在主题取消订阅时避免可能的竞争条件)执行发布/订阅消息的过滤。也可以订阅多个主题。

为了实现您描述的网状消息系统,我建议在集群中的每个节点上创建两个套接字,一个用于接收来自所有其他节点的消息,另一个用于向所有其他节点发送消息。如果您不需要主题,则订阅“*”主题将允许该客户端接收所有消息。