什么是延迟的后台工作?它是如何工作的?

时间:2011-01-12 11:11:50

标签: ruby-on-rails-3 heroku backgroundworker

我正在使用Heroku来托管一个小应用程序。它为每个搜索请求使用Mechanize和Nokogiri运行一个screenscraper,这需要大约3秒钟才能完成。

屏幕刮板是否会阻止当时想要访问该应用的其他任何人?换句话说,它仅适用于当前用户或每个人的保持模式吗?

3 个答案:

答案 0 :(得分:2)

如果你只有一个heroku dyno,那么是的,其他用户必须排队等候。

后台工作适用于像您这样的情况,需要进行繁重的处理。运行rails的过程不会预先进行繁重的工作,而是触发后台作业来执行并快速响应,从而自行释放以响应其他请求。

后台作业处理的数据将在稍后查看 - 可能在几个请求时间内,或者在完成作业时,通过javascript加载。

答案 1 :(得分:2)

当然,因为dyno是单线程的,如果它忙于报废,那么其他请求将排队,直到dyno空闲或最终超时,如果它们挂起超过30秒。

依赖于外部服务的任何东西最好通过DJ通过工作人员运行 - 甚至发送电子邮件,因此您的控制器将消息放入队列并将用户返回到屏幕然后由DJ拾取邮件并且已交付,因此用户无需等待邮件处理过程完成。

安装NewRelic gem以查看队列长度在做什么

约翰。

答案 2 :(得分:2)

如果您对全服务工作者系统感兴趣,我们正在寻找Heroku appstore app SimpleWorker.com的beta测试人员。它与Heroku紧密集成,与DJ相比具有许多优势。

只需几行代码即可将您的工作发送到我们的弹性工作者云,您可以利用大规模并行处理,因为我们不限制工作人员数量。

如果您有兴趣,请给我留言。

乍得