SlideShare una empresa de Scribd logo
1 de 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!

Más contenido relacionado

Similar a Foro arquitectos 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 a Foro arquitectos 2015 cqrs-es - cambiando tu forma de pensar (20)

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
 
IV Jornadas de Ciberseguridad en Andalucía: Cumplimiento como base de la cib...
 IV Jornadas de Ciberseguridad en Andalucía: Cumplimiento como base de la cib... IV Jornadas de Ciberseguridad en Andalucía: Cumplimiento como base de la cib...
IV Jornadas de Ciberseguridad en Andalucía: Cumplimiento como base de la cib...
 
NORMAS Y ESTÁNDARES DE AUDITORIA DATA CENTER
NORMAS Y ESTÁNDARES DE AUDITORIA DATA CENTERNORMAS Y ESTÁNDARES DE AUDITORIA DATA CENTER
NORMAS Y ESTÁNDARES DE AUDITORIA DATA CENTER
 

Último

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Último (11)

investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.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
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
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
 
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
 
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
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
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.
 
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...
 

Foro arquitectos 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

Notas del editor

  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