У меня есть служба на основе фреймворка, которая является безстоящей и предназначена для развертывания на многих машинах для горизонтального масштабирования.Служба с фоновыми заданиями, как обеспечить, чтобы задания выполнялись периодически ОДИН за один кластер
Эта служба обрабатывает запросы и ответы HTTP JSON и снова использует CouchDB как хранилище данных для максимальной масштабируемости.
У нас есть небольшое количество фоновых заданий, которые нужно запускать каждые X секунд по всему кластеру. Очень важно, чтобы задания не выполнялись одновременно на каждой машине.
Для выполнения работ мы используем Actors и Akka планировщика (так как мы используем 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())
}
}
Есть:
- любой встроенный обман в Акке/Актеры/Игра, которую я пропустил, сделает это для меня?
- ИЛИ признанный алгоритм, который я могу поставить поверх Couchbase (распределенный мьютекс? Не совсем?), Чтобы сделать это?
Я не хочу делать какие-либо экземпляры «специальных», поскольку их очень просто развертывать и управлять.
У меня такая же проблема, как у вас. У меня есть приложение для воспроизведения, которое имеет планировщик akka, который запускается каждые 12 часов и выполняет определенную операцию БД. Но я хочу, чтобы он запускался один раз в кластере. В противном случае, если у меня есть 2 узла кластера, а в 4 раза он будет работать, я хочу, чтобы он был всего два раза в день. Как мы можем достичь этого? – CodeGuru