如何设计分布式作业调度程序?

cod*_*erz 7 cron distributed system-design cron-task

我想设计一个作业调度程序集群,它包含几个要执行cron作业调度的主机.例如,需要的作业run every 5 minutes被提交到集群,集群应该指出下次运行要触发的主机,确保:

  1. 容灾:如果不是所有主机都关闭,则应该成功触发作业.
  2. 有效性:只有一个主机可以解雇下一个工作.

由于容灾,作业无法绑定到特定主机.一种方法是所有主机轮询数据库表(当然有锁),这保证只有一个主机获得下一个作业运行.由于它经常锁表,有没有更好的设计?

shc*_*bak 6

我用谷歌搜索了 Dkron(分布式作业调度系统)。它有rest api并且看起来不错。我打算尝试使用 Dkron 网站


Ste*_*fan 5

为此使用Quartz 框架。它具有类似 cron 的语法,可以集群,并且一次只有集群中的一台主机可以完成一项工作。如果主机或作业失败,另一台主机将重试挂起的作业。

  • coderz,带有集群的quartz 就像简单的quartz 配置一样工作。您只需设置 org.quartz.jobStore.isClustered = true,将石英表添加到数据库中,石英将负责容灾和仅运行一次。有关石英聚类如何工作的更多信息,您可以阅读 http://www.quartz-scheduler.org/generated/2.2.1/html/qs-all/#page/Quartz_Scheduler_Documentation_Set%2Fre-cls_cluster_configuration.html%23 (2认同)