SlideShare a Scribd company logo
1 of 25
Foro de arquitectos 2015
CQRS/ES - Cambiando tu forma de pensar
¿Quienes Somos?
https://www.desarrollaconmicrosoft.com/dotnetspain2015
Sobre todo esta es una charla seria sobre escalabilidad, eh???
Bertrand Meyer (via Wikipedia)
“Command Query Separation”
“every method should either be a command that performs an action,
or a query that returns data to the caller, but not both. In other words,
asking a question should not change the answer.”
¿CQS? ¿Pero esto no iba de CQRS?
■ “Command Query Responsibility Segregation”
■ Es un patrón que se basa en el principio CQS.
■ No es una arquitectura, es un patrón.
¿Qué es CQRS?
CQRS como táctica de guerra
■ Aislamiento
■ Agilidad
■ Pruebas
■ Mantenimiento
■ Escalabilidad
■ Disponibilidad
■ ...
Beneficios de usar CQRS
CQRS por un niño de 10 años
CQRS en serio
■ El 90% del acceso a nuestras aplicaciones son consultas
■ Muy rápidas
■ Cachealas!
■ Consitencia eventual
Consultas
■ Aplicable a todo el sistema o solo a una parte (Base de datos)
■ Es lo opuesto a la consistencia de datos
■ Es una característica natural de los sistemas distribuidos y escalables
Consistencia eventual
Teorema de CAP
■ Son directivas del dominio para ejecutar una acción
■ Pueden ser rechazados por el dominio (Validaciones/Negocio)
■ Puede dar resultado a 0:n eventos
■ Siempre en imperativo
■PlaceOrder, no OrderPlaced
■ Un manejador por commando
■ Pueden ser encolados
Comandos
Perdiendo el miedo a los comandos
public class PlaceOrderCommand
{
//properties
public readonly Guid OrderId;
public readonly string Comment;
//ctor
public PlaceOrderCommand(Guid id, string comment)
{
OrderId = id;
Comment = comment;
}
}
■ Son el resultado de una acción que ha ocurrido en el dominio
■ Nunca pueden ser rechazados
■ Siempre en pasado
■ OrderPlaced, no PlaceOrder
Eventos
■Captura todos los cambios de estado que se produce en nuestra
aplicación como una secuencia de eventos en el orden en que
suceden.
■No modelo entidad/relación o modelo de objectos.
■Tenemos todo el historial de operaciones realizadas frente a lo que se
conoce como “last-known good state”.
■No es una arquitectura independiente.
■Casa perfectamente con DDD y CQRS.
¿Qué es Event Sourcing?
ID Modified … State
1 26/01/2015 … Pending
¿Cómo funciona?
Sistema tradicional
Event Sourcing
ID Modified … State
1 28/01/2015 … Cancelled
1 27/01/2015 … Approved
1 26/01/2015 … Pending
ID Modified … State
1 27/01/2015 … Approved
ID Modified … State
1 28/01/2015 … Cancelled
¿Cómo funciona?
■Es una base de datos para almacenar eventos:
■GetEventStore – http://geteventstore.com
■NEventStore – http://neventstore.org
■Base de datos relacional (JSON)
■Base de datos documental
Event Store
■Volviendo a ejecutar los eventos (Replay Events)
Pero… ¿Qué ocurre si tenemos que volver a ejecutar eventos para saber cual es el
estado de nuestra cuenta bancaria? ¿Qué pasa si la abrimos hace 10 años?
Podemos encontrarnos con problemas de rendimiento al tener que ejecutar miles de
eventos…
¿Cómo podemos solucionar esto?
¿Cómo reconstruimos el estado de la aplicación?
■Para evitar tener que ejecutar miles de eventos para reconstruir el estado de
nuestra aplicación se usan Data Snapshots.
■Cada x eventos guardamos el estado actual de nuestra aplicación. (Caché)y
podemos hacer un replay de eventos desde es momento.
Data Snapshots
Probablemente no 
¿Debería usar CQRS/ES?
¿Preguntas?
Gracias!

More Related Content

Similar to Foro arquitectos de Microsoft 2015 - CQRS/ES Cambiando tu forma de pensar

03 troubleshooting essentials dmv - sql pass peru
03 troubleshooting essentials   dmv - sql pass peru03 troubleshooting essentials   dmv - sql pass peru
03 troubleshooting essentials dmv - sql pass peru
Guillermo Taylor
 

Similar to Foro arquitectos de Microsoft 2015 - CQRS/ES Cambiando tu forma de pensar (20)

Testing de Aplicaciones Móviles, Públicas, Masivas y Críticas
Testing de Aplicaciones Móviles, Públicas, Masivas y CríticasTesting de Aplicaciones Móviles, Públicas, Masivas y Críticas
Testing de Aplicaciones Móviles, Públicas, Masivas y Críticas
 
