Mostrando las entradas con la etiqueta Cola de Mensajes. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Cola de Mensajes. Mostrar todas las entradas

diciembre 04, 2023

Colas

 Colas.

    Mientras que los grupos y publicación-suscripción proporcionan un estilo de comunicación de uno a varios, las colas de mensajes proporcionan un servicio punto a punto utilizando el concepto de cola de mensajes como una indirección, logrando así las propiedades deseadas de desacoplamiento de espacio y tiempo. Son punto a punto en el sentido de que el remitente coloca el mensaje en una cola y luego es eliminado por un solo proceso. Las colas de mensajes también se conocen como Middleware orientado a mensajes.

  Modelo de programación

    El modelo de programación, figura 1, que ofrecen las colas de mensajes es muy sencillo. Ofrece un acercamiento a la comunicación en sistemas distribuidos a través de colas. En particular, los procesos productores pueden enviar mensajes a una cola específica y otros procesos (consumidores) pueden recibir mensajes de esta cola. Se admiten tres estilos de recepción: 
  • una recepción con bloqueo, que se bloqueará hasta que esté disponible un mensaje apropiado; 
  • una recepción sin bloqueo (una operación de sondeo), que verificará el estado de la cola y devolverá un mensaje si está disponible, o una indicación de no disponible en caso contrario; 
  • una operación de notificación, que emitirá una notificación de evento cuando un mensaje esté disponible en la cola asociada. 
Figure 1: Modelo de Programación.



 Características

    Entre sus características: 
  • Varios procesos pueden enviar mensajes a la misma cola y, del mismo modo, varios receptores pueden eliminar mensajes de una cola.  
  • La política de colas es el primero en entrar, primero en salir (FIFO), pero la mayoría  de las implementaciones de colas de mensajes también admiten el concepto de prioridad, con los mensajes de mayor prioridad entregados primero. Los procesos de consumidor también pueden seleccionar mensajes de la cola según las propiedades de un mensaje.  
  • Un mensaje consta de un destino ( un identificador único que designa la cola de destino), metadatos asociados con el mensaje, incluidos campos como la prioridad del mensaje y el modo de entrega, y también el cuerpo del mensaje.  Los mensajes son persistentes, es decir, las colas de mensajes almacenarán los mensajes indefinidamente (hasta que se consuman) y también enviarán los mensajes al disco para permitir una entrega confiable. 
  • Cualquier mensaje enviado se recibe eventualmente (validez) y el mensaje recibido es idéntico al enviado, y ningún mensaje se entrega dos veces (integridad). Por lo tanto, los sistemas de cola de mensajes garantizan que los mensajes se entregarán (y se entregarán una vez), pero no pueden decir nada sobre el momento de la entrega.

 

Bibliografia:

[1] Sasu Tarkoma. Publish/Subscribe Systems: Design and Principles. Edited by Joe
Sventek David Hutchison Serge Fdida. 2012. 
[2]  George Coulouris et al. Distributed Systems: Concepts and Design. 5th. USA:
Addison-Wesley Publishing Company, 2011. ISBN: 0132143011 
[3] Roberto Vitillo. Understanding Distributed Systems. 2021

junio 22, 2022

Cola de Mensajes y Microservicios

 Cola de Mensajes

Una cola de mensaje es un protocolo de comunicaciones asíncrono, el cual consiste en comunicar dos procesos separados mediante una cola (de mensajes) la cual incluye una secuencia de objetos creados por el emisor (productor)  esperando ser procesados por el proceso que lo consumirá (consumidor). Un sistema que pone un mensaje en una cola de mensajes no requiere una respuesta inmediata para continuar el procesamiento. 

 Una cola de mensajes ofrece un búfer ligero que almacena temporalmente los mensajes, y puntos de enlace que permiten a los componentes de software conectarse a la cola para enviar y recibir mensajes.  ver Figura 1.

1. Cola de Mensajes

Existen varias soluciones para protocolos de colas de mensajes: AMQP, MQTT, STOMP. Veamos las características de AMQP.

Protocolos de Colas de Mensaje AMQP

AMQP (Advanced Message Queuing Protocol). El protocolo AMQP opera de la siguiente manera: por un lado, el protocolo (en colaboración con un bróker de mensajería) se encarga de una transmisión de datos. Por otro, AMQP permite almacenar mensajes en una cola. Esto, a su vez, permite una comunicación asíncrona: transmisor y receptor no deben actuar al mismo ritmo. El receptor (consumidor) recuperará el mensaje de la cola cuando tenga capacidad disponible para ello ( el receptor  no tiene por qué aceptar el procesamiento de la información  ni la confirmación de la recepción al emisor).  Esto ofrece al productor (publicador), entre otras cosas, la posibilidad de seguir trabajando y se evitan los tiempos de inactividad.  Ver Figura 2.

