30

我在单个 JVM 上使用 Akka 开发了我的应用程序。现在我想将工作负载分配到多台机器上。我已经开始阅读文档并感到困惑。

有两种方法可以通过集群和远程处理来分发 Akka 应用程序。我不明白两者之间的区别。如果我理解正确,那么两者都相互排斥,因为在配置中需要使用不同的提供者作为参与者参考:

 akka.remote.RemoteActorRefProvider
 akka.cluster.ClusterActorRefProvider

那么有哪些用例呢?我什么时候会选择一个而不是另一个?

也许集群类似于远程处理的超集,或者它可能是相反的方式?

4

2 回答 2

36

它们不是相互排斥的,因为集群是在远程处理之上实现的。远程处理的主要特点是 ActorRefs 的位置透明性。集群在此之上增加了分布式成员资格。直接使用远程处理很少有用,大多数用例首选集群。

于 2014-01-21T09:47:03.700 回答
5

总是最好看代码

https://github.com/akka/akka/blob/c2983c7225eeaa035af99e0affeb5f5c841668c4/akka-cluster/src/main/scala/akka/cluster/ClusterActorRefProvider.scala

private[akka] class ClusterActorRefProvider ... extends RemoteActorRefProvider

首先ClusterActorRefProvider只是RemoteActorRefProvider的扩展

添加到远程处理的 cluster-akka 的核心功能是:

  • 集群范围的故障检测
  • 具有根组和池功能的路由器

你会在源代码中找到所有这些插件的味道。

于 2014-11-13T13:42:46.087 回答