Pregunta

Estoy cerca de la liberación de una aplicación de los rieles con las características de red común (mensajería, pared, etc.). Quiero usar algún tipo de procesamiento en segundo plano (lo más probable Bj) para las tareas de la descarga del ciclo de petición / respuesta.

Esto ocurriría cuando los usuarios invitar a sus amigos a través de correo electrónico para unirse y para las notificaciones de correo electrónico.

No estoy seguro de si debería simplemente dejar estas invitaciones y notificaciones en mi base de datos, utilizando un modelo y luego simplemente procesarlo con un proceso de trabajo de cada x minutos o si debería ir a Amazon SQS, el almacenamiento de los mensajes y las invitaciones allí y dejar que mi trabajador de recuperar en Amazon SQS para el procesamiento (el envío de las invitaciones / notificaciones).

El enfoque de Amazon obtendría cargar de mi base de datos, pero supongo que es más lento para recuperar los mensajes desde allí.

¿Qué opinas?

¿Fue útil?

Solución

Su título indica que tiene un problema de rendimiento rieles, pero sabes que esta certeza? Desde el resto de su pregunta suena como si estuviera tratando de anticiparse a un posible problema de rendimiento futuro. La única manera de tratar con sensatez con problemas de rendimiento es conseguir que su aplicación en el medio natural y el perfil de la misma. Si lo hace, le dará los datos empíricos sobre lo que los problemas de rendimiento real son.

Dado que Amazon SQS no es gratuito y el hecho de que su uso es casi seguro que añadir complejidad a su aplicación, que se desplazaría a ella si y cuando carga de la base de datos se convierte en un problema. No trate de adivinar los problemas antes de que surjan, porque se dará cuenta de que es probable que se enfrentan a diferentes problemas a la hora de su aplicación va en vivo, algunas de las cuales puede que no haya considerado.

El punto principal es que ya ha decidido utilizar el proceso de fondo, que es la decisión correcta, teniendo en cuenta que ninguna clase de tratamiento que no es instantánea no pertenece dentro del ciclo de petición / respuesta de los rieles, ya que bloques que rieles proceso. Siempre se puede escalar con Amazon más tarde si es necesario.

Otros consejos

Es el aplicación alojada en Amazon EC2 ya? Lo que probablemente no mover una aplicación existente a lo largo de AWS para que yo pueda utilizar SQS, pero si usted ya está usando la infraestructura de Amazon SQS ia una gran elección. Por supuesto que podría configurar su propio sistema de mensajería (como RabbitMQ), pero yendo con SQS que es una cosa menos de lo que tiene que preocuparse.

Hay una gran cantidad de opciones para agregar procesamiento en segundo plano para aplicaciones Rails, como delayed_job o < a href = "http://codeforpeople.rubyforge.org/svn/bj/trunk/README" rel = "nofollow noreferrer"> background_job , pero mi favorita es workling . Se le da una buena capa de abstracción que le permite conectar diferentes corredores de fondo sin tener que cambiar la aplicación real de los puestos de trabajo.

mantengo una href="http://github.com/digitalhobbit/workling" rel="nofollow noreferrer"> Workling tenedor SQS. Hay algunos defectos (leer los comentarios o mi blog para más detalles), pero en general nos fue bien en mi último inicio.

También he utilizado SQS para un proyecto separado Ruby (no-Pasamanos) y, en general pareció fiable y lo suficientemente rápido. Al igual que James se ha señalado anteriormente, se puede leer hasta 10 mensajes a la vez, por lo que sin duda va a querer hacer eso (mi cliente Workling SQS hace esto y amortigua los mensajes localmente).

Estoy de acuerdo con John Topley que no quiere complicarse su aplicación si no es necesario. Una vez dicho esto, hay momentos en que es bueno para hacer este tipo de decisión temprana, puede anticipar alta carga desde el principio? ¿Está a implementar esta función a una base de usuarios existentes o se trata de un sitio público que pueden o no pueden despegar?

Si usted sabe que tendrá que manejar una gran cantidad de tráfico desde el principio, entonces esto podría ser un buen paso. Si no quiere gastar el dinero para utilizar SQS miren algunas de las soluciones de cola libre por ahí como RabbitMQ.

Actualmente empujo un par de millones de mensajes al mes a través de SQS y funciona bastante bien. Asegúrese de planificar para que sea hacia abajo o lenta de vez en cuando, por lo que tendría que trabajar en algunos reintento instalaciones y retroceso exponencial. Una de las cosas buenas es que se puede obtener 10 mensajes a la vez que acelera la posibilidad de trabajar a través de la cola, se puede utilizar una solicitud para obtener los 10 mensajes y procesar 1 por 1.

Amazon SQS es un buen servicio, excepto cuando las cosas se vuelven importantes siguientes:

  • Rendimiento
  • Legal
  • Reconocimientos y Transacciones
  • Mensajería modismos Propiedades del mensaje
  • Seguridad, la autenticidad y la cola
  • Permisos

Si cualquiera de estas cosas son importantes que hay que buscar en un servicio MQ real de la empresa, tales como StormMQ, RabbitMQ, o incluso onlinemq.com.

He encontrado esta serie interesante blog ya que se compara Amazon SQS a StormMQ sin mantener ningún golpe de vuelta: http://blog.stormmq.com/2011/01/ 06 / manzanas-y-naranjas-rendimiento /

Si tiene problemas con el movimiento de EC2, puede utilizar otros servicios como onlinemq.com.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top