message queue - operativos - ¿La prioridad de los mensajes no es importante en los sistemas de colas de mensajes?
mensajes mq (5)
BTW ActiveMQ ahora admite mensajes de prioridad en 5.4.x a través de los encabezados JMSPriority.
En lugar de hacer que el intermediario de mensajes reordene los mensajes dentro de un búfer a medida que llegan, a menudo existen mejores técnicas para implementar el consumo de prioridad, como tener un grupo de consumidores dedicado para mensajes de alta prioridad . Entonces, independientemente de la cantidad de ruido de los mensajes de baja prioridad, los mensajes de alta prioridad siempre se obtendrán.
Dada la naturaleza asíncrona de la mensajería, es fácil rellenar los buffers, las tuberías de la red y las colas de captación previa con mensajes de baja prioridad si se utilizan elementos como los encabezados JMSPriority, etc.
Parece que la mayoría de los sistemas de mensajería que he visto tienen soporte básico, si es que los hay, para colas de mensajes prioritarios. Por ejemplo, el AMQP solo specifies un mínimo de 2 prioridades. RabbitMQ, una implementación de AMQP, no admite ninguna prioridad. ActiveMQ obtendrá soporte para 10 prioridades de mensajes en la versión 5.4 en un par de días. 10 niveles de prioridad es el especificado por la especificación JMS .
Una cola de prioridad en el sentido de no-mensajería de la palabra ordena su contenido en base a un campo arbitrario con un rango de prioridades sin restricciones. ¿Por qué una implementación como esta no existe como parte de un sistema de mensajería? Como pregunté en el título, ¿es la prioridad un concepto intrínsecamente sin mensajería?
Me doy cuenta de que una respuesta podría ser que el concepto de prioridad introduce la posibilidad de mensajes infinitamente languideciendo en la cola mientras se procesan los mensajes de mayor prioridad. ¿Hay otras razones?
En general, los sistemas de colas de mensajes se utilizan para garantizar la entrega de mensajes entre sistemas dispares.
Por lo general, hay algún tipo de garantía de una sola vez y, a menudo, una promesa adicional de que los mensajes vendrán en orden.
En general, eso informa el diseño de los sistemas que están construyendo y conectando.
Los conceptos de prioridad entre sistemas desacoplados a menudo no tienen mucho sentido.
Dicho esto, una solución común es tener dos colas, una prioridad alta y una prioridad de fondo. Sin embargo, el problema inherente queda claro, ya que, por supuesto, el sistema receptor probablemente no puede detener el procesamiento de la solicitud de bajo nivel cuando se recibe una solicitud de mayor prioridad , por lo que generalmente se realizan de forma secuencial a ese nivel de granularidad.
Hay que tener cuidado ya que demasiadas prioridades no se utilizan hasta el punto en que usar el programa se vuelve más oneroso que pasar por cada mensaje.
Los sistemas de mensajería están diseñados y optimizados para orden cronológico. Los sistemas de archivos están optimizados para agregar archivos y no insertar datos al principio o en el medio. Las estructuras de datos en forma de cola generalmente se optimizan para agregarse al final y eliminarlas de la cabecera. Para los sistemas de archivos, esto significa agregar al archivo (agregar) y agregar a un registro de transacciones (eliminación), y eliminar los archivos de mensajes una vez que se consumen (eliminación).
La introducción de prioridades en una cola de procesamiento convierte efectivamente la cola en una estructura de datos que tiene orden cronológico y de prioridad. Básicamente, cuando se trata de trabajar con el almacenamiento de archivos, es bastante subóptimo, ya que tiene que crear algún tipo de estrategia de indexación.
Me parece que la idea es probablemente más parecida a la "prioridad de proceso" que a los valores de prioridad en una cola de prioridad. Ciertamente eso es consistente con la oración o dos acerca de eso en la especificación JMS, y evidentemente también con la especificación AMQP.