4

我正在构建一个具有多个节点的集群计算机系统。有一个主节点假设将任务调度到集群中的多个节点。这些节点是通过网络电缆连接到主节点的独立 PC。整个系统预计用java akka和play框架平台实现。有没有办法通过带有播放框架的akka​​远程集群来实现这一点。

我知道远程计算器教程,但它似乎是在 SBT 平台上运行的,但我很想知道播放框架中是否存在类似的教程。

或任何链接来帮助我完成我的项目

谢谢你

4

1 回答 1

9

Play 的一个实例!框架应用程序可以使用简单的配置连接到远程 Akka 节点(即:您的主节点)。

有两种方法:

  1. 覆盖默认的actor系统
  2. 定义一个新的actor系统

我建议你使用第二个。在这种情况下,您必须在 application.conf 中添加类似

master {
    akka {
        actor {
            provider = "akka.remote.RemoteActorRefProvider"
        }
        remote {
            transport = "akka.remote.netty.NettyRemoteTransport"
            netty {
                hostname = "your-master-host-name"
                port = 0
            }
        }
    }
}

然后在你的游戏中!应用程序,您可以通过这种方式连接到远程主节点

 ActorSystem system = ActorSystem.create("master", ConfigFactory.load().getConfig("master"))

 ActorRef master = system.actorFor("akka://master@your-master-host-name:your-master-port/user/master")

如果您更喜欢覆盖默认的 Play Akka 演员系统。这是参考配置:http ://www.playframework.org/documentation/2.0.3/AkkaCore

对于主节点和计算集群节点,我建议您使用此处描述的架构和代码:http: //letitcrash.com/post/29044669086/balancing-workload-across-nodes-with-akka-2

如果您的主节点和计算节点不需要 Web 或 REST 接口,您可以将它们实现为简单的 Java 程序。

在引用的文章中,节点没有远程暴露。为此,只需在主节点应用程序中添加一个 application.conf:

master {
    akka {
        actor {
            provider = "akka.remote.RemoteActorRefProvider"
        }
        remote {
            transport = "akka.remote.netty.NettyRemoteTransport"
            netty {
                hostname = "your-master-host-name"
                port = your-master-port
            }
        }
    }
}

并用actorOf方法实例化它

ActorSystem system = ActorSystem.create("master", ConfigFactory.load().getConfig("master"))

ActorRef master = system.actorOf(new Props(Master.class), "master")

计算节点必须以与 Play 相同的方式配置!节点。

请注意,只有主节点定义了 TCP-IP 端口。非主节点使用 0 端口,这配置 Akka 为它们选择一个随机的空闲端口。这是正确的,因为您需要的唯一众所周知的主机:端口地址是主节点,每个节点在启动时都必须指向该地址。

于 2012-09-20T08:17:17.147 回答