ruby on rails - retrayed_jobs vs resque vs beanstalkd?
ruby-on-rails redis (3)
Aquí están mis necesidades:
- Enqueue_in (10.hours, ...) (la sintaxis de DJ es perfecta)
- Multiplicar trabajadores, al mismo tiempo. (Resque o beanstalkd son buenos para esto, pero no DJ)
- Debe manejar push y pop de 100 trabajos por segundo. (Necesitaré ejecutar una prueba para asegurarme, pero creo que DJ no puede manejar tantos trabajos)
Resque y beanstalkd no hacen el enqueue_in.
Hay un complemento (resque_scheduler) que lo hace, pero no estoy seguro de cuán estable es.
Nuestro entorno está en Amazon, y lanzaron beanstalkd de forma gratuita para quien tenga instancias de Amazon, eso es una ventaja para nosotros, pero aún no estoy seguro de cuál es la mejor opción aquí.
Ejecutamos Rails 2.3 pero pronto lo llevaremos a rieles 3.0.3.
Pero, ¿cuál es mi mejor opción aquí? ¿Me estoy perdiendo otra joya que hace mejor este trabajo?
Siento que mi única opción que realmente funciona ahora es el resque_scheduler.
Editar:
Sidekiq ( https://github.com/mperham/sidekiq ) es otra opción que debe verificar.
Amazon Beanstalk no es Beanstalkd.
Beanstalkd, la cola, tiene trabajos retrasados, que no se reservarán fuera de la cola hasta que hayan transcurrido los segundos. Si eso es lo que Enqueue_in(10.hours, ... )
significa, entonces es solo azúcar sintáctico calcular el número de segundos y no hacer un trabajo disponible hasta entonces.
Para mis proyectos me sentiré muy cómodo con collectiveidea/delayed_job en rails2 y 3. No sé beanstalkd, pero lo intentaré pronto :-). He seguido las sugerencias en la documentación de resque. Lo reportaré.
Resque vs DelayedJob
¿Cómo se compara Resque con DelayedJob, y por qué elegirías uno sobre el otro?
- Resque admite múltiples colas
- DelayedJob admite prioridades más detalladas
- Los trabajadores de Resque son resistentes a fugas de memoria / hinchazón
- Los trabajadores de DelayedJob son extremadamente simples y fáciles de modificar
- Resque requiere Redis
- DelayedJob requiere ActiveRecord
- Resque solo puede colocar objetos JSONable Ruby en una cola como argumentos
- DelayedJob puede colocar cualquier objeto Ruby en su cola como argumentos
- Resque incluye una aplicación Sinatra para monitorear lo que está sucediendo
- DelayedJob se puede consultar desde su aplicación Rails si desea agregar una interfaz
Si está realizando el desarrollo de Rails, ya tiene una base de datos y ActiveRecord. DelayedJob es muy fácil de configurar y funciona muy bien. GitHub lo usó durante muchos meses para procesar casi 200 millones de trabajos.
Elija Resque si:
- Necesita múltiples colas
- No le importan / no les gustan las prioridades numéricas
- No necesita persistir cada objeto Ruby alguna vez
- Tienes colas potencialmente enormes
- ¿Quieres ver qué está pasando?
- Esperas un montón de fracaso / caos
- Puede configurar Redis
- No te estás quedando corto con la RAM
Elija DelayedJob si:
- Te gustan las prioridades numéricas
- No estás haciendo una cantidad enorme de trabajos cada día
- Tu cola se mantiene pequeña y ágil
- No hay mucho fracaso / caos
- Desea lanzar fácilmente cualquier cosa en la cola
- No quieres configurar Redis
Elija Beanstalkd si:
- Te gustan las prioridades numéricas
- Quieres cola extremadamente rápido
- No quieres perder tu RAM
- Desea atender una gran cantidad de trabajos
- Estás bien con objetos JSONable Ruby en una cola como argumentos
- Necesita múltiples colas
De ninguna manera Resque es un "mejor" DelayedJob, así que asegúrese de elegir la herramienta que sea mejor para su aplicación.
Una buena comparación de velocidad de back-end de cola :
enqueue work
-------------------------------------------------
delayed job | 200 jobs/sec 120 jobs/sec
resque | 3800 jobs/sec 300 jobs/sec
rabbitmq | 2500 jobs/sec 1300 jobs/sec
beanstalk | 9000 jobs/sec 5200 jobs/sec
¡Que tengas un buen día!
PD Hay un RailsCast sobre resque , Delayed Job ( versión revisada ) y Beanstakld . ¡Echar un vistazo!
PPS Mi Sidekiq favorito ahora es Sidekiq (muy simple, rápido y eficiente para trabajos simples), eche un vistazo a esta página para comparar.
Solo una pequeña nota: collectiveidea/delayed_job admite colas con nombre
object.delay(:queue => ''tracking'').method
Delayed::Job.enqueue job, :queue => ''tracking''
handle_asynchronously :tweet_later, :queue => ''tweets''