Heroku的计划 - 为什么排队长时间运行的作业

问题描述:

对Heroku的计划文档说Heroku的计划 - 为什么排队长时间运行的作业

“计划作业是为了执行短期运行的任务或排队较长的运行任务到后台作业队列凡是。需要更长的时间超过两分钟即可完成应该使用工作进程来运行”

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

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

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

想象一个间隔工作挂起或需要比预期更长的时间。如果你的时间间隔足够紧张,这将开始导致积压,未来的时间间隔可能会被推回或一起跳过。

此外,将组件责任尽可能分开是明智的 - 没有单个组件负责正交任务。这是一种常见的设计实践,它通过保持调度和执行独立而反映在预定的工作用例中。除了最佳实践,如果您处于开发或引导模式并了解上述后果,您当然可以选择忽略此类建议并在计划任务中运行所有内容。只是要小心努力调试工作冲突或明显的重复。

嗯,我认为这只是一个建议。如果您有一个由Scheduler运行的任务,并且您将手动运行此任务(在Heroku管理中),则会出现错误 - 此错误是由超时引起的(因为每个任务的限制为30秒)。但事实上,这项任务不会中断 - 任务将会正确完成。

如果你有1个动态代码,所以这个动态代码使用Heroku来处理你的应用程序。如果你运行一些预定的工作,所以这个动态调整将被调度器 - >如果你有长时间运行的任务,你的页面将是“空闲”(直到时间,当预定的工作将完成时,不正确的工作) 。

+0

我的理解是,一个新的测功机正在推进这些过程。根据https://devcenter.heroku.com/articles/scheduler和https://devcenter.heroku.com/articles/oneoff-admin-ps。另外,第一个环节意味着没有30秒的超时时间 – alan