我必须使现有的C ++应用程序分布式和可扩展。我正在寻找一个好方法的实用建议(分布式模式,框架等)如何做到这一点。我有想法,但我不确定他们的可行性。
现有应用程序的抽象功能相对普遍:
非常模糊地说,我有大量独立的任务,必须分配给较少数量的处理单元,同时考虑局部性(子任务应该去父母,祖父母等处理器)。
分布式实施的要求是:
直接的方法是使用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 ++交互怎么样? 还有其他意见或建议吗?
非常感谢!