Las dos caras de la moneda - Real Time Analytics

Author Image

Brian Estévez LinkedIn

Blog

La analítica en tiempo real ya no es un lujo. Hoy en día, poder detectar fraudes, responder al comportamiento de usuarios y tomar decisiones al vuelo es una necesidad. En esta guía práctica te mostraré cómo montar una arquitectura moderna y funcional usando tecnologías de Microsoft: Azure, Microsoft Fabric y .NET Aspire.

Hace no mucho nos unimos dos tipejos a dar varias charlas sobre el real time. 

El gran Emiliano Montesdeoca

Y yo, yo soy el guapo.

🧱 Arquitectura general: ¿Qué queremos lograr?

Usuarios → Compran (Tienda física, online o app)  
        → Se guarda en base de datos  
        → Se emite un evento  
        → Se procesa en tiempo real (Azure Event Hub)  
        → Se notifica o visualiza (Microsoft Fabric + Power BI)

El corazón de todo esto es un enfoque basado en microservicios y procesamiento de eventos en tiempo real.

⚙️ Paso 1: Definir los microservicios

Mínimos indispensables:

  1. Payment Microservice: recibe y valida pagos.

  2. Event Microservice: emite eventos cuando se produce una compra.

  3. Notification Microservice: envía notificaciones si se detecta un evento crítico.

  4. Database Microservice: persiste los datos.

Usaremos .NET Aspire para orquestar y desarrollar esta solución distribuida de forma eficiente.

👉 .NET Aspire ofrece plantillas, integración con VS, telemetría out-of-the-box y facilidad de debugging local.

🔗 Más sobre .NET Aspire

🐳 Paso 2: Contenerización y despliegue

Usamos Azure Container Apps para desplegar cada microservicio en un contenedor independiente. Esto nos permite:

  • Escalar de forma independiente cada componente

  • Controlar el tráfico con balanceadores de carga

  • Ejecutar actualizaciones sin downtime

🚀 Paso 3: Envío de eventos con Event Hub

Cada vez que se realiza una compra, el Payment Microservice lanza un evento a Azure Event Hub.

Pequeño inciso por aquí, debemos recordar que existen varios patrones de análisis, pero, dos que nos atañen ahora mismo, el Batch Data Analytics y el Real-Time Data Analytics

Batch Data Analytics

  • Este enfoque consiste en cargar datos en un almacén analítico de forma periódica, generalmente en intervalos de tiempo específicos.
  • Los datos se procesan como un lote o conjunot, lo que permite realizar análisis históricos sobre eventos pasados.
  • Es ideal para reportes y análisis que no requieren resultados inmediatos, como tendencias mensuales o revisiones semanales.

Real-Time Data Analytics

  • Real-Time Analytics es útil para recopilar procesar y analizar datos insstantáneamente.
  • Es perfecto para cosas urgentes como detectar fraudes o responder usuarios en tiempo real.
  • Ejemplo: "Detecté que alguien compró 20 cajas de tirmas con una tarjeta sospechosa. Mejor bloqueemos esa transacción antes de que termine.

🧠 Paso 4: Procesamiento y analítica con Microsoft Fabric

Aquí es donde ocurre la magia:

  1. Captura los datos de Event Hub con EventStream en Microsoft Fabric.

  2. Transforma los datos en tiempo real con scripts KQL.

  3. Almacena en bases de datos KQL (Kusto DB) o Delta Lake sobre OneLake.

  4. Analiza con conjuntos de consultas en Power BI.

  5. Automatiza alertas con Activator cuando se detectan ciertos patrones.

  6. Visualiza en un dashboard en tiempo real con Power BI.

🧩 Todo esto en un entorno SaaS unificado. No necesitas gestionar infraestructura.

 

Ya he soltado esta chapa, ahora toca ver como lo hacemos

¿Cómo hemos montado esto para replicar los microservicios?

Bueno, lo que hemos hecho ha sido una solución distribuida desarrollada en .NET 9.0 que utiliza el framework Aspire para la gestión de servicios y el alojamiento de aplicaciones. Aquí tienes el repositorio emimontesdeoca/TransactionPlatform Está compuesta por varios proyectos que trabajan en conjunto para ofrecer una plataforma de transacciones.​

