新手问题 各位使用 “队列” 推荐哪款?

QueXuQ · 2013年04月19日 · 最后由 wppurking 回复于 2013年04月19日 · 5825 次阅读

Resque,Delayed_job 或者 Sidekiq 等等。不知道各位怎么推荐呢? 有哪位朋友可以分享一下自己使用的那套的优点?

使用队列,除了把不是必须马上显示的任务放到后台执行外,还有没有什么别的好处呢?

Railscasts: #271 Resque: http://railscasts.com/episodes/271-resque

#366 Sidekiq: http://railscasts.com/episodes/366-sidekiq

用了 resque 后具多问题

Sidekiq 直接感觉省内存。

使用队列,可以衍生出将需要轮询检查的事情或者需要大量计算的任务,变为队列提交任务执行任务的异步处理模型啊,其中计算任务可分解,任务步骤可分解,等等。队列很好使的啦

#1 楼 @tumayun 好,等我用 sidekiq 吧。 #3 楼 @wppurking 我有一个疑问,不怕队列出现这样的情况吗?例如本来需要计算的,可是把东西放进队列了,他去不计算了。 例如我存 a,b,c ,其中 c = a*b。起初打算 a,b,c 需要一同存入,然后当存入 a,b 后,开始把 c 放入队列计算,然后不知道发生什么错误的,队列不计算了,而 c 没存进去,a 和 b 却存了,这样的问题不怕发生吗?

应该自己保障,为什么不 ab 计算后直接存 c,还要去压队列呢

Resque,配合 resque-scheduler

#5 楼 @tumayun 这就是我的疑问了,队列的优势在哪?数量级别大的时候才考虑使用?或者需要异步?不然没有必要使用?

如果是比较耗时的计算,或者不需要太实时计算就可有放队列

#8 楼 @tumayun 哦。我想着是不是都放进去比较好,会省内存。听你这样说,还是酌情使用好。

我觉得队列是用来处理非主要任务的时候使用了,比如一个评论添加的时候,程序可能会发消息、会发动态、会打打酱油,这些起始不是什么主要逻辑,而且如果有硬盘或者网络 IO 的话比较浪费时间,扔到队列里,异步干活。我不觉得省了内存。

队列主要是异步执行,提高应用的响应时间。 一般需要连接第三方服务器的 API 调用,邮件发送,统计计算等耗时不可知或平均超过 1 秒的工作,应该放入队列推迟执行。

@linjunpop 我再来一个,Ruby 大多用 redis 做队列,其实 beanstalkd 也不错哈 backburner

@QueXuQ 这个在你逻辑上考虑到了那么就得调整代码逻辑了。队列中的东西,应该要考虑失败重试的问题。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号