Akka 配置,用于在不同网络节点之间分配 Map 工作负载



我准备了一个MapReduce akka_mapreduce_example的Akka/Java实现,我目前在多个项目中使用它。

我现在想将 Map 步骤工作负载分布到许多单独的网络节点上,我想知道我必须在 Akka 配置中更改什么才能实现这一目标。我需要在"主"机器(触发MapReduce的机器,也运行reduce步骤(和帮助分配Map工作负载的"从"机器中进行配置更改。

我当前的应用程序.conf适用于单台机器,非常简单。我希望这只需要配置更改而不是代码更改,或者?

根据您的代码,只需要更改配置。您需要在配置中设置类似以下内容来设置远程处理:

akka {
  actor {
    provider = "akka.remote.RemoteActorRefProvider"
  }
  remote {
    enabled-transports = ["akka.remote.netty.tcp"]
    netty.tcp {
      hostname = "127.0.0.1"
      port = 2552
    }
 }
}

然后你需要告诉 Akka 将在远程节点上创建哪些 actor:

akka {
  actor {
    deployment {
      /sampleActor {
        remote = "akka.tcp://sampleActorSystem@127.0.0.1:2553"
      }
    }
  }
}

有关更多信息,您可以查找出色的文档。我链接了 2.2.1 版本的文档,如果您使用其他版本,请务必查看该版本的文档。版本之间往往会发生更改,虽然旧版本中的内容仍然可以在较新版本中工作(尽管它们可能已被弃用(,但反过来显然是一个问题。

你会注意到我说"取决于你的代码"。我的意思是,将发送到远程节点的所有消息都需要是可序列化的,并且您不要在Actor中使用任何静态成员。

如果您想要更大的灵活性,可以查看全新的集群支持。这将为您提供一个灵活,动态的点对点系统,您可以根据需要进行扩展和缩减。为此,您可能需要进行一些轻微的代码更改。

希望有帮助。

工作负载可以分布在多个节点上,但您必须选择两种处理模式,即基于拉取或推送的处理。

两者都有利有弊。但是拉取更具吸引力,因为它提供了容错能力,并且您可以跟踪对工作角色的工作分配。要开始使用,请查看 http://blog.goconspire.com/post/64901258135/akka-at-conspire-part-5-the-importance-of-pulling。

示例工作代码位于 https://github.com/typesafehub/activator-akka-distributed-workers。

处理快速生产者和慢消费者问题 可以使用 akka 流媒体的背压。

为了在系统负载极端的情况下动态创建工作演员,您必须提出自己的设计。但解决方案说向群集添加更多节点以将工作分配给新节点。

相关内容

  • 没有找到相关文章

最新更新