我们有一个rails v2.3.8 / apache / passenger application&对某些长时间运行的任务有异步要求。所以我一直在评估围绕rails / ruby的一些解决方案,希望得到一些解决方案的反馈。
我还有一个问题 - 关于后台任务/工人如何产生的问题。鉴于我们的rails应用程序将在apache / passenger容器内运行,这是否意味着后台/工作人员还会产生一个apache / passenger进程/线程?
是否只启动了一个工作线程/进程,这意味着将连续处理作业或并行处理作业?我来自java / j2ee背景,所以我对Message Beans / threading有很好的理解,但是对于rails消息传递解决方案的工作方式却一无所知?
我们正在评估以下解决方案的一些参数是 - 性能/规模,分布式工作者(在不同节点上运行),Rails v3支持
Beanstalkd - >异步观察者
惊吓 - > Workling
ActiveMQ(stomp) - > Workling / activeMessageing
延迟工作
答案 0 :(得分:1)
Phusion Passenger仅处理网络请求。后台任务最好由外部队列系统处理。你已经提到了其中一些。这些队列系统作为完全独立的进程运行,不会影响Phusion Passenger管理的任何进程。
答案 1 :(得分:0)
我知道这是一个非常晚的答案,但我面临一些可能值得考虑的问题。
通过乘客的智能产卵,所有连接都必须在产生新线程后重置。请参阅http://www.modrails.com/documentation/Users%20guide%20Nginx.html#_smart_spawning_gotcha_1_unintential_file_descriptor_sharing以供参考。
这还包括与队列的连接。请务必使用
中的相应代码重置它们PhusionPassenger.on_event(:starting_worker_process) do |forked|
if forked
...
end
end if defined?(PhusionPassenger)
块。