trabajos retrasados vs resque vs beanstalkd?


Aquí están mis necesidades:

  • Enqueue_in(10.hora, ... ) (La sintaxis de DJ es perfecta.)
  • Multiplicar los trabajadores, simultáneamente. (Resque o beanstalkd son buenos para esto, pero no DJ)
  • Debe manejar push y pop de 100 trabajos por segundo. (Voy a tener que ejecutar una prueba para asegurarse, pero creo que DJ no puede manejar este muchos trabajos)

Resque y beanstalkd no hacen el enqueue_in.

Hay un plugin (resque_scheduler) que lo hace, pero no estoy seguro de lo estable que es ser.

Nuestro entorno está en Amazon, y lanzaron el beanstalkd de forma gratuita para quienes tienen instancias de Amazon, eso es una ventaja para nosotros, pero todavía no estoy seguro de cuál es la mejor opción aquí.

Ejecutamos rails 2.3 pero pronto lo llevaremos 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 deberías comprobar.

Author: rafamvc, 2011-01-26

3 answers

Para mis proyectos me sentiré muy cómodo con collectiveidea/delayed_job en rails2 y 3. No lo sé beanstalkd, pero lo intentaré pronto : -). He seguido las sugerencias de la documentación de resque. Lo denunciaré.

Resque vs DelayedJob

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

  • Resque soporta múltiples colas
  • DelayedJob apoya prioridades más precisas
  • Los trabajadores de Resque son resistentes a fugas de memoria / hinchazón
  • Los trabajadores retrasados son extremadamente simples y fáciles de modificar
  • Resque requiere Redis
  • El trabajo demorado requiere ActiveRecord
  • Resque solo puede colocar objetos Ruby jsonables 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á pasando
  • DelayedJob se puede consultar desde tu aplicación Rails si quieres añadir un interfaz

Si estás haciendo desarrollo Rails, ya tienes 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:

  • Necesitas múltiples colas
  • No te importa / no te gustan las prioridades numéricas
  • No necesitas persistir cada objeto Ruby nunca
  • Tienes colas potencialmente enormes
  • Quieres ver lo que está pasando el
  • Esperas mucho fracaso / caos
  • Puede configurar Redis
  • No te estás quedando sin RAM

Elige DelayedJob si:

  • Te gustan las prioridades numéricas
  • No estás haciendo una cantidad gigantesca de trabajos cada día
  • Su cola se mantiene pequeña y ágil
  • No hay mucho fracaso / caos
  • Quieres lanzar fácilmente cualquier cosa en la cola
  • No desea configurar Redis

Elija Beanstalkd si:

  • Te gustan las prioridades numéricas
  • Quieres una cola extremadamente rápida
  • No quieres desperdiciar tu RAM
  • Quieres servir a un gran número de puestos de trabajo
  • Estás bien con objetos Ruby jsonables en una cola como argumentos
  • Necesitas múltiples colas

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

Una buena comparación de backend de cola velocidad:

                 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 tenga un buen día!

P.d. Hay un RailsCast sobre resque, Trabajo Retrasado (revised version ) and Beanstakld. ¡Echa un vistazo!

P. P. S. Mi choiche favorito es ahora Sidekiq (muy simple, Rápido y eficiente para trabajos simples ), echa un vistazo a esta página para comparar.

 137
Author: andrea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-11 20:46:08

Amazon Beanstalk no es Beanstalkd.

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

 8
Author: Alister Bulman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-26 22:25:42

Solo una pequeña nota: delayed_job 3.0 + soporta colas con nombre

object.delay(:queue => 'tracking').method    
Delayed::Job.enqueue job, :queue => 'tracking'    
handle_asynchronously :tweet_later, :queue => 'tweets'
 8
Author: altuure,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-26 18:25:19