foro arquitectos de microsoft 2015 - cqrs/es cambiando tu forma de pensar
Post on 18-Jul-2015
503 Views
Preview:
TRANSCRIPT
Foro de arquitectos 2015CQRS/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 nuestraaplicación como una secuencia de eventos en el orden en quesuceden.
■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 … ApprovedID 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!
top related