SlideShare una empresa de Scribd logo
1 de 19
Diseño de arquitecturas
escalables con CQRS
Escalando que es gerundio!!!
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.
¿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 imperative
■ 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
■ Recursos para ejecutar nuestro código
 Web Roles (IIS) y Worker Roles (w/o IIS, OWIN + Katana)
■ Colas
 Windows Azure Storage Queues
 Windows Azure Service Bus Queues
■ Almacenamiento persistente
 SQL Azure
 Hadoop
■ Notificaciones en tiempo real
 SignalR con Redis backplane
■ Vistas rápidas
 Azure Cache
 NoSQL (MongoDb)
 Redis
CQRS en Microsoft Azure
Probablemente no 
¿Debería usar CQRS?
¿Preguntas?
@gwab_es - #GWAB #Spain
http://spain.windowsazurebootcamp.org/

Más contenido relacionado

Similar a Gwab diseño de arquitecturas escalables con cqrs

Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
Luis Bosque
 
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
 
Construcción de Aplicaciones de Avanzada con Geo-Distribución
Construcción de Aplicaciones de Avanzada con Geo-DistribuciónConstrucción de Aplicaciones de Avanzada con Geo-Distribución
Construcción de Aplicaciones de Avanzada con Geo-Distribución
Loja Valle de Tecnología
 

Similar a Gwab diseño de arquitecturas escalables con cqrs (20)

Cloud Hardcore Debugging
Cloud Hardcore DebuggingCloud Hardcore Debugging
Cloud Hardcore Debugging
 
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
 
Cosas que “probablemente” no sabes pero deberías de saber en Oracle 12c
Cosas que “probablemente” no sabes pero deberías de saber en Oracle 12cCosas que “probablemente” no sabes pero deberías de saber en Oracle 12c
Cosas que “probablemente” no sabes pero deberías de saber en Oracle 12c
 
Virtualizacion, seguridad (utm) y alta disponibilidad kamal majaiti
Virtualizacion, seguridad (utm) y alta disponibilidad kamal majaitiVirtualizacion, seguridad (utm) y alta disponibilidad kamal majaiti
Virtualizacion, seguridad (utm) y alta disponibilidad kamal majaiti
 
Aplicando SQL Server 2016 en Microsoft Azure Virtual Machine
Aplicando SQL Server 2016 en Microsoft Azure Virtual MachineAplicando SQL Server 2016 en Microsoft Azure Virtual Machine
Aplicando SQL Server 2016 en Microsoft Azure Virtual Machine
 
"Al rico" PHP
"Al rico" PHP"Al rico" PHP
"Al rico" PHP
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
 
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
 
Arquitecturas RISC - CISC
Arquitecturas RISC - CISCArquitecturas RISC - CISC
Arquitecturas RISC - CISC
 
Consejos de los expertos para actualizar el Stack ELK
Consejos de los expertos para actualizar el Stack ELKConsejos de los expertos para actualizar el Stack ELK
Consejos de los expertos para actualizar el Stack ELK
 
Ecs codemotion
Ecs codemotionEcs codemotion
Ecs codemotion
 
Chaos engineering
Chaos engineeringChaos engineering
Chaos engineering
 
Diagnóstico y resolución problemas mirroring AlwaysOn
Diagnóstico y resolución problemas mirroring AlwaysOnDiagnóstico y resolución problemas mirroring AlwaysOn
Diagnóstico y resolución problemas mirroring AlwaysOn
 
Windows Azure SQL Databases
Windows Azure SQL DatabasesWindows Azure SQL Databases
Windows Azure SQL Databases
 
Construyendo tu propio laboratorio de pentesting
Construyendo tu propio laboratorio de pentestingConstruyendo tu propio laboratorio de pentesting
Construyendo tu propio laboratorio de pentesting
 
Tema 1: Procesadores segmentados.Tema 1: Procesadores segmentados.
Tema 1: Procesadores segmentados.Tema 1: Procesadores segmentados.Tema 1: Procesadores segmentados.Tema 1: Procesadores segmentados.
Tema 1: Procesadores segmentados.Tema 1: Procesadores segmentados.
 
Santiago de Chile - Seguridad Continua en Cloud Computing
Santiago de Chile - Seguridad Continua en Cloud ComputingSantiago de Chile - Seguridad Continua en Cloud Computing
Santiago de Chile - Seguridad Continua en Cloud Computing
 
Migrando de MSSQL a PostgreSQL
Migrando de MSSQL a PostgreSQLMigrando de MSSQL a PostgreSQL
Migrando de MSSQL a PostgreSQL
 
EC2: Cómputo en la nube a profundidad
EC2: Cómputo en la nube a profundidadEC2: Cómputo en la nube a profundidad
EC2: Cómputo en la nube a profundidad
 
Construcción de Aplicaciones de Avanzada con Geo-Distribución
Construcción de Aplicaciones de Avanzada con Geo-DistribuciónConstrucción de Aplicaciones de Avanzada con Geo-Distribución
Construcción de Aplicaciones de Avanzada con Geo-Distribución
 

Más de Luis Ruiz Pavón

Más de 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
 

Gwab diseño de arquitecturas escalables con cqrs

  • 2.
  • 3. Escalando que es gerundio!!!
  • 4. 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?
  • 5. ■ “Command Query Responsibility Segregation” ■ Es un patrón que se basa en el principio CQS. ■ No es una arquitectura. ¿Qué es CQRS?
  • 6. CQRS como táctica de guerra
  • 7. ■ Aislamiento ■ Agilidad ■ Pruebas ■ Mantenimiento ■ Escalabilidad ■ Disponibilidad ■ ... Beneficios de usar CQRS
  • 8. CQRS por un niño de 10 años
  • 10. ■ El 90% del acceso a nuestras aplicaciones son consultas ■ Muy rápidas ■ Cachealas! ■ Consitencia eventual Consultas
  • 11. ■ 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
  • 13. ■ 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 imperative ■ PlaceOrder, no OrderPlaced ■ Un manejador por commando ■ Pueden ser encolados Comandos
  • 14. 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; } }
  • 15. ■ Son el resultado de una acción que ha ocurrido en el dominio ■ Nunca pueden ser rechazados ■ Siempre en pasado ■ OrderPlaced, no PlaceOrder Eventos
  • 16. ■ Recursos para ejecutar nuestro código  Web Roles (IIS) y Worker Roles (w/o IIS, OWIN + Katana) ■ Colas  Windows Azure Storage Queues  Windows Azure Service Bus Queues ■ Almacenamiento persistente  SQL Azure  Hadoop ■ Notificaciones en tiempo real  SignalR con Redis backplane ■ Vistas rápidas  Azure Cache  NoSQL (MongoDb)  Redis CQRS en Microsoft Azure
  • 19. @gwab_es - #GWAB #Spain http://spain.windowsazurebootcamp.org/

Notas del editor

  1. 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.
  2. Lo importante de la imagen es ver que CQRS es más fácil de lo que nos pensamos
  3. Lo importante de la imagen es ver que CQRS es más fácil de lo que nos pensamos