Microservicios con spring
Microservicios con springMicroservicios con spring
Microservicios con spring
 
Dev ops en arquitectura de sistemas
Dev ops en arquitectura de sistemasDev ops en arquitectura de sistemas
Dev ops en arquitectura de sistemas
 
Arquitectura basada a Eventos para principiantes con Apache Kafka
Arquitectura basada a Eventos para principiantes con Apache KafkaArquitectura basada a Eventos para principiantes con Apache Kafka
Arquitectura basada a Eventos para principiantes con Apache Kafka
 
Buenas prácticas que debes seguir en la administración de tu SQL Server
Buenas prácticas que debes seguir en la administración de tu SQL ServerBuenas prácticas que debes seguir en la administración de tu SQL Server
Buenas prácticas que debes seguir en la administración de tu SQL Server
 
Real World Agile Roadshow 2013 - Planificación y Arquitectura Ágil
Real World Agile Roadshow 2013 - Planificación y Arquitectura ÁgilReal World Agile Roadshow 2013 - Planificación y Arquitectura Ágil
Real World Agile Roadshow 2013 - Planificación y Arquitectura Ágil
 
Hardening murcia lan party 2013
Hardening   murcia lan party 2013Hardening   murcia lan party 2013
Hardening murcia lan party 2013
 
Query Store en SQL 2016
Query Store en SQL 2016Query Store en SQL 2016
Query Store en SQL 2016
 
Argentesting 2017 - The evolving role of QA
Argentesting 2017 - The evolving role of QAArgentesting 2017 - The evolving role of QA
Argentesting 2017 - The evolving role of QA
 
Herramientas usadas para definir el ambiente
Herramientas usadas para definir el ambienteHerramientas usadas para definir el ambiente
Herramientas usadas para definir el ambiente
 
Desafíos de la Ciberseguridad Industrial
Desafíos de la Ciberseguridad IndustrialDesafíos de la Ciberseguridad Industrial
Desafíos de la Ciberseguridad Industrial
 
Construyendo tu propio laboratorio de pentesting
Construyendo tu propio laboratorio de pentestingConstruyendo tu propio laboratorio de pentesting
Construyendo tu propio laboratorio de pentesting
 
20130329 Patrones de Aplicaciones para La nube #GWAB
20130329 Patrones de Aplicaciones para La nube #GWAB20130329 Patrones de Aplicaciones para La nube #GWAB
20130329 Patrones de Aplicaciones para La nube #GWAB
 
GWAB - Patrones para aplicaciones en la Nube
GWAB - Patrones para aplicaciones en la NubeGWAB - Patrones para aplicaciones en la Nube
GWAB - Patrones para aplicaciones en la Nube
 
ALM y Office 365
ALM y Office 365 ALM y Office 365
ALM y Office 365
 
03 troubleshooting essentials dmv - sql pass peru
03 troubleshooting essentials   dmv - sql pass peru03 troubleshooting essentials   dmv - sql pass peru
03 troubleshooting essentials dmv - sql pass peru
 
10 Principales Controles Proactivos de OWASP
10 Principales Controles Proactivos de OWASP 10 Principales Controles Proactivos de OWASP
10 Principales Controles Proactivos de OWASP
 
Microservicios
MicroserviciosMicroservicios
Microservicios
 
Agileload - pruebas de carga
Agileload - pruebas de cargaAgileload - pruebas de carga
Agileload - pruebas de carga
 
Creando sistemas enterprise con Software Libre
Creando sistemas enterprise con Software LibreCreando sistemas enterprise con Software Libre
Creando sistemas enterprise con Software Libre
 

More from Luis Ruiz Pavón

More from Luis Ruiz Pavón (10)

OAuth2 para desarrolladores
OAuth2 para desarrolladoresOAuth2 para desarrolladores
OAuth2 para desarrolladores
 
Patrones de diseño de software en la creación de microservicios
Patrones de diseño de software en la creación de microserviciosPatrones de diseño de software en la creación de microservicios
Patrones de diseño de software en la creación de microservicios
 
Servicios comunes en .NET Core
Servicios comunes en .NET CoreServicios comunes en .NET Core
Servicios comunes en .NET Core
 
.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0
 
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
 
ASP.NET 5 en Linux y Mac OS X: herramientas e integración
ASP.NET 5 en Linux y Mac OS X: herramientas e integraciónASP.NET 5 en Linux y Mac OS X: herramientas e integración
ASP.NET 5 en Linux y Mac OS X: herramientas e integración
 
#Dean document db + express + angularjs + nodejs running on azure
#Dean document db + express + angularjs + nodejs running on azure#Dean document db + express + angularjs + nodejs running on azure
#Dean document db + express + angularjs + nodejs running on azure
 
Como hago yo asp.net mvc dot netspainconference 2015
Como hago yo asp.net mvc   dot netspainconference 2015Como hago yo asp.net mvc   dot netspainconference 2015
Como hago yo asp.net mvc dot netspainconference 2015
 
