Saltar al contenido

Mejorando la Arquitectura Software con Colas y Buses de mensajería.

Compartir en:

Conceptos generales bus mensajería 

En este artículo, quisiera hablar sobre una herramienta que considero imprescindible en la era del software moderno: las colas de mensajes y los buses de mensajería. 

En las arquitecturas de software monolíticas, se suelen utilizar bases de datos y se opera bajo la premisa de que el software envía y recibe información entre las diferentes capas de forma confiable, rápida y segura.  

Esta visión funciona bastante bien cuando se trata de aplicaciones web simples, sistemas cliente-servidor para una fábrica, sistemas SCADA, entre otros. Sin embargo, cuando nos aventuramos en entornos distribuidos, complejos y desacoplados (como las típicas aplicaciones Cloud Native), los monolitos empiezan a presentar problemas.  

Debido a la naturaleza distribuida de la nube y a la arquitectura comúnmente descentralizada de los clientes (que rara vez se encuentran en un mismo lugar), resulta complicado centralizar los servicios, las interacciones, y mantener la escalabilidad y sincronización adecuadas. Para este tipo de entornos y desafíos, se hacen indispensables las colas de mensajes y los buses de mensajería. 

En la siguiente imagen vemos como se ve una cola de mansajes: 

Aunque para la gente más especializada, quizás esta manera de representar el esquema les suene más:  

A veces nuestra especialización nos puede jugar una mala pasada y nos puede hacer tomar decisiones de arquitectura basándonos en lo que más nos ha tocado, lo que mejor controlamos, y no en lo que es mejor para el sistema o la compañía, ojo con esto, plantéate cada sistema como un lienzo en blanco. 

Ventajas 

Este tipo de almacenamiento posibilita el desacoplamiento temporal de los componentes de tu sistema. En otras palabras, los clientes pueden enviar información a la cola en un instante, y otros procesos, servicios o clientes pueden recuperarla en un momento posterior, separado del tiempo de envío. 

Además, las colas de mensajes ofrecen estabilidad frente a las altas cargas de trabajo que se dan en la ingesta de datos. Actúan como balanceadores de carga, absorbiendo los picos de peticiones o mensajes y dejándolos en la cola, mientras que los procesos internos del software operan a su propio ritmo. Esto puede traducirse en un ahorro significativo de dinero, ya que se evita la necesidad de escalar los servicios para hacer frente a altos picos de demanda. 

En sistemas distribuidos, aplicaciones de microservicios o entornos operativos complejos, cualquier componente del sistema puede fallar en un momento dado, ya sea debido a una interrupción, mantenimiento o cualquier otra razón.  

Al desacoplar los servicios mediante un bus de mensajería o una cola, si un componente falla, los demás pueden seguir funcionando con normalidad, ya que envían los resultados de sus procesos a una cola. Solo se verían afectadas las partes que interactúan aguas abajo de ese servicio, pero la normalidad se restauraría tan pronto como el servicio vuelva a estar activo. 

Esto es posible gracias a que, como hemos mencionado antes, los mensajes pendientes quedan almacenados en la cola, esperando la disponibilidad del servicio caído. 

Otra ventaja significativa es el rendimiento y eficiencia de los procesos que consumen los mensajes de las colas. Estos procesos están en constante competencia por obtener un mensaje para procesar, justo en el momento en que terminan con el mensaje anterior. Esto ocurre sin necesidad de que otra entidad, como un balanceador de carga, les asigne trabajo. 

Caso Práctico

Os presento un ejemplo para ilustrar esto: imaginad un sistema de surtidores de combustible autónomos que envían sus transacciones para que puedan ser facturadas a los clientes. En un día normal, los surtidores generan unas 10.000 transacciones, y los procesos que gestionan estos datos para facturarlos están dispuestos tras un balanceador de carga.  

Este balanceador asigna las peticiones a los diferentes servicios replicados para agilizar la gestión de los datos. Pero ¿qué ocurre durante la Semana Santa, por ejemplo, cuando el sistema debe procesar en un día hasta 500.000 transacciones, o incluso 1.000.000? Esta situación podría provocar un colapso en el sistema, similar a un ataque DoS. Aunque escaláramos los servicios, el balanceador podría quedar saturado de peticiones, volviéndose tremendamente ineficiente en la distribución de las tareas.

 

Además, escalar nuestra aplicación podría suponer un desembolso económico considerable. Como sabemos, los servicios en la nube no son precisamente baratos. Si normalmente gastamos 1.000€ al mes en nuestros servicios de procesamiento de datos, un escalado masivo podría dar como resultado una factura de 5.000€, 10.000€ o incluso más. 

¿Qué beneficio aporta una cola a nuestro sistema? Para empezar, no importa cuántas peticiones reciba el sistema, seguirá funcionando de la misma manera. Solo tendrá una cola de mensajes recibidos mucho más grande, que podremos ir despejando durante la noche cuando la demanda del servicio sea más baja.  

Incluso podríamos escalar el servicio de manera controlada para ganar algo más de velocidad, pero sería la empresa la que decide hacerlo para incrementar la rapidez, no sería una necesidad impuesta por la arquitectura de nuestro sistema

Conclusión 

Concluyendo, las colas de mensajes y los buses de mensajería son herramientas extremadamente valiosas en la era moderna del software. Permiten un desacoplamiento temporal, proporcionan equilibrio frente a las altas cargas de trabajo, aumentan la tolerancia a fallos, y fomentan una competición saludable y eficiente entre los procesos de consumo de mensajes. En un mundo cada vez más dependiente de los sistemas distribuidos y las aplicaciones en la nube, la utilización de estas tecnologías se vuelve prácticamente imprescindible. 

En el caso de nuestro ejemplo de los surtidores de combustible, el uso de una cola permite absorber y manejar de manera eficiente las grandes cantidades de transacciones, protegiendo el sistema de posibles fallos y minimizando la necesidad de costosas escalas de servicio. 

Así que, al diseñar la arquitectura de tus sistemas, recuerda que las colas y los buses de mensajería pueden ser grandes aliados. No solo pueden ayudarte a mejorar la eficiencia y la resiliencia de tu sistema, sino que también pueden ocasionar importantes ahorros económicos. 

Mi consejo particular es que no te centres en lo que mejor controlas, huye de la especialización, y piensa en lo que es mejor para lo que estás diseñando, si no conoces bien la tecnología, infórmate, busca, pregunta, por suerte estamos en la era en la que conseguir información no es un problema.

Espero que este artículo te haya dado una visión más clara de las ventajas de utilizar las colas de mensajes y los buses de mensajería en tus proyectos. En una futura entrada, profundizaremos en algunos de los servicios de cola disponibles en Azure y cómo se pueden integrar en tus aplicaciones. Este artículo es introductorio antes de meternos en el código. 

Gracias por leer, y como siempre, si tienes alguna pregunta o comentario, no dudes en dejarlo a continuación. 


Juan Ibero

Inmerso en la Evolución Tecnológica. Ingeniero Informático especializado en la gestión segura de entornos TI e industriales, con un profundo énfasis en seguridad, arquitectura y programación. Siempre aprendiendo, siempre explorando.

Compartir en:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *