【发布时间】:2014-05-22 00:49:24
【问题描述】:
我想在多台工作计算机上并行处理繁重的计算任务,这些工作人员必须在彼此之间共享数据。我有一个服务器,所有工作人员都连接到该服务器并了解他们的“邻居”,以便他们可以连接到他们并交换数据。这是我想到的结构的图片:
如您所见,每个节点都有 4 个邻居(我不想在图片中画更多)。我对套接字类型一点也不固定,我只是认为它们是最好的选择。
但似乎 ZeroMQ 无法将有关一个连接的连接信息传达给另一个连接。由于我认为这实际上是一项相当普遍的任务,因此必须有解决方案。 网络的类型可能会有所不同,它可以是标准的 tcp/ip 网络,其中只有一堆通过路由器连接的计算机,也可以是通过 infiniband 连接的集群。所以基本上我想要的是一个字符串,我可以简单地在一个客户端插入到 connect() 或 bind() 中,而不必担心协议和网络类型以及所有这些东西 - 这正是我理解 zeromq 试图完成的事情.
提前感谢您的回答! :)
编辑:这是我想到的示例性通信:
WorkerMiddle.sendToServer("Hey server, please tell me my neighbours")
Server.sendToWorkerMiddle(Worker.top.connectionInfo())
WorkerMiddle.connectTo(WorkerTop)
Server.sendToWorkerMiddle(Worker.bottom.connectionInfo())
WorkerMiddle.connectTo(WorkerBottom)
Server.sendToWorkerMiddle(Worker.left.connectionInfo())
WorkerMiddle.connectTo(WorkerLeft)
Server.sendToWorkerMiddle(Worker.right.connectionInfo())
WorkerMiddle.connectTo(WorkerRight)
【问题讨论】:
-
这个范围很广,没有更多信息就无法给出有用的答案。因此,首先read the docs,它们提供了非常丰富的信息,并包含许多 连接模式来完成您正在寻找的那种事情。为了提供更多有用的信息,请提供一些代码来指示 a)您的网络拓扑(物理上,它是如何布局/连接在一起的 b)您正在使用的协议 c)您正在使用什么类型的套接字( pub/sub、rep/req 等)d)谁在绑定和谁在连接,端点是如何命名的
-
谢谢杰森,我已经做到了。但这就是我能说的全部,因为我会根据某人提供的解决方案来选择套接字类型。但我会尽力澄清它:)
-
对您的问题的出色更新!我知道您说过您阅读了文档,第 4、7 和 8 章提供了一些概念,可以了解这些更复杂的点对点拓扑,还有一个链接的开源通信模式存储库可能会有所帮助。不过,设计这些东西肯定是最复杂的。我将发布部分答案,然后在我有时间讨论套接字选择和通信策略时将其充实。
标签: zeromq