分布式实现C ++应用程序的方法(树结构)

时间:2014-11-09 15:28:03

标签: java c++ design-patterns tree distributed

我必须使现有的C ++应用程序分布式和可扩展。我正在寻找一个好方法的实用建议(分布式模式,框架等)如何做到这一点。我有想法,但我不确定他们的可行性。

现有应用程序的抽象功能相对普遍:

  • 问题在每个顶点计算上都有一个不平衡的树形式 必须完成非平凡的时间(计算变得更多 进一步向下复杂的树),一些顶点叉
  • 事先不知道树的形式,树木探索和计算是在飞行中完成的
  • 探索树的顺序很重要(DFS没问题,但应该可以自定义)
  • 顶点可以相互独立地进行探索,但由于缓存(即应该由同一个处理单元探索分支),位置很重要。
  • 必须在运行期间收集全局统计信息
  • 功能类似于状态空间探索。该程序相对复杂,但核心只是一个循环

非常模糊地说,我有大量独立的任务,必须分配给较少数量的处理单元,同时考虑局部性(子任务应该去父母,祖父母等处理器)。

分布式实施的要求是:

  • 目前目标是50-150台机器,但可能能够很好地扩展到最多1000个节点
  • 状态空间的持久性(特别是对于所有数据)并不重要,但会很好

直接的方法是使用ZeroMQ,NanoMSG或其他一些消息库(甚至MPI)手动实现通信,分区,负载平衡等。这是我不想做的事情,因为它需要花费大量时间,容易出错,而且我可能最终会实现许多已经存在的东西。

我想过使用类似Pregel的图形处理系统(Giraph,GraphX,GraphLab),但它们并非设计用于动态图形构建,而是用于在现有图形上执行计算。

然后我认为我可以使用Apache Spark或者Hama(这实际上是一种非常有趣的方法)。但是我的问题是原始应用程序是在C ++中(并且相对较大且复杂),但Spark没有C / C ++ API。我从来没有编写多语言代码,也不太了解JNI / JNA / BridJ / SWIG,我不确定这将会有多少工作以及性能开销会有多大。或者如果可行的话。

这就是为什么我想问社区,特别是有分布式编程经验的人: 哪种方法(上面提到的或新的方法)在模式(BSP,DAG执行,简单的主工作者等)和特定工具(Giraph,Spark,消息库,等等。)? 如果我决定使用基于JVM的框架,Java-C ++交互怎么样? 还有其他意见或建议吗?

非常感谢!

0 个答案:

没有答案