Pregunta

Aquí están mis necesidades:

  • Enqueue_in (10.Hours, ...) (La sintaxis de DJ es perfecta).
  • Multiplicar trabajadores, simultáneamente. (Resque o Beanstalkd son buenos para esto, pero no DJ)
  • Debe manejar el empuje y el estallido de 100 trabajos por segundo. (Tendré que ejecutar una prueba para asegurarme, pero creo que DJ no puede manejar estos muchos trabajos)

Resque y Beanstalkd no hagan el enqueue_in.

Hay un complemento (resque_scheduler) que lo hace, pero no estoy seguro de qué tan estable es.

Nuestro entorno está en Amazon, y lanzaron el Beanstalkd de forma gratuita para quién tiene instancias de Amazon, que es una ventaja para nosotros, pero todavía no estoy seguro de cuál es la mejor opción aquí.

Corremos Rails 2.3 pero pronto lo llevamos a Rails 3.0.3.

Pero, ¿cuál es mi mejor opción aquí? ¿Me estoy perdiendo otra joya que hace este trabajo mejor?

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 comprobarlo.

¿Fue útil?

Solución

Para mis proyectos me sentiré muy confortbale colectiveidea/demandado_job en Rails2 y 3. No conozco Beanstalkd, pero lo intentaré pronto :-). He seguido las sugerencias en la documentación del resque. Lo informaré.

Resque vs DelayedJob

¿Cómo se compara el resque con DelayedJob y por qué elegirías uno sobre el otro?

  • Resque admite múltiples colas
  • DardedJob admite prioridades de grano más fino
  • Los trabajadores de resque son resistentes a las filtraciones de memoria / hinchazón
  • Los trabajadores de Job Delayed son extremadamente simples y fáciles de modificar
  • El resque requiere redis
  • DelayedJob requiere activerecord
  • El resque solo puede colocar objetos de rubí jsonables en una cola como argumentos
  • DelayedJob puede colocar cualquier objeto Ruby en su cola como argumentos
  • El 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á haciendo 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 empleos.

Elija resque si:

  • Necesitas múltiples colas
  • No le importan / no le gustan las prioridades numéricas
  • No necesitas persistir a todos los objetos de rubí
  • Tienes colas potencialmente enormes
  • Quieres ver lo que esta pasando
  • Esperas mucho falla / caos
  • Puedes configurar Redis
  • No te estás quedando corto en ram

Elija DelayedJob si:

  • Te gustan las prioridades numéricas
  • No estás haciendo una cantidad gigantesca de empleos cada día
  • Tu cola se mantiene pequeña y ágil
  • No hay mucha falla / caos
  • Quieres arrojar fácilmente cualquier cosa en la cola
  • No quieres configurar Redis

Elija Beanstalkd si:

  • Te gustan las prioridades numéricas
  • Quieres una cola extremadamente rápida
  • No quieres desperdiciarte Ram
  • Desea servir una gran cantidad de trabajos
  • Estás bien con los objetos de rubí Jsonable en una cola como argumentos
  • Necesitas múltiples colas

De ninguna manera es un "mejor" retrasado, así que asegúrese de elegir la herramienta que sea mejor para su aplicación.

Un buen Comparación de la velocidad de backend 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 lindo día!

PD: hay un ferrocarril sobre resquear, Trabajo retrasado (Versión Revisada) y Beanstakld. ¡Echar un vistazo!

PPS Mi choiche favorito es ahora Sidekiq (muy simple, rápido y eficiente para trabajos simples), eche un vistazo a esta página para comparacion.

Otros consejos

Amazon Beanstalk no es Beanstalkd.

BeanStalkd, la cola, tiene trabajos retrasados, que no se reservarán de la cola hasta que haya pasado el número de segundos dado. Si eso es lo que Enqueue_in(10.hours, ... ) Significa, entonces es solo azúcar sintáctica calcular el número de segundos y no hacer un trabajo disponible hasta entonces.

Solo una pequeña nota: demandado_job 3.0+ Admite colas con nombre

object.delay(:queue => 'tracking').method    
Delayed::Job.enqueue job, :queue => 'tracking'    
handle_asynchronously :tweet_later, :queue => 'tweets'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top