2012-04-05 13 views
24

En nuestro proyecto, queremos utilizar el RabbitMQ en el patrón "Colas de tareas" para pasar datos.Maximice el rendimiento con RabbitMQ

En el lado del productor, construimos algunos servidores TCP (en node.js) para recv datos concurrentes altos y los enviamos a MQ sin hacer nada.

En el lado del consumidor, utilizamos el cliente JAVA para obtener los datos de la tarea de MQ, manejarlo y luego ack.

Así que la pregunta es: Para obtener el máximo rendimiento de procesamiento de mensaje (por ejemplo, 400,000 msg/segundo), ¿Cuántas colas es la mejor? ¿Esa cola más significa un mejor rendimiento/rendimiento? ¿Y hay algo más que debería notar? ¿Alguna guía conocida de mejores prácticas para usar RabbitMQ en tal escenario?

¡Todos los comentarios son muy apreciados!

Respuesta

24

Para obtener el mejor rendimiento en RabbitMQ, siga los consejos de sus creadores. Desde el RabbitMQ blog:

colas de RabbitMQ son más rápido cuando están vacíos. Cuando una cola es vacía y tiene consumidores listos para recibir mensajes, tan pronto como recibe un mensaje en la cola, va directo al consumidor . En el caso de un mensaje persistente en una cola duradera, sí, , también irá al disco, pero eso se hace de forma asíncrona y está protegido de forma intensiva. El punto principal es que se necesita muy poca contabilidad , se modifican muy pocas estructuras de datos, y muy poca memoria adicional necesita ser asignada a .

Si realmente desea profundizar en el rendimiento de las colas RabbitMQ, este other blog entry de ellos entra en los datos mucho más allá.

26

Según una respuesta Una vez me del grupo de correo RabbitMQ-discuss hay otras cosas que usted puede tratar de aumentar el rendimiento y reducir la latencia:

  • Use un recuento obtención previa mayor. Los valores pequeños perjudican el rendimiento.

  • Un intercambio de temas es más lento que un intercambio directo o de fanout.

  • Asegúrate de que las colas estén cortas. Las colas más largas imponen más procesamiento sobrecarga.

  • Si le importan la latencia y las tasas de mensajes, utilice mensajes más pequeños. Utilice un formato eficiente (por ejemplo, evite XML) o comprima la carga útil.

  • Experimente con HiPE, que ayuda al rendimiento.

  • Evita las transacciones y la persistencia. También evite publicar en modo inmediato o obligatorio. Evita HA. La agrupación también puede afectar el rendimiento.

  • Obtendrá un mejor rendimiento en un sistema multi-core si tiene múltiples colas y consumidores.

  • Use al menos v2.8.1, que introduce control de flujo. Asegúrese de que la memoria y las alarmas de espacio en disco nunca se disparen.

  • La virtualización puede imponer una pequeña penalización de rendimiento.

  • Sintonice su sistema operativo y la pila de red. Asegúrese de proporcionar más que suficiente RAM. Proporcione núcleos rápidos y RAM.

+0

¿El intercambio de un tema es más lento porque le lleva más tiempo al intercambio calcular a qué cola necesita enviar un mensaje? – robertjewell

2

Va a aumentar el rendimiento con un recuento de obtención previa mayor y, al mismo tiempo varios mensajes ACK (en lugar de enviar ACK para cada mensaje) de su consumo.

Pero, por supuesto, ACK con indicador múltiple en (http://www.rabbitmq.com/amqp-0-9-1-reference.html#basic.ack) requiere una lógica extra en su aplicación de consumidor (http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2013-August/029600.html). Tendrá que mantener una lista de etiquetas de entrega de los mensajes entregados por el agente, su estado (si su aplicación los ha manejado o no) y ACK cada N-ésima etiqueta de entrega (NDTAG) cuando todos los mensajes con entrega -Se ha manejado una etiqueta inferior o igual a NDTAG.