目前,我们有一个用于学校的定制 cms 产品,它内置于 django 并通过 heroku 部署。我为我们添加的每个学校系统进行了新的部署。(我想将我的系统切换到多租户系统,但这将是一个大项目。)我最近添加了一些异步工作效果最好的功能(用于数据库密集型操作的电子邮件和异步缓存刷新)。我已经将我的后台任务编写为 celery 任务并且它们运行良好。问题是,让一个 celery worker 每天 24-7 小时运行每个应用程序将花费我 34.50/月,而实际上这些任务每天只有几分钟的非空闲时间。考虑到我目前为每个客户端使用不同实例的方式,这个成本将使使用 heroku 几乎不可行。是否有人处理过这种情况,并且可以推荐如何能够定期进行后台处理(最好使用 celery),而无需运行 24-7 工作进程。缓存刷新器需要每隔几分钟运行一次,但电子邮件程序很少运行(仅当他们向订阅者发送电子邮件时)。
问问题
314 次
2 回答
1
如果您不需要您的员工立即参与,您可以使用调度程序插件定期清除您的任务队列。
如果您需要更快的响应时间,请查看Heroku API 的 Python 包装器。 有了这个,您可以使用多种方法来检测何时需要运行工作程序,并动态地启动一个工作程序,并在不需要时将其重新启动。这是一项不平凡的工程任务。
于 2012-12-07T17:23:55.320 回答
0
有趣的是,在我发布的同一天,我的 RSS 提要以博文形式回答了这个问题。
http://heyman.info/2012/dec/6/heroku-multiple-processes-single-dyno-with-foreman/
总之:设置你的 Procfile 来运行 Foreman,这可以在你的多个进程之间分配你的测功时间。还没有尝试过,但对于低流量或测试站点来说似乎是一种合法的方法。
于 2012-12-15T16:37:00.023 回答