2012-03-05 9 views
7

Busco ideas sobre cómo acelerar las transferencias de mensajes a través de RabbitMQ.RabbitMQ velocidades de transferencia aceleran?

Instalé la última versión en Windows 64 bit, ejecutando un servidor en mi máquina local en el que también publico y consumo desde/hacia una implementación C#. Inicialmente llegué al límite a 40,000 mensajes por segundo, lo cual es impresionante pero no se ajusta a mis necesidades (compito con un lector binario personalizado que puede manejar 24 millones de arreglos de bytes grandes de 16 bytes por segundo, obviamente no espero acercarme a eso, pero Intento mejorar al menos). Necesito enviar alrededor de 115,000,000 de mensajes lo más rápido posible. No quiero persistir en los datos y la conexión va a ser directa a un solo consumidor. Luego construí fragmentos de mis matrices de bytes 16b y los publiqué en el bus sin ninguna mejora. La tasa de transferencia llegó al máximo a 45mb/segundo. Esto me parece muy lento dado el hecho de que al final debería reducirse a velocidad de transmisión sin formato porque podría crear matrices de bytes del tamaño de varios megabytes donde la tasa de eficiencia del enrutamiento por el intercambio se vuelve insignificante frente a la velocidad de transmisión en bruto. ¿Por qué mi bus de mensajes tiene un máximo de velocidad de transferencia de 45 mb/seg?

+0

si solo hay 1 consumidor, ¿por qué no enviar directamente a través de TCP? no necesitas un bus de mensajes. –

+0

¿Cómo se ve su IO (red, disco) y CPU durante estas pruebas? – Xailor

+0

probablemente deberías mirar a zeromq en lugar de rabbitmq. Su tarea parece ser adecuada para 0mq. Al menos reclaman alrededor de 3_000_000 mensajes por segundo en ese tamaño de mensaje (16 bytes). http://www.zeromq.org/results:0mq-tests-v03 –

Respuesta

1

Bump ... y actualización: No he visto ninguna respuesta a esta pregunta en un tiempo más largo. Estoy un poco sorprendido de que ni un solo desarrollador de RabbitMQ haya intervenido. Jugué mucho con RabbitMQ y ZeroMQ. Decidí que RabbitMQ no está a la altura de las circunstancias al buscar soluciones de mensajería en proceso de alto rendimiento. La implementación del agente y especialmente la lógica de análisis es un cuello de botella importante para mejorar el rendimiento. Dejé RabbitMQ de mi lista de posibles opciones.

Hubo un documento en blanco que describe cómo proporcionaron una solución para gestionar flujos de datos financieros de baja latencia y alto rendimiento pero me parece que lo único que hicieron fue lanzar hardware en lugar de proporcionar una solución que apunta a baja latencia, requisitos de alto rendimiento.

ZeroMQ, hice un excelente trabajo después de estudiar la documentación más intensamente. Puedo ejecutar la comunicación en proceso, proporciona los patrones de push/pull, pub/sub, req/rep, y pair/pair lo suficientemente estables que necesito. Estaba buscando una lógica de bloqueo dentro del patrón pub/sub que ZeroMQ no proporciona (en su lugar, se omiten los mensajes cuando se excede una marca de agua alta), pero el patrón de inserción/extracción proporciona bloqueo. Entonces, casi todo lo que necesitaba está provisto. La única queja que tengo es con su comprensión del procesamiento de eventos; la implementación de la estructura del evento a través de poll/multiplex no es muy satisfactoria.