如何在Heroku中经济地限制使用工作进程

时间:2012-12-07 16:12:52

标签: django heroku celery

目前,我们为学校提供了一个自定义cms产品,它是用django构建的,并通过heroku部署。我为我们添加的每个学校系统进行了新的部署。 (我想将我的系统切换到多租户,但这将是一个很大的项目。)我最近添加了一些异步最有效的功能(电子邮件和异步缓存 - 用于数据库密集型操作的刷新) 。我把我的背景任务写成芹菜任务,它们运作良好。问题是,让一个芹菜工人24-7运行将花费我每个应用程序34.50 /月,而实际上这些任务每天只有几分钟的非空闲时间。考虑到我目前使用的方式,每个客户端使用不同的实例,这个成本将使得heroku几乎不可行。有人处理过这种情况,并且可以建议如何定期进行后台处理(最好是芹菜),而不必运行24-7的工作流程。缓存复习需要每隔几分钟运行一次,但电子邮件很少会运行(只有当他们向订阅者发送电子邮件时)。

2 个答案:

答案 0 :(得分:1)

如果您不需要工作人员立即参与,您可以使用the scheduler add-on定期清除任务队列。

如果您需要更快的响应时间,请查看Python wrapper for the Heroku API.使用此方法,您可以使用多种方法来检测何时需要运行工作器,并动态旋转一个,然后将其旋转回来什么时候不需要。这是一项非常重要的工程任务。

答案 1 :(得分:0)

有趣的是,在我发布的同一天,我在博客文章中找到了这个问题的答案。

http://heyman.info/2012/dec/6/heroku-multiple-processes-single-dyno-with-foreman/

总之:设置您的Procfile以运行Foreman,它可以在您的多个进程之间分配您的dyno时间。还没有尝试过,但对于低流量或测试网站来说似乎是一种合法的方法。