Componentes principales

  • TransactionPlatform.ApiService: Proporciona la API principal para la plataforma, gestionando las operaciones relacionadas con las transacciones.​

  • TransactionPlatform.AppHost: Actúa como anfitrión de la aplicación, coordinando los distintos servicios y asegurando su correcto funcionamiento.​

  • TransactionPlatform.Client: Es la interfaz de usuario o cliente que interactúa con la API, permitiendo a los usuarios realizar operaciones a través de una interfaz gráfica o de línea de comandos.​

  • TransactionPlatform.Models: Contiene las definiciones de los modelos de datos utilizados en la plataforma, asegurando una estructura coherente y reutilizable de la información.​

  • TransactionPlatform.ServiceDefaults: Incluye configuraciones y valores predeterminados para los servicios, facilitando su implementación y mantenimiento.​

Tecnologías utilizadas

  • .NET 9.0: La plataforma está construida sobre la última versión de .NET, aprovechando sus mejoras en rendimiento y características modernas.​

  • Aspire Framework: Utilizado para la gestión eficiente de servicios y el alojamiento de aplicaciones en entornos distribuidos.​

Pasos a seguir

  1. Clona el repositorio

¿Y ya? Si porque el segundo paso es pasarle las credenciales del EventHub y para eso tendremos que aprovisionarlo en Azure. 

¿Cómo aprovisionamos un EventHub?

Vamos a depender de tener una suscripción en Azure, dicho lo anterior:

  1. Creamos un grupo de recursos y
  2. En dicho grupo de recursos creado, vamos a crear un recurso de tipo Event Hubs
  3. Accedemos al recurso
  4. Clickamos en Entities > Event Hubs
  5. Creamos un nuevo EventHub Space
  6. Accdemos a Shared Acces Policies y creamos la policy de send y de listen

Ahora ya tenemos las dos policy creadas. Recuerdas que ya habías clonado un repositorio, el de TransactionPlatform. Pues bien, ahora desde Visual Studuio accede a la solución, te saldrá algo como esto

En TrasactionPlatform.ApiService, abre el archivo Program.cs 

Donde pone serviceBusConnectionString debemos copiar la connection string  de la SAS Policy send-ppt que hemos creado

 

Y en donde pone queueName debemos poner el nombre del space que creamos 

Guardamos y ya podríamos estar enviando eventos al EventHub. ¿Pero como ejecuto esta aplicación? A ver, como no vas a estar entrando cada vez que quieras probarlo, abres un cmd, te vas a la ruta TransactionPlatform.AppHost y ejecutas el comando dotnet run

Listo ya está enviado cosas al EventHub

 

Nos vamos a MS Fabric, nuestro gran aliado. 

¿Qué haremos en MS Fabric?

En MS Fabric trataremos la ingesta del dato que se está enviando al EventHub. Entonces, para hacernos un mapa mental crearemos en nuestro workspace:

  1. Crearemos un EventStream
  2. Y un EventHouse

En otra entrada del blog explicaré que más cosas se pueden hacer.

Crear el EventStream

Debemos rellenarlo con los datos del SAS Policy, pero, en este caso del listen-ppt que hemos creado

Volvemos a

Clickamos en connect y seleccionamos la conexión

 

Y esto ya nos crearía el EvenStream asociado al EventHub

Ya para ir finalizando este blog, vamos a "enviar" todo este flujo de datos hacia un EventHouse. Para ello, lo primero que haremos será crear un nuevo artefacto de MS Fabric de tipo EventHouse

 

 Una vez creado, vamos de nuevo al EventStream 

 

Le damos a publicar

 Una vez publicado, nos dará lo opción para configurar el EventHouse en el EventStream

Le damos a "New Table", le damos el nombre que queramos y clickamos siguiente.

En la siguiente pantalla nos dará una muestra de lo que veremos en el EventHouse.

Le damos a finish.

Y a close.

Si ahora volvemos al EventHouse que hemos creado, veremos algo como lo siguiente

Si clickamos en EventHouseBlog_queryset, ya podríamos empezar a trabajar con KQL (Kusto Query Language) para hacer consultas al EventHouse. (Recuerda esperar unos 5 minutos para que el EventStream reaccione y empiece a enviar datos al EventHouse)

 

Y a partir de aquí la imaginación es libre, aunque haremos alguna entrada en el blog haciendo referencia a que posibilidades tenemos a partir de aquí. Y también nos enfocaremos un poquito en que es KQL y sus beneficios.

Nos vemos en la siguiente 🚀