2010-12-03 11 views
5

Estoy diseñando un sistema que usará jms y algunos programas de mensajería (me estoy inclinando hacia ActiveMQ) como middleware. Habrá menos de 100 agentes, cada uno empujando como máximo 5000 mensajes por día a través de la cola.Asesoramiento sobre MoM y mensajes grandes

La carga útil por mensaje será de alrededor de 100 bytes cada uno. Espero que aproximadamente la mitad (2500) de los mensajes se agrupen alrededor de la medianoche y que la otra mitad se distribuya de manera uniforme durante el día. Las cifras anteriores se encuentran en el extremo superior de lo que espero. (Sí, probablemente me comeré esa declaración en un futuro cercano).

Hay un tipo de mensaje en el que la carga útil será considerablemente mayor, por ejemplo, en el rango de 5-50mb. Estos mensajes solo se enviarán varias veces al día de cada agente.

Mis preguntas son: me va a causar problemas en cualquier forma o es perfectamente normal para enviar grandes cantidades de datos a través de una cola de mensajes?

Por ejemplo, ¿reducirá el rendimiento (mensajes más pequeños haciendo cola) mientras se ocupan de los mensajes más grandes?

¿O la cola de mensajes se atascará en mensajes más grandes?

¿O debería abordar esto de una manera diferente, digamos enviando la ubicación de los datos a través de jms, y dejar que el receptor final recoja los datos en otro lugar? (Esperaba no tener un caso especial debido a acoplamiento, problemas de seguridad y configuración adicional).

Soy completamente nuevo en los detalles prácticos de jms, así que solo dígame si necesito proporcionar más detalles.

Editado: Acepté a Andres realmente impresionante respuesta. Siga publicando consejos y opiniones, mantendré arriba todo lo útil.

Respuesta

2

Los mensajes más grandes definitivamente tendrán un impacto, pero los tamaños que mencione aquí (5-50MB) deberían ser manejables por cualquier servidor JMS decente.

Sin embargo, considere lo siguiente. Al procesar un mensaje en particular, todo el mensaje se lee en la memoria. Entonces, si 100 agentes envían un mensaje de 50MB a una cola diferente más o menos a la misma hora, o en momentos diferentes, pero los mensajes tardan mucho en dequearse, puede encontrarse en una situación en la que intenta poner en la memoria mensajes de 5000MB. Me he encontrado con problemas similares con mensajes de 4MB con ActiveMQ en el pasado, sin embargo, se enviaron más mensajes que las cifras mencionadas aquí. Si todos los mensajes se envían a la misma cola (persistente), esto no debería ser un problema, ya que solo el mensaje que se procesa debe estar en la memoria.

Por lo tanto, depende de su configuración. Si el límite superior teórico de 5000 MB es manejable para usted (y mantenga en mente el límite JVM de 32 bits de 2000 MB), continúe, sin embargo, este enfoque claramente no se escala muy bien, así que no lo sugeriría. Si todo se envía a una cola persistente, probablemente estaría bien, sin embargo, recomendaría poner un prototipo bajo carga primero para asegurarse. El procesamiento puede ser lento, pero no necesariamente más lento que si fuera captado por algún otro mecanismo. De cualquier manera, definitivamente recomendaría enviar los mensajes más pequeños a destinos separados donde se pueden procesar en paralelo con los mensajes más grandes.

+0

Awesome answer! Los mensajes más grandes son todos del mismo "tipo" y se enviarán a la misma cola persistente, por lo que debería estar bien en ese caso. – Ronnis

0

porque el tamaño del mensaje tiene un impacto en el rendimiento (en msgs/seg). cuanto más grandes sean los mensajes, menor será el rendimiento.

1

Estamos ejecutando un escenario similar con una mayor cantidad de mensajes. Lo hicimos de manera similar a la propuesta de Andres con el uso de colas diferentes para la gran cantidad de mensajes más pequeños (que todavía son ~ 3-5MB en nuestro escenario) y los pocos mensajes grandes que están alrededor de 50-150 MB.

Además de los problemas de memoria ya citados, también encontramos problemas generales de rendimiento en el intermediario de mensajes al procesar una gran cantidad de mensajes grandes persistentes. Esto es causado por la necesidad de persistir estos mensajes de alguna manera en el sistema de archivos, nos encontramos con cuellos de botella en este lado.

+0

Interesante. ¿Cómo terminaste resolviéndolo? – Ronnis

+0

hicimos alguna optimización en la física del sistema de archivos y adicionalmente utilizamos un escenario de clúster específico del proveedor y distribuimos el intermediario de mensajes en 4 hosts. – roundrobin

Cuestiones relacionadas