2010-01-23 19 views
8

El sistema que estamos construyendo está recibiendo datos a través de la fuente de información externa. Nuestro trabajo es distribuir estos datos a múltiples servicios, ejecutar los cálculos y enviar los resultados a otra parte, situación típica de editor-suscriptor. Lo que necesitamos es un mensaje de latencia muy bajo. No necesitamos persistir los mensajes como MSMQ.RabbitMQ Rendimiento de mensajería transitoria de alta velocidad

¿Es RabbitMq suficientemente rápido para una entrega de mensajes en tiempo real? ¿Hay puntos de referencia? ¿Es una buena idea usarlo en lugar de TIBCO Rendezvous? ¿Hay alguna otra fuente abierta de mensajes suaves en tiempo real?

Gracias.

Respuesta

14

(soy un desarrollador RabbitMQ.)

Rabbit, cuando se carga ligera, generalmente tienen latencias del orden de 100-400 microsegundos, dependiendo de cosas como la tarjeta de red y la velocidad de la CPU. Una vez que la carga se vuelve un poco más pesada, comienza a aparecer el almacenamiento intermedio interno y las latencias aumentan un poco. Puede esperar con seguridad latencias de 1 ms hasta que el uso del ancho de banda (mensajes por segundo, bytes por segundo) comience a aumentar. Las latencias también aumentarán una vez que se introduzca la persistencia, naturalmente.

En cuanto a los puntos de referencia, uno de los mayores problemas aquí es definir qué es importante para su aplicación. Hay algunos ejemplos de medición de latencia y rendimiento punto a punto y pub-sub trivialmente simples incluidos con el cliente de Java; pregunte en la lista rabbitmq-discuss si tiene problemas con ellos. No miden mucha relevancia para las aplicaciones del mundo real, pero pueden ayudar a disipar cualquier preocupación que tenga con respecto a microbenchmarks de latencia o rendimiento.

Finalmente, hay muchos, muchos buenos sistemas de mensajería de código abierto y sistemas relacionados con la mensajería disponibles actualmente. En el mundo de AMQP solo, además de RabbitMQ, también están Qpid y OpenAMQ. También existen buenos servidores JMS de código abierto, si puede restringirse a Java (muchas personas tienen éxito con ActiveMQ). También están surgiendo muchos sistemas livianos para los sistemas Ruby y Python; estos sistemas tienden a concentrarse solo en las colas y tienden a no tener la capacidad de enrutamiento flexible que ofrece AMQP.

+0

Gracias por la respuesta. ¿Sabes cuáles son los números considerados altos para mensajes por segundo, bytes por segundo? – Kimi

4

Debería poder alcanzar muchas decenas de miles de mensajes por segundo por CPU. Por ejemplo, una de nuestras pruebas estándar envía 25k mensajes por segundo desde un cliente Java al servidor que se ejecuta en una caja de Debian COTS de cuatro núcleos y vuelve al cliente. El cliente y el servidor se ejecutan en el mismo cuadro, por lo que se procesan 50 mil mensajes por segundo en el servidor más 50 mil mensajes procesados ​​por segundo en el cliente. Puede obtener tasas más altas ejecutando el servidor en una caja dedicada con más núcleos. Para las tasas basadas en bytes/segundo, consulte en la lista de correo de rabbitmq-discuss.

Alexis

2

La mejor solución que puedo pensar acerca de su sistema es ZeroMQ.

No tiene persistencia, que dijiste que no necesitas y es MUY rápido y fácil de usar.

No es una aplicación AMQP (que parece que no es necesario también), pero como se dice en this guide:

OMQ (ZeroMQ, 0MQ, ZMQ) se ve como una biblioteca de redes integrable, sino que actúa como un marco de concurrencia. Le proporciona sockets que transportan mensajes completos a través de varios transportes como en proceso, entre procesos, TCP y multidifusión. Puede conectar tomas N-a-N con patrones como fanout, pub-sub, distribución de tareas y solicitud-respuesta.Es lo suficientemente rápido para ser la tela de productos agrupados. Su modelo de E/S asíncronas le ofrece aplicaciones escalables multinúcleo, construidas como tareas de procesamiento de mensajes asíncronas. Tiene una puntuación de API de idiomas y se ejecuta en la mayoría de los sistemas operativos.

Cuestiones relacionadas