work rails perform_later job example delayed active ruby-on-rails ruby message-queue background-process

perform_later - Message Queues en Ruby on Rails



rails job (7)

Aquí hay algunas soluciones de Ruby / Rails, una o más de estas pueden ser una buena opción dependiendo de sus necesidades:

http://xph.us/software/beanstalkd

http://rubyforge.org/forum/forum.php?forum_id=19781

http://backgroundrb.rubyforge.org

Y una solución alojada de Amazon que sería una excelente cola para compartir entre Ruby / Rails y otros componentes de un sistema más grande:

http://aws.amazon.com/sqs

¡Espero que esto ayude!

Qué colas de mensajes usan las personas para sus aplicaciones Rails y cuál fue la fuerza impulsora detrás de la decisión de elegirlo. ¿La última publicidad de Twitter sobre la cola interna de Starling afecta las decisiones de diseño existentes?

Estoy trabajando en una aplicación que necesitará una cola de mensajes para procesar algunas tareas en segundo plano, no he hecho mucho de esto, y la mayoría de las cosas que he visto en el pasado han sido sobre Starling y Workling, y para ser sincero, la aplicación no es muy grande y esta solución probablemente sea suficiente, pero me encantaría obtener experiencia integrando la mejor solución posible ya que estoy seguro de que integraré una en una aplicación más grande en algún momento.

¿Qué cola de mensajes sugerirías para una aplicación de Rails?

EDIT: Gracias por las sugerencias, voy a ver algunos de ellos este fin de semana.

EDITAR de nuevo: he echado un vistazo y un poco abrumado por la elección. Sin embargo, voy a continuar integrando RabbitMQ con Workling en la aplicación que estoy construyendo, y si alguna vez necesito algún conocimiento sobre una cola rápida, tendré esto y sabré si se ajusta o no a mis necesidades.

EDITAR: Encontrar más y más que el DJ me sienta bien, si alguna vez lo "supero" en un sitio, diría que Resque es hacia donde me dirigiría.

EDITAR: (Diciembre de 2014) Ha pasado mucho tiempo desde que pregunté esto, pero veo que todavía tiene puntos de vista o algunos votos, así que pensé en actualizarlo en mi enfoque ahora cuando se trata de mi elección de trabajadores de base. .

En mi opinión, actualmente la mejor manera de ejecutar trabajos en segundo plano en Ruby es usando Sidekiq. Mucha gente realmente elogió a Sidekiq por sus trabajadores enhebrados en lugar de procesar por trabajador, lo que puede consumir mucha menos memoria que los productos como Resque, que estaba usando antes de Sidekiq. Esto es bueno, pero para mí esta no era la característica más importante. Al utilizar Sidetiq con Sidekiq, la programación de trabajos es tan trivial que cambié y nunca he mirado hacia atrás, la planificación de trabajos más sencilla que he utilizado y que ha hecho que Sidekiq sea fácil de usar.


Chris Wanstrath de github estuvo en la reunión de SF Ruby recientemente, hablando de su cola. Probaron Starling, Beanstalk y algunas otras variantes antes de decidirse por el trabajo retrasado de Shopify. Son bastante agresivos con el uso de fondos.

Aquí hay una publicación del blog del año pasado que habla sobre su cambio a DJ.

Donde estoy ahora hicimos autostop hace varios años, pero estoy tomando algunas ideas de DJ para mejorar el manejo.


Como una actualización, GitHub se ha movido a Resque en Redis en lugar de un trabajo retrasado. Sin embargo, todavía recomiendan el retraso de trabajo para configuraciones más pequeñas:

https://github.com/resque/resque



Rany Keddo hizo una presentación útil sobre Starling + Workling en RailsConf Europe el año pasado. Comparó las diferentes soluciones disponibles en ese momento.

El último movimiento de Twitter de Starling + Workling probablemente no signifique mucho para la aplicación de rieles normales. Tienen muchos más problemas de escala y probablemente tengan problemas heredados con su almacén de datos que les impide escalar más allá de su implementación actual.

Beanstalkd es una buena alternativa, simplemente porque se ejecuta como daemon y tiene envoltorios en otros lenguajes de scripting (si cambias de dirección en el futuro o tienes diferentes componentes escritos en otros idiomas).

Este Beanstalkd también tiene una buena comparación de pros y contras de las diversas soluciones de rieles disponibles.


Recomendaría delayed-job como una solución muerta simple si no espera una carga pesada. Pros: fácil de configurar, fácil de monitorear, código simple, no tiene dependencias externas. Anteriormente utilizamos ActiveMessaging (con ActiveMQ y stomp), pero fue un exceso para nuestro proyecto, por lo que cambiamos a retrayed_job por su simplicidad.

De todos modos, si necesita una solución muy madura y rápida, ActiveMQ es una muy buena opción. Si no quiere perder demasiado tiempo en mantener la solución de colas de mensajes a gran escala que realmente no necesita, la tarea de retraso es un camino a seguir. Aquí hay un buen artículo sobre la experiencia de Scribd con ActiveMQ.


Utilizo background_job que como delayed-job es una cola basada en bases de datos.

Una base de datos crea una cola OK siempre que no esté haciendo demasiado tráfico entrando y saliendo.

El motivo por el que me gusta background_job (y delayyed_job) es que no requieren un proceso por separado. Pueden correr a través de cron. Para mí, esto es de importancia clave porque mis necesidades de mensajería son aún más simples que mis exiguas habilidades de administrador de sistemas.