【发布时间】:2013-09-04 13:22:18
【问题描述】:
我有一个基于游戏框架的服务,它是无状态的,旨在部署在多台机器上以实现水平扩展。
此服务正在处理 HTTP JSON 请求和响应,并再次使用 CouchDB 作为其数据存储以实现最大的可扩展性。
我们有少量后台作业需要在整个集群中每 X 秒运行一次。作业不要在每台机器上同时执行,这一点至关重要。
要执行我们使用 Actors 和 Akka Scheduler 的作业(因为我们使用的是 Scala):
Akka.system().scheduler.schedule(
Duration.create(0, TimeUnit.MILLISECONDS),
Duration.create(10, TimeUnit.SECONDS),
Akka.system().actorOf(LoggingJob.props),
"tick")
(等)
object LoggingJob {
def props = Props[LoggingJob]
}
class LoggingJob extends UntypedActor {
override def onReceive(message: Any) {
Logger.info("Job executed! " + message.toString())
}
}
有吗:
- 我错过的 Akka/Actors/Play 中的任何内置技巧对我有用吗?
- 或者我可以在 Couchbase 之上放置一个公认的算法(分布式互斥锁?不完全是?)来做到这一点?
我不想让任何实例“特别”,因为它需要非常易于部署和管理。
【问题讨论】:
-
我和你有同样的问题。我有一个播放应用程序,它有一个 akka 调度程序,它每 12 小时运行一次并执行某些数据库操作。但我希望它在集群中运行一次。否则,如果我有 2 个节点集群,那么它将运行 4 次,我希望它每天只运行两次。我们怎样才能做到这一点?
标签: scala playframework playframework-2.0 couchdb jobs