JavaScript para desarrolladores c#
JavaScript para desarrolladores c#JavaScript para desarrolladores c#
JavaScript para desarrolladores c#
 
La calidad de código importa
La calidad de código importaLa calidad de código importa
La calidad de código importa
 

Recently uploaded

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Recently uploaded (11)

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 

Foro arquitectos de Microsoft 2015 - CQRS/ES Cambiando tu forma de pensar

  • 1. Foro de arquitectos 2015 CQRS/ES - Cambiando tu forma de pensar
  • 4. Sobre todo esta es una charla seria sobre escalabilidad, eh???
  • 5. Bertrand Meyer (via Wikipedia) “Command Query Separation” “every method should either be a command that performs an action, or a query that returns data to the caller, but not both. In other words, asking a question should not change the answer.” ¿CQS? ¿Pero esto no iba de CQRS?
  • 6. ■ “Command Query Responsibility Segregation” ■ Es un patrón que se basa en el principio CQS. ■ No es una arquitectura, es un patrón. ¿Qué es CQRS?
  • 7. CQRS como táctica de guerra
  • 8. ■ Aislamiento ■ Agilidad ■ Pruebas ■ Mantenimiento ■ Escalabilidad ■ Disponibilidad ■ ... Beneficios de usar CQRS
  • 9. CQRS por un niño de 10 años
  • 11. ■ El 90% del acceso a nuestras aplicaciones son consultas ■ Muy rápidas ■ Cachealas! ■ Consitencia eventual Consultas
  • 12. ■ Aplicable a todo el sistema o solo a una parte (Base de datos) ■ Es lo opuesto a la consistencia de datos ■ Es una característica natural de los sistemas distribuidos y escalables Consistencia eventual
  • 14. ■ Son directivas del dominio para ejecutar una acción ■ Pueden ser rechazados por el dominio (Validaciones/Negocio) ■ Puede dar resultado a 0:n eventos ■ Siempre en imperativo ■PlaceOrder, no OrderPlaced ■ Un manejador por commando ■ Pueden ser encolados Comandos
  • 15. Perdiendo el miedo a los comandos public class PlaceOrderCommand { //properties public readonly Guid OrderId; public readonly string Comment; //ctor public PlaceOrderCommand(Guid id, string comment) { OrderId = id; Comment = comment; } }
  • 16. ■ Son el resultado de una acción que ha ocurrido en el dominio ■ Nunca pueden ser rechazados ■ Siempre en pasado ■ OrderPlaced, no PlaceOrder Eventos
  • 17. ■Captura todos los cambios de estado que se produce en nuestra aplicación como una secuencia de eventos en el orden en que suceden. ■No modelo entidad/relación o modelo de objectos. ■Tenemos todo el historial de operaciones realizadas frente a lo que se conoce como “last-known good state”. ■No es una arquitectura independiente. ■Casa perfectamente con DDD y CQRS. ¿Qué es Event Sourcing?
  • 18. ID Modified … State 1 26/01/2015 … Pending ¿Cómo funciona? Sistema tradicional Event Sourcing ID Modified … State 1 28/01/2015 … Cancelled 1 27/01/2015 … Approved 1 26/01/2015 … Pending ID Modified … State 1 27/01/2015 … Approved ID Modified … State 1 28/01/2015 … Cancelled
  • 20. ■Es una base de datos para almacenar eventos: ■GetEventStore – http://geteventstore.com ■NEventStore – http://neventstore.org ■Base de datos relacional (JSON) ■Base de datos documental Event Store
  • 21. ■Volviendo a ejecutar los eventos (Replay Events) Pero… ¿Qué ocurre si tenemos que volver a ejecutar eventos para saber cual es el estado de nuestra cuenta bancaria? ¿Qué pasa si la abrimos hace 10 años? Podemos encontrarnos con problemas de rendimiento al tener que ejecutar miles de eventos… ¿Cómo podemos solucionar esto? ¿Cómo reconstruimos el estado de la aplicación?
  • 22. ■Para evitar tener que ejecutar miles de eventos para reconstruir el estado de nuestra aplicación se usan Data Snapshots. ■Cada x eventos guardamos el estado actual de nuestra aplicación. (Caché)y podemos hacer un replay de eventos desde es momento. Data Snapshots

Editor's Notes

  1. Es el principio en el que se basa el patrón CQRS
  2. Es el principio en el que se basa el patrón CQRS
  3. O lo que es lo mismo, usar un modelo para actualizar la información y otro para leerla. No podemos usar CQRS en toda la aplicación entera.
  4. Lo importante de la imagen es ver que CQRS es más fácil de lo que nos pensamos
  5. Lo importante de la imagen es ver que CQRS es más fácil de lo que nos pensamos