计划作业旨在执行短期运行的任务或将较长运行的任务排入后台作业队列。任何需要超过几分钟才能完成的事情都应该使用工作进程来运行
如果调度程序为这些作业启动一个新的测功机,并且测功机与工作人员的成本相同,那么将任务添加到队列并让工作进程运行它有什么优势?
计划作业旨在执行短期运行的任务或将较长运行的任务排入后台作业队列。任何需要超过几分钟才能完成的事情都应该使用工作进程来运行
如果调度程序为这些作业启动一个新的测功机,并且测功机与工作人员的成本相同,那么将任务添加到队列并让工作进程运行它有什么优势?
仅在调度程序任务(或您自己的自定义时钟进程)上调度而不执行间隔任务是一种架构最佳实践。计划作业文章中解释了这样做的动机,但总而言之,您希望您的调度程序进程/任务尽可能轻量级,因为应该只有其中一个。当您开始用执行来超载调度时,您经常会遇到调度冲突和不稳定的行为。
想象一下,一个间隔作业挂起,或者花费的时间比预期的要长得多。如果您的间隔足够紧,这将开始导致积压,并且未来的间隔可能会被推迟或一起跳过。
此外,保持组件职责尽可能分离是明智的——不要让单个组件负责正交任务。这是一种常见的设计实践,通过保持调度和执行独立,反映在计划作业用例中。
除了最佳实践,如果您处于开发或引导模式并了解上述后果,您当然可以选择忽略此类建议并在调度程序任务中运行所有内容。请注意难以调试的工作冲突或明显的重复。
好吧,我认为这只是一个建议。如果您有一个由调度程序运行的任务并且您将手动运行此任务(在 Heroku 管理中),您将收到一个错误 - 此错误是由超时引起的(因为每个任务都有 30 秒的限制)。但事实上,这个任务不会被打断——任务会正确完成。
如果你有 1 个测功机,那么这个测功机将 Heroku 用于您的应用程序。如果您运行一些计划的作业,那么这个测功机将被用作计划程序 - >如果您有长时间运行的任务,您的页面将是“空闲的”(直到计划的作业完成时才能正常工作) .