2. Protocolo AMQP

En AMQP. el mensaje es el elemento central de comunicación y además de una serie de elementos:
  • El productor o publicador (publisher) crea un mensaje, lo envía y es publicado en un buzón (exchange).
  • El servidor (bróker de mensajería) distribuye o enruta el mensaje desde el buzón de acuerdo con unas reglas definidas (bindings) en diferentes colas (queue).
  • El consumidor (consumer) recupera el mensaje de la cola a la que está suscrito.

El buzón o intercambiador (exchange) recibe los mensajes y dirige los datos a una cola utilizando una vinculación (binding) que le permite decidir cuál es la correcta. 

El bróker interrumpe la difusión del mensaje una vez más: el intercambiador recibe los mensajes y dirige los datos a la cola correcta. La vinculación informa al intercambiador sobre la cola a la que pertenece el mensaje. 

Cola de Mensajes y Microservicios

Una cola de mensajes es una forma de comunicación asíncrona que se usa en arquitecturas de microservicios. Los mensajes se almacenan en la cola hasta que se reciben y, luego se eliminan,  siendo cada mensaje procesado una sola vez.

Esta estructura intermedia permite ajustar la velocidad y disponibilidad de diferentes microservicios de forma que puedan trabajar conjuntamente y puedan recuperarse de los errores, lo que aumenta el nivel de tolerancia a fallos. 

La siguiente figura, Figura 3, muestra la arquitectura propuesta para una aplicación de comercio electrónico, usando microservicios. Los microservicios proyectados son: Facturación, Notificaciones, Pagos, Gestión de Cuenta, Archivos y Reportes. Cada microservicio tiene una  interfaz pública, API. El API Gateway, es un microservicio adicional que opera como un balanceador de cargas.

3.  Arquitectura de Aplicación de Comercio Electrónico. Tomado de  [4].

Cuando se usa el patrón de mensaje publicador/subscriptor y la topología de comunicación AMQP , el publicador envía un mensaje al destinatario con un tópico. La habilidad del publicador de poner el mensaje es independiente de la disponibilidad de la aplicación subscriptora. 
La cola de mensaje actúa como intermediario, y es responsable de entregar el mensaje a los subscriptores.  En cualquier momento, el subscriptor podría no estar disponible, por lo que la cola de mensaje puede retener el mensaje hasta que el subscriptor sea capaz de consumirlo, esto puede servir como un mecanismo de comunicación resistente a fallas entre los servicios involucrados.
Si un proceso en un sistema desacoplado falla  al procesar mensajes de la cola, otros mensajes pueden agregarse a la cola y procesarse cuando el sistema se haya recuperado.  

En la figura 3, el API Gateway y  Orden, poseen un adaptador para trabajar con cola de mensajes ( con RabbitMQ ). Este adaptador les provee acceso a un servidor de cola de mensajes, en el cual pueden publicar información en caso de que ocurra algún error en la comunicación. En tal sentido, el API Gateway al recibir un mensaje de error cuando se comunica con  Orden, guarda la información en la cola. Dicha información será leída de la cola de mensaje cuando el microservicio Orden esté disponible nuevamente, y de esta manera pueda continuar con el flujo del proceso.

El mismo mecanismo de cola de mensaje se utiliza entre el microservicio de Notificación y el de Usuario:  cuando el microservicio de Notificación hace el llamado asíncrono a un método del microservicio de Usuario  , y por algún error o falla el microservicio de Usuario no está disponible, el microservicio Notificación publicará un mensaje en la cola de mensajes. Cuando el microservicio Usuario esté disponible, automáticamente leerá la cola de mensaje para resolver las llamadas a funciones que estén en la cola.


Referencias

  1. Coulouris, George F. Distributed Systems: Concepts and Design. Boston: Addison-Wesley, 2012.
  2. Tanenbaum, Andrew S., and Maarten van Steen. Distributed Systems: Principles and Paradigms. Upper Saddle River, NJ: Pearson Prentice Hall, 2007. 
  3. Rodrigues, Luís and Veríssimo, Paulo. Advances in Distributed Computing and Middleware. 
  4. Salas, A., Marquez, A. Arquitectura orientada a Microservicios aplicada a un sistema de Comercio Electrónico. Trabajo de Grado de Pregrado, UNEG. 2017.
  5. Protocolo AMQP
  6. Microservicios y Colas de Mensajes
  7. Cola de Mensajes