Sunday, May 14, 2023

El patrón CQRS

¿Cuándo surgió el patrón CQRS?

El patrón CQRS (Command Query Responsibility Segregation) es un patrón de diseño de software que surgió por primera vez en 2010. Fue presentado por Greg Young durante su charla en la conferencia "Code on the Beach" en Florida, Estados Unidos.

 A traditional CRUD architecture

A basic CQRS architecture

A CQRS architecture with separate read and write stores

¿Cuáles son los beneficios de usar el patrón CQRS?

El patrón CQRS (Command Query Responsibility Segregation) puede proporcionar varios beneficios al diseño de un sistema de software:

  1. Separación de responsabilidades: La separación de la responsabilidad de manejar comandos (responsabilidad de modificar el estado del sistema) de la responsabilidad de manejar consultas (responsabilidad de leer el estado del sistema) hace que el código sea más fácil de entender y mantener. Cada parte del sistema se enfoca en una tarea específica, lo que puede facilitar el trabajo en equipo y la escalabilidad.
  2. Escalabilidad: El patrón CQRS permite una mayor escalabilidad, ya que la parte de consulta y la parte de comando pueden ser escaladas por separado. Por ejemplo, se pueden agregar más servidores para manejar consultas sin afectar la parte de comandos, o viceversa.
  3. Mejora del rendimiento: Al separar las partes de lectura y escritura, se pueden optimizar los componentes específicos del sistema para mejorar el rendimiento. Por ejemplo, se pueden usar diferentes bases de datos para almacenar la información de comandos y consultas, o se pueden optimizar las consultas para que sean más rápidas.
  4. Flexibilidad en el diseño: El patrón CQRS proporciona una mayor flexibilidad en el diseño del sistema, ya que se puede elegir diferentes tecnologías y herramientas para implementar la parte de comando y la parte de consulta. Esto permite al desarrollador elegir las herramientas y tecnologías más apropiadas para cada parte del sistema, lo que puede mejorar el rendimiento y la escalabilidad del sistema.
  5. Mayor simplicidad en la lógica de negocio: Al separar las responsabilidades, la lógica de negocio se puede simplificar y hacer más clara. Por ejemplo, la lógica para procesar y validar un comando es diferente de la lógica para devolver una respuesta a una consulta. Al separar estas responsabilidades, la lógica de negocio puede ser más fácil de entender y de mantener.

¿En qué escenarios conviene usar el patrón CQRS?

El patrón CQRS (Command Query Responsibility Segregation) se puede utilizar en diferentes escenarios en los que se necesita una alta escalabilidad y rendimiento, y en los que se busca una mayor separación de responsabilidades entre las operaciones de lectura y escritura del sistema. Algunos ejemplos de escenarios en los que se puede utilizar este patrón son:

  1. Aplicaciones de comercio electrónico: En una aplicación de comercio electrónico, se realizan muchas consultas para recuperar información sobre productos, precios, disponibilidad, etc., pero también hay muchas transacciones que cambian el estado del sistema, como la creación de órdenes, el manejo de inventario, etc. El uso de CQRS puede permitir una mayor escalabilidad y rendimiento al separar las responsabilidades de lectura y escritura.
  2. Sistemas de análisis de datos: En un sistema de análisis de datos, se realizan muchas consultas complejas para recuperar información sobre grandes conjuntos de datos, pero también se realizan muchas operaciones de carga de datos y procesamiento de datos. El uso de CQRS puede permitir una mayor escalabilidad y rendimiento al separar las responsabilidades de lectura y escritura, y al permitir el uso de diferentes tecnologías y herramientas para cada parte del sistema.
  3. Aplicaciones de mensajería: En una aplicación de mensajería, se realizan muchas consultas para recuperar mensajes y conversaciones, pero también se realizan muchas operaciones de escritura para enviar nuevos mensajes, archivar conversaciones, etc. El uso de CQRS puede permitir una mayor escalabilidad y rendimiento al separar las responsabilidades de lectura y escritura, y al permitir la optimización de cada parte del sistema para su tarea específica.
  4. Sistemas de gestión de contenidos: En un sistema de gestión de contenidos, se realizan muchas consultas para recuperar información sobre páginas, publicaciones, usuarios, etc., pero también se realizan muchas operaciones de escritura para crear, actualizar o eliminar contenido. El uso de CQRS puede permitir una mayor escalabilidad y rendimiento al separar las responsabilidades de lectura y escritura, y al permitir la optimización de cada parte del sistema para su tarea específica.

Implemenación manual del patrón CQRS en .NET

La implementación manual implica crear todas las clases y componentes necesarios para separar las responsabilidades de los comandos y las consultas en diferentes clases y objetos. Esto puede requerir más trabajo, pero ofrece un mayor control y flexibilidad sobre la arquitectura de la aplicación.

Implementación del patrón CQRS usando MediatR

La implementación del patrón CQRS utilizando MediatR es una forma más simplificada y conveniente de implementar el patrón CQRS en .NET. MediatR es una librería de mediación de solicitudes que simplifica la comunicación entre diferentes componentes de la aplicación. 

https://jayanttripathy.com/cqrs-pattern-with-mediatr-in-asp-net-core-5-0/

Monday, May 8, 2023

Procesos batch vs procesos en línea en aplicaciones informáticas

Los procesos batch son programas que se ejecutan automáticamente en un ordenador sin necesidad de intervención humana. Estos programas se ejecutan en lotes o conjuntos, y se procesan todos juntos en un momento determinado, como al final del día. Los procesos batch se utilizan comúnmente para procesar grandes cantidades de datos o para tareas que requieren mucho tiempo de procesamiento. Por ejemplo, un proceso batch podría usarse para generar informes diarios a partir de grandes cantidades de datos, como transacciones bancarias.

Por otro lado, los procesos en línea son programas que se ejecutan en tiempo real y se comunican con el usuario a través de una interfaz. Estos programas permiten que los usuarios interactúen con el sistema informático, proporcionando información en tiempo real y permitiendo que el sistema responda de manera inmediata. Un ejemplo común de un proceso en línea es un programa de procesamiento de textos, donde el usuario puede ingresar texto y ver los cambios en tiempo real mientras escribe.



Sunday, May 7, 2023

Importancia del uso de un APM en el monitoreo y optimización del rendimiento de una aplicación

¿Qué es APM?

Application Performance Management (APM) es una práctica que se utiliza para monitorear y administrar el rendimiento y la disponibilidad de aplicaciones de software. APM se enfoca en medir y analizar la experiencia del usuario, la eficiencia de las transacciones y la salud general de las aplicaciones. Entre las características comunes de las herramientas de APM se incluyen:

  • La supervisión de la disponibilidad y el rendimiento
  • El seguimiento de solicitudes y transacciones
  • La detección de excepciones y errores
  • La correlación de datos de eventos
  • La visualización de estadísticas y métricas de rendimiento 
Las herramientas de APM también pueden proporcionar alertas y notificaciones automáticas para ayudar a los equipos de operaciones a identificar y solucionar problemas de forma proactiva.

Plataformas

Hay muchas plataformas de Application Performance Management (APM) disponibles en el mercado, cada una con sus propias características y enfoques. Algunas de las plataformas de APM más populares son:

  • Dynatrace: una plataforma líder en el mercado que utiliza la inteligencia artificial para monitorear, analizar y optimizar el rendimiento de las aplicaciones.
  • AppDynamics: una herramienta de APM que utiliza el seguimiento de transacciones para monitorear el rendimiento de las aplicaciones y la infraestructura subyacente.
  • New Relic: una plataforma de APM que proporciona supervisión de la disponibilidad y el rendimiento, detección y solución de problemas de rendimiento, y correlación de datos de eventos.
  • Azure Application Insights: una herramienta de APM de Microsoft que proporciona recopilación de telemetría de la aplicación, seguimiento de solicitudes, supervisión de la disponibilidad y el rendimiento, y detección de excepciones.
  • Datadog: una plataforma de monitoreo de la nube que también ofrece capacidades de APM, incluyendo supervisión de la disponibilidad y el rendimiento, seguimiento de solicitudes y análisis de errores.
  • SolarWinds Server & Application Monitor: una herramienta de APM que ofrece supervisión y alertas en tiempo real para aplicaciones y servidores.
  • IBM Cloud App Management: una plataforma de APM que utiliza el análisis predictivo y la inteligencia artificial para monitorear y optimizar el rendimiento de las aplicaciones.

Dynatrace vs Azure Application Insights

Dynatrace es considerada líder en el mercado de APM debido a su enfoque en la inteligencia artificial y la automatización. Utiliza la inteligencia artificial para analizar automáticamente los datos de telemetría y detectar problemas de rendimiento en tiempo real, lo que permite a los equipos de operaciones y desarrollo resolver rápidamente los problemas.

Además, Dynatrace ofrece una amplia gama de características de APM, como seguimiento de transacciones, supervisión de la disponibilidad y el rendimiento, visualización de datos en tiempo real y correlación de eventos, que brindan una visibilidad completa del rendimiento de las aplicaciones.

También cuenta con una amplia gama de integraciones con herramientas y servicios de terceros, lo que facilita su uso y su integración con el resto del ecosistema de herramientas de la organización.

Por otro lado, Azure Application Insights es una herramienta de APM integrada en la plataforma de nube de Microsoft, lo que la hace fácil de integrar con otras herramientas y servicios de Azure. Aunque también cuenta con una amplia variedad de características de APM, no tiene la misma capacidad de automatización y análisis en tiempo real que Dynatrace.

¿Qué es la instrumentación automática para Azure Application Insights?

De forma rápida y sencilla, la instrumentación automática permite que Application Insights haga que la telemetría (métricas, solicitudes y dependencias) esté disponible en el recurso de Application Insights.
  • No se requiere ningún cambio de código.
  • Se elimina la sobrecarga de la actualización del SDK.
  • Recomendada cuando esté disponible.

¿Por qué usar un APM?

Se requiere el uso de un APM (Application Performance Management) por varias razones:
  • Identificar problemas de rendimiento: Un APM permite monitorear y recopilar datos de rendimiento de una aplicación en tiempo real. Esto ayuda a identificar problemas de rendimiento, como lentitud, cuellos de botella, errores y otros problemas que pueden afectar la experiencia del usuario.
  • Mejorar la experiencia del usuario: Al identificar y resolver los problemas de rendimiento, se puede mejorar la experiencia del usuario y la satisfacción del cliente. Esto puede llevar a una mayor retención de clientes y un mejor rendimiento financiero.
  • Optimizar el rendimiento: Con un APM, se pueden realizar ajustes y optimizaciones en la aplicación para mejorar el rendimiento y la eficiencia. Esto puede ayudar a reducir los costos operativos y mejorar la productividad.
  • Ahorrar tiempo y recursos: Un APM automatiza la recopilación y el análisis de datos de rendimiento, lo que permite a los equipos de operaciones y desarrollo ahorrar tiempo y recursos al solucionar problemas de rendimiento más rápidamente.
  • Mantener el cumplimiento y la seguridad: Al monitorear el rendimiento de una aplicación, se pueden identificar y resolver problemas de seguridad y cumplimiento que pueden poner en riesgo la seguridad y privacidad de los datos.

Links






API Gateway with ASP.NET Core

Grandes preguntas: ¿Repites mucho código en cada nuevo microservicio? ¿Haces que tus frontends llamen múltiples endpoints para obtener lo qu...