Patrón CQRS: qué es y cómo implementarlo dentro del framework Axon

4 min read
24 de julio de 2023

CQRS es un patrón de arquitectura de software que se caracteriza por separar las responsabilidades de lectura y escritura de datos en una aplicación. 

Creado por el desarrollador Bertrand Meyer, su principal atractivo radica en que nos permite usar dos modelos (uno para la lectura y otro para la escritura) que podemos optimizar de manera independiente lo que nos da mayor flexibilidad para responder a casos de uso específico. 

En CQRS existen con dos modelos diferenciados, los comandos (commands), que se encargan de actualizar los datos y las consultas (queries) que se limitan a leer los datos.

en la infografía se ve cómo funciona una arquitectura cqrs


Normalmente, CQRS es acompañado por el patrón Event Sourcing que permite guardar como una secuencia de eventos cada uno de los cambios que hacemos en el estado de una aplicación. A través de este historial de cambios podemos revisar  la evolución de una entidad y regresar a alguno de sus estados anteriores en cualquier momento.  

En este artículo conocerás en qué tipo de proyectos es recomendable utilizar el patrón CQRS, cuáles son las principales dificultades que te puedes encontrar al implementarlo y, adicionalmente, encontrarás un video de una de nuestras Pragma Talk en la que podrás encontrar un ejemplo de implementación de CQRS en el Famework Axon. 

Antes de entrar en materia, un anuncio importante: si tienes experiencia desarrollando en Java y quieres trabajar en una  multinacional con grandes proyectos, rodeado por una comunidad que comparte conocimiento y te ayuda a crecer, consulta nuestra oferta de empleos y lleva tu carrera al siguiente nivel. 

¿Para qué sirve CQRS?

Lo que ganamos cuando separamos las operaciones de lectura y escritura es que podemos optimizar cada una ellas de manera independiente.

De esta manera, logramos que los comandos se procesen de forma asincrónica y que escalen horizontalmente para soportar grandes cargas de trabajo. Por su parte, en el patrón CQRS las consultas pueden ser optimizarlas de manera que hagan una lectura más eficiente de los datos. 

Aunque CQRS es un enfoque muy potente para mejorar la escalabilidad y el rendimiento de las aplicaciones, es importante aprender a reconocer en qué situaciones es conveniente utilizarlo, una tarea en la que es fundamental tener en cuenta las necesidades específicas del proyecto. 

¿En qué escenarios es recomendable usar CQRS?

Utilizar un patrón de arquitectura CQRS puede darnos una base para que los activos digitales que desarrollemos crezcan y evolucionen a largo plazo. Te contamos en qué situaciones es recomendable utilizar este tipo de patrón: 

  • Cuando estamos creando un sistema con reglas de negocio que cambian con frecuencia. CQRS se adapta mejor a proyectos que van a seguir evolucionando después de un release inicial. 
  • CQRS es muy útil cuando necesitamos que los procesos de lectura y escritura de datos tengan especificaciones propias y puedan ajustarse por separado.
  • Usar el patrón CQRS también es recomendable cuando una parte de nuestro equipo se puede hacer cargo del modelo de escritura mientras otra se dedica a la interfase de usuario y al modelo de lectura. 
  • Como explicamos anteriormente, el patrón Event Sourcing nos permite guardar los cambios de estado en una aplicación como una secuencia de eventos. Este tipo de sistemas se integran particularmente bien con el patrón CQRS y juntos nos permiten prevenir que una falla temporal en un sistema afecte la disponibilidad de los otros. 
 CQRS ofrece importantes beneficios en escalabilidad, rendimiento y flexibilidad pero también puede implicar desafíos importantes que vale la pena conocer. Te contamos algunos de ellos. 

Algunas desventajas de CQRS

Cuando usamos CQRS introducimos una capa de complejidad extra en nuestros proyectos. Te contamos algunas dificultades que esto puede traer y debes tener en cuenta. 

Mayor complejidad del sistema

Separar los comandos y las consultas necesariamente implica tener una arquitectura más compleja. Esto, aunque puede ser positivo pues nos permite optimizar la lectura y la escritura de manera independiente, a largo plazo también puede implicar mayores esfuerzos para la implementación y el mantenimiento del sistema .

Mayor esfuerzo en términos de desarrollo

Por otro lado, si el equipo de desarrollo no está familiarizado con CQRS es posible  separar las lógicas de escritura y lectura impacte los tiempos de entrega del proyecto. Por eso es muy importante que si usamos CQRS realizar una planeación meticulosa, mantengamos una comunicación constante con entre todas las partes del equipo.

Problemas de consistencia 

Cuando un comando modifica el estado del sistema este cambio puede tardar en verse reflejado en la parte del sistema encargada de los query. Esto implica que, cuando usamos CQRS hay que tener un cuidado especial para no tener problemas de consistencia.  

Complicaciones en el sistema de mensajería 

Cuidar la consistencia es todavía más importante cuando tenemos que acompañar CQRS por un sistema de mensajería que nos permita  procesar comandos y publicar eventos actualizados. En estos casos es necesario tomar las previsiones necesarias para evitar problemas, particularmente los  relacionados con duplicaciones o fallos en el sistema de mensajería. 

Si los requerimientos de tu proyecto hacen que usar CQRS sea la alternativa adecuada es muy recomendable utilizar el Framework Axon para . Sigue leyendo para aprender cómo funciona.

Cómo funciona el Framework Axon y cómo implementarlo 

El framework Axon es una alternativa open-source que utiliza Java y que le ofrece a los desarrolladores herramientas para construir aplicaciones escalables y basadas en microservicios. 

Axon nos ayuda a construir aplicaciones que usan CQRS y Event Sourcing con implementaciones que nos ayudan gestionar commands,  eventos, aggregates, repositorios, patrones de event sourcing y mensajería distribuida. Si necesitas más información sobre estos y otros conceptos clave en el mundo de los microservicios puedes revisar este artículo.  

La principal ventaja de utilizar el framework Axon es que nos ofrece la posibilidad de dejar de preocuparnos por la configuración y flujo de datos y dedicar más tiempo a las reglas de negocio.

Axon también nos permite utilizar event hadlerspara manejar la concurrencia y procesar los eventos en un orden específico, así como facilita el unit testing al permitirnos crear pruebas del tipo given-when-then. 

En este Pragma Talk te explicamos en detalle un ejemplo de implementación de CQRS dentro del Framework Axon.

 

Si tienes experiencia en Java y estás buscando un lugar para crecer como profesional rodeado por una comunidad que comparte conocimiento y se enfrenta a retos de talla internacional, no olvides consultar nuestra oferta laboral.

Nueva llamada a la acción

Suscríbete al
Blog Pragma

Recibirás cada mes nuestra selección de contenido en Transformación digital.

Imagen form