在Docker集群上调度应用程序Spring

时间:2019-02-22 18:28:42

标签: spring docker kubernetes batch-processing schedule

我需要在具有不同节点的Docker集群中批量调度应用程序Spring。 我在docker-compose上找到了set copys = 1的解决方案,但我认为这不是最佳解决方案,因为它最大程度地降低了Docker的潜力。

有什么帮助或建议吗?谢谢。

1 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,那么您想运行spring应用程序的多个副本(这是否由docker,k8s管理,独立运行等无关紧要)。然后,您希望仅在一个实例上启动后台作业。对?在这种情况下,我建议您看看ShedLock

  

ShedLock只做一件事。确保您预定的   任务最多同时执行一次。如果正在执行任务   在一个节点上执行,它获得一个锁,阻止执行   来自另一个节点(或线程)的相同任务。请注意,如果   任务已经在一个节点上执行,在其他节点上执行   不等待,只需跳过即可。

它在Spring中平滑集成。例如,预定的批处理作业可能如下所示:

@Scheduled(cron = ...)
@SchedulerLock(name = "scheduledTaskName")
public void scheduledTask() {
   // do something
}

可以在引擎盖下使用各种选项来实现分布式锁,例如MySQL,Redis,Zookeeper等。