使用Akka Actors / Remoting在集群中分发图算法

时间:2012-04-11 00:14:39

标签: scala graph distributed actor akka

因此,我正在努力在多台计算机上分发我的Scala代码以获取大图("part 1" of the question),目前正在使用Akka框架,希望使用Actors和Remoting。

我阅读了文档here,看来示例完成的方式可以扩展到我想做的事情,但我对这种方法有一些顾虑......

1)我们如何决定应该创建多少个Actors实例?我们是否必须做一个试验/错误的事情,看看哪个是最好的,还是有一些更直观的方式去做?

2)我正在考虑按照示例的方式完成我的任务 - 使用Master生成多个Worker并使用case类作为消息进行通信。我想要做的是找到所有对之间的顶点对(随机游走)之间的一些度量。我有一个图类,它实现了一个方法来计算给定两个顶点的度量。

我将给每个工人两个顶点'u'和'v'来计算公制,并让工人返回该值。

当Master向Workers发送消息以计算度量时,Worker需要图结构 - 我是否只是通过在消息中包含图结构(即HashMap的邻接列表)来做到这一点?这会通过每次复制图形结构导致任何开销,还是所有工作人员只是共享该图表,还是有更好的方法来解决这个问题?

3)计算顶点对之间的度量的算法是否需要重新实现到扩展的Actor类,或者是否有一种方法可以让各个Actors访问相同的图结构来调用该方法(我猜这个类似于上面关于将整个图结构作为消息的一部分传递的问题)?

谢谢! 问候, -kstruct

1 个答案:

答案 0 :(得分:3)

  

1)我们如何决定我们应该创建多少个Actors实例?

虽然演员抽象底层线程管理,但创建的演员数量少于可用的CPU内核,这会浪费计算能力。如果您有10台服务器,每台8个核心,则至少创建80个演员,每台机器8个。

如果算法是CPU密集型的,那么创建更多算法不会带来性能提升 - 额外的工作人员只会等待可用的核心。

  

[...] Worker需要图形结构 - 我是否只是通过在消息中包含图形结构(即HashMap的邻接列表)来实现这一点? [...]

如果所有actor都在同一个JVM中,那么就没有开销 - 您只是在消息中传递对图形结构的引用。但是在分布式环境中,这将导致图形序列化并通过网络发送 - 可能是大量数据。

考虑所有参与者共享此数据结构。

我不明白问题3。