我在 Play 2.0.4 开发设置上运行了一些 Akka 作业。对于生产,应用程序将部署到集群设置中,我需要确保某些计划的作业不会并行发生 - 例如,导入仅在单个节点中发生,并且在完成之前不会启动新的导入。
有什么建议或指示吗?或者 Akka 是不是这样的错误工具?
我在 Play 2.0.4 开发设置上运行了一些 Akka 作业。对于生产,应用程序将部署到集群设置中,我需要确保某些计划的作业不会并行发生 - 例如,导入仅在单个节点中发生,并且在完成之前不会启动新的导入。
有什么建议或指示吗?或者 Akka 是不是这样的错误工具?
我的猜测是您应该将“前端”与“后端”分开。让集群化的 Play 应用程序处理网络请求并构建另一个应用程序来处理后台作业。
也可以调整 Akka 配置,使负责后台作业的 Actor 始终在单个集群节点上查找。不过,这可能只有在您需要一种简单的方式与该演员交流时才有意义。查看有关 Remoting 的 Akka 文档以获取更多详细信息。
这是一个合适的 Akka 集群吗?
您可以使用集群单例来强制作业只发生 1 次
http://doc.akka.io/docs/akka/snapshot/contrib/cluster-singleton.html
如果您的工作量对于 1 个演员来说太多了,那么您仍将希望使用集群单例.. 但将他用作主人,并让他将工作分配给奴隶来完成实际工作。如果你只保留 1 个 master 和 N 个 slave,你可以确保只做一次工作。