2

我想建立一个作业调度程序。所以这个作业调度器允许用户配置:

  1. 作业开始时间。(日期时间值)
  2. 工作频率:分钟、小时、天、月、年(任何整数值)

关于如何构建此调度程序,我有 2 个选项:

  1. 使用 C# Timer 类。但这也意味着我必须为每个计划的作业创建一个新的 Timer 对象。我打算公开一个 API 端点供用户调用和发布开始时间和频率信息。因此,当调用端点时,我需要创建一个新的 Timer 对象。这甚至会扩展吗?如何管理 Timer 对象?我需要允许用户创建、更新和删除他们的工作。

  2. 使用 Azure 调度程序。但是,我有一个非常大的用户数据库。我查看了定价,可以在 1 个实例上运行的最大总作业数仅为 500 万个作业。另外,如果我有超过 1 个正在运行的实例,我很难管理正在运行的实例。如何决定对多个调度程序实例进行负载平衡?

4

4 回答 4

0

为此,您可以使用 RabbitMQ。基本上,每个调度程序都只是标准信使的生产者-消费者概念。我建议您为此任务使用一些信使,因为即使您的系统已关闭,它们也可以保证您的任务按计划执行。它是自平衡的、稳定的,几乎所有你需要的东西都已经在这里实现了。

更多信息:https ://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html

对于您的任务,您只需指定生产者端,如果运行会将任务排入 RabbitMQ 的队列中,而无需关心它们在 Messenger 中的执行方式。通过这种方式,您可以在生产者中添加、删除、编辑、阅读时间表。另外,一个小建议,而不是频率术语使用cron-expressions。它是一种广泛支持、易于理解的概念,用于指定人类可读的时间表。

更多信息:https ://crontab.guru/

于 2017-01-23T07:41:34.713 回答
0

您可以使用现有的库,例如QuartzHangfire。第一个是我已经成功使用的相当简单的使用库,后者除了运行任务等之外还有一个用户界面,您可以提供服务。

如果还不够好,我相信还有很多其他的库。

于 2017-01-23T08:11:21.787 回答
0

Derek 来自 Azure Scheduler。我们有企业客户使用类似于您描述的场景的 Scheduler,这取决于您的用户/作业配置文件的外观,应该很容易想出一种将它们划分为不同作业集合的好方法。

你预计会有多少工作?听起来您需要的远不止我们在 P20 计划的单个工作集合中支持的 500 万。我想更好地了解您的方案并帮助您确定 Azure 调度程序是否是正确的解决方案。

您可以通过 Derek.Li (at) microsoft dot com 与我联系。

于 2017-01-23T18:25:30.017 回答
0

您可以使用 Azure Worker 角色,每个作业类型一个工作者角色,以及每个作业的不同计划,用户可以为每个作业创建自己的单独计划,从预定义的“作业类型”列表中进行选择。

于 2017-01-23T07:35:17.647 回答