1

我有一个执行计算繁重的本地处理的程序。计算包有 16MiB 的输入缓冲区并生成 10KB 到 16MiB 的输出。这一切都发生在多线程环境中。

我有许多受计算限制的用户。我有兴趣添加对点对点多处理的支持。也就是说,客户端将在组织中的多台计算机上运行。master 会找到可用的客户端,向他们发送 16MiB 的缓冲区,然后得到结果。

主服务器将有一个可用客户端的列表。然后它将向每个客户端发送一条消息,表明它是免费的。客户端将为他们拥有的每个核心启动一个线程。每个线程都会向 master 请求一个工作缓冲区,将计算结果,然后将结果发送给 master。主服务器会将每个客户端的结果合并到最终输出中。

典型的运行涉及处理 100 到 50,000 个 16MiB 缓冲区。输出通常在 100MB 到 10GB 范围内。缓冲区之间没有数据依赖关系。

我正在寻找安排客户端和服务器之间通信的最佳方式。我的计划是使用某种 RPC。我不想在客户端或服务器中嵌入 Web 服务器。相反,我的计划是简单地接收 TCP 套接字上的连接并拥有某种基本的 RPC。

以下是我正在考虑的选项:

  1. 我可以扮演我自己的客户端/服务器系统的角色,并使用协议缓冲区将整个事情放在一起。
  2. 我可以将现有的RPC 系统之一用于 potocol 缓冲区
  3. 我可以嵌入 Web 服务器并使用 XMLRPC。

实现语言是C++。该程序为 Linux、MacOS 和 Windows 的 mingw 编译。

谢谢。

4

1 回答 1

0

我们发现0MQ符合我们的标准。

于 2013-09-11T02:21:52.943 回答