Hoy en día los sistemas de información se componen de múltiples componentes, tales como aplicaciones monolíticas, servicios web, procesos batch, etc.
La transformación digital requiere que exista un flujo de información entre esos componentes, lo que plantea una serie de desafíos debido a las distintas tecnologías que se han ido utilizando a lo largo del tiempo.
El uso de servicios web para transferir información entre sistemas suele ser la opción más adecuada y ampliamente elegida, pero existen matices a tener en cuenta, sobre todo a nivel de disponibilidad, puesto que ambos sistemas deben estar en línea de forma simultánea y deben ser capaces de soportar la misma carga de tráfico.
En escenarios donde sea importante controlar la carga de trabajo (tanto en volumen como en qué momento ejecutarla) puede aplicarse Azure Service Bus.
¿Qué es Azure Service Bus?
Azure Service Bus es un agente de mensajes que incluye colas en las que se pueden enviar mensajes y topics a los que es posible suscribirse para recibir esos mensajes. La gran ventaja de este sistema es que se pueden enviar mensajes a la cola de forma masiva para luego procesarlos de forma asíncrona pudiendo controlar la carga de trabajo.
Azure Service Bus ofrece alta disponibilidad, redundancia y recuperación ante desastres, como la mayoría de servicios de Azure.
Conceptos
Mensajes: Un mensaje es una cadena de texto con un formato estructurado (Json, XML, Apache Avro) o no estructurado, al que se le aplica una serie de metadatos
Colas: Los mensajes se almacenan en las colas. A su llegada, los mensajes se ordenan y se les aplica una marca de tiempo. Los mensajes quedan disponibles en la cola hasta que una aplicación los «extrae”.
Temas (Topics): Los temas son útiles en escenarios de publicación y suscripción. Un mensaje puede publicarse para un tema concreto. Posteriormente, varias aplicaciones pueden estar suscritas a ese tema, lo que permite que reciban distintas copias de ese mensaje.
Espacio de nombres: Un espacio de nombres es una especie de «servidor» que puede contener distintas colas
Escenarios de uso
Mensajería: Transferir datos entre aplicaciones, tales como pedidos, mensajes de chat, movimientos de inventario, etc.
Desacoplamiento de aplicaciones: Al permitir procesar la información de forma asíncrona, esto es, sin que ambos sistemas deban estar en línea o disponibles de forma simultánea
Equilibrado de carga: Se permite la escritura y lectura de mensajes en paralelo, de modo que varios consumidores puede estar suscritos a un topic y procesar los mensajes entrantes de forma sincronizada
Uso de temas o topics: Cada mensaje introducido en la cola puede tener un tema o topic asignado, lo que permite que las aplicaciones suscritas a un tema concreto solo reciban los mensajes que deben procesar
Transacciones: Es posible encadenar operaciones atómicas, como por ejemplo procesar los mensajes y publicar los resultados en una o varias colas para que otras piezas de software puedan a su vez recibir esos resultados y procesarlos
Laboratorio Azure Service Bus
En este laboratorio de uso hemos realizado una aplicación de ejemplo de mensajería (chat) con las siguientes características:
- Aplicación de consola .NET 5
- Creación de canal para los mensajes (topic)
- Envío y recepción de mensajes del canal
Código fuente disponible en GitHub
Requisitos para su ejecución:
- Suscripción de Azure
- Recurso Azure Service Bus Standard (10 $USD / 12.5 millones de mensajes / mes). Se requiere al menos la versión Standard para el uso de topics.