我有一个基于游戏框架的服务,它是无状态的,旨在部署在多台机器上以实现水平扩展。
该服务正在处理 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")
(ETC)
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 之上(分布式互斥锁?不完全?)来做到这一点?
我不想让任何实例“特别”,因为它需要非常易于部署和管理。