node - Maximice el rendimiento con RabbitMQ
rabbitmq tutorial (3)
Aumentará el rendimiento con un mayor conteo de captación previa Y al mismo tiempo ACK múltiples mensajes (en lugar de enviar ACK para cada mensaje) de su consumidor.
Pero, por supuesto, ACK con varias marcas activadas ( http://www.rabbitmq.com/amqp-0-9-1-reference.html#basic.ack ) requiere lógica adicional en su aplicación del consumidor ( http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2013-August/029600.html ). Deberá mantener una lista de etiquetas de entrega de los mensajes entregados por el intermediario, su estado (ya sea que su aplicación los haya manejado o no) y ACK cada N-ésima etiqueta de entrega (NDTAG) cuando todos los mensajes con entrega Se ha manejado una etiqueta menor o igual a NDTAG.
En nuestro proyecto, queremos usar RabbitMQ en el patrón de "Colas de tareas" para pasar datos.
En el lado del productor, construimos algunos servidores TCP (en node.js) para recopilar datos concurrentes altos y enviarlos a MQ sin hacer nada.
En el lado del consumidor, usamos el cliente JAVA para obtener los datos de la tarea de MQ, manejarlos y luego aceptarlos.
Entonces, la pregunta es: para obtener el máximo rendimiento de transferencia de mensajes / rendimiento (por ejemplo, 400,000 msg / segundo), ¿cuántas colas es la mejor? ¿Que más cola significa mejor rendimiento / rendimiento? ¿Y hay algo más que deba notar? ¿Alguna guía de mejores prácticas conocidas para usar RabbitMQ en tal escenario?
Cualquier comentario es muy apreciado !!
De acuerdo con la respuesta que recibí del grupo de correo de rabbitmq-Discuss, hay otras cosas que puede intentar aumentar el rendimiento y reducir la latencia:
Utilice un recuento de captación previa mayor. Los pequeños valores perjudican el rendimiento.
Un intercambio de temas es más lento que un intercambio directo o de fanout.
Asegúrate de que las colas sean cortas. Las colas más largas imponen más sobrecarga de procesamiento.
Si te importa la latencia y las tasas de mensajes, utiliza mensajes más pequeños. Utilice un formato eficiente (por ejemplo, evite XML) o comprima la carga útil.
Experimenta con HiPE, que ayuda al rendimiento.
Evitar transacciones y persistencia. También evite publicar en modo inmediato u obligatorio. Evitar HA. La agrupación también puede afectar el rendimiento.
Logrará un mejor rendimiento en un sistema de múltiples núcleos si tiene varias colas y consumidores.
Utilice al menos v2.8.1, que introduce el control de flujo. Asegúrese de que las alarmas de memoria y espacio en disco nunca se activen.
La virtualización puede imponer una pequeña penalización de rendimiento.
Sintonice su sistema operativo y la pila de la red. Asegúrate de proporcionar suficiente RAM. Proporcionar núcleos rápidos y RAM.
Para obtener el mejor rendimiento en RabbitMQ, siga los consejos de sus creadores. Desde el blog RabbitMQ :
Las colas de RabbitMQ son más rápidas cuando están vacías . Cuando una cola está vacía y tiene consumidores listos para recibir mensajes, tan pronto como la cola recibe un mensaje, se envía directamente 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 se almacena en búfer. El punto principal es que es necesario realizar muy poca contabilidad, modificar muy pocas estructuras de datos y asignar muy poca memoria adicional.
Si realmente desea profundizar en el rendimiento de las colas de RabbitMQ, esta otra entrada de su blog va a los datos mucho más allá.