django - Heroku Scheduler - 为什么要对长时间运行的作业进行排队

标签 django heroku system-administration

Heroku Scheduler documentation说:

Scheduled jobs are meant to execute short running tasks or enqueue longer running tasks into a background job queue. Anything that takes longer than a couple of minutes to complete should use a worker process to run

如果调度程序为这些作业启动一个新的 dyno,并且 dyno 与工作线程的成本相同,那么将任务添加到队列并让工作进程运行它有什么优势?

最佳答案

这是一种架构最佳实践,仅在调度程序任务(或您自己的自定义时钟进程)上调度而不执行间隔任务。 scheduled jobs 中解释了这样做的动机。文章,但总而言之,您希望调度程序进程/任务尽可能轻量,因为应该只有其中一个。当您开始执行重载调度时,您经常会遇到调度冲突和不稳定的行为。

想象一个间隔作业挂起,或者花费的时间比预期长得多。如果您的间隔足够紧,这将开始导致积压,并且 future 的间隔可能会被推迟或一起跳过。

此外,明智的做法是尽可能分离组件的职责 - 不要让单个组件负责正交任务。这是一种常见的设计实践,通过保持调度和执行独立来反射(reflect)在调度作业用例中。

除了最佳实践之外,如果您处于开发或引导模式并且了解上述后果,您当然可以选择忽略此类建议并在调度程序任务中运行所有内容。只是要小心难以调试的作业冲突或明显的重复。

关于django - Heroku Scheduler - 为什么要对长时间运行的作业进行排队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11134070/

相关文章:

python - 如何在 Django 模板中正确列化表格

python - Django Python如何计算给定两个时间字符串的时间差

Django 与 Django Admin 的通用关系

postgresql - knex migrate 抛出错误关系已经存在

ruby-on-rails - Rails是否可以优雅地处理缓存存储中断(memcached)?

linux - 不使用ssh在linux上远程安装

windows-services - 如何删除 Windows 中的服务?

django - 简单的 django channel 应用程序未与 daphne 一起运行

git - Heroku 认为我的 ssh 放错地方了

logging - 使用 rsync 检索日志文件