Heroku Scheduler - 为什么要排长期工作

ala*_*lan 3 sysadmin django heroku

Heroku Scheduler的文档说明了这一点

"计划作业旨在执行短期运行任务或将更长时间运行的任务排入后台作业队列.任何需要花费几分钟才能完成的任务都应该使用工作进程来运行"

https://devcenter.heroku.com/articles/scheduler#longrunning_jobs

如果Scheduler为这些作业启动一个新的dyno并且dyno与worker相同的成本相同,那么将一个任务添加到队列并让一个worker进程运行它有什么好处呢?

Rya*_*gle 8

在调度程序任务(或您自己的自定义时钟进程)上仅调度和不执行间隔任务是一种体系结构最佳实践.在预定的工作文章中解释了这一点的动机,但总而言之,您希望您的调度程序进程/任务尽可能轻量级,因为应该只有其中一个.当您开始执行带有执行的调度时,您经常遇到计划冲突和不稳定的行为.

想象一下,一个间隔作业挂起,或者比预期花费的时间长得多.如果你的间隔足够紧,这将开始导致积压,未来的间隔可以被推回或全部一起跳过.

此外,保持组件职责尽可能分离是明智的 - 没有一个组件负责正交任务.这是一种常见的设计实践,它通过保持调度和执行独立性反映在计划的作业用例中.

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