SlideShare una empresa de Scribd logo
1 de 27
uy.vopen.tech
El misterioso CQRS
Command Query Responsibility Segregation
Fernando Sonego
Solution Architect
Muchachos tuve una
idea extraordinaria
que revolucionara al
mundo ¡¡¡Dividamos los
modelos de consulta
de los demás!!!
¿Eso no es
CQRS?
Si, lo presento
Greg Young el
año pasado
¿Qué es CQRS?
• Es un patrón bastante simple de entender
• La Idea es en lugar de tener un modelo unificado, necesitamos tener 2,
uno para lectura y otro para escritura.
• CQRS fue presentado Greg Young en el año 2010, el se baso en la idea
Single Responsibility Principle correspondiente a SOLID.
• Las principales características dicen que cada método debe ser un
comando o un query que solo haga una acción, pero no ambas cosas.
• El patrón ayuda a la legibilidad del código, con un golpe de vista
podemos ver su propósito por su firma.
• CQRS extiende el principio de CQS a nivel arquitectura.
¿Y porque usar CQRS?
Escalabilidad Rendimiento Simplicidad
Escalabilidad
Crear Leer Actualizar Eliminar
Crear
Leer
Actualizar Eliminar
Escalabilidad | Rendimiento | Simplicidad
Crear
Actualizar
Eliminar
Leer
Comandos
1 Servidor
Consultas
10 Servidores
Consultas SQL
altamente optimizadas
Cache
Solo cambian datos
Reducción de código
complejo
En resumen
• CQRS nace a partir de CQS.
• CQRS extiende CQS a nivel arquitectocnico.
• Separa un modelo unificado en 2 partes: una de lectura y otra de escritura.
• CQRS nos permite tomar diferentes decisiones para las lecturas y
las escrituras.
• Mejor escalabilidad.
• Mejor Performance.
• Código Simple.
• CQRS es SRP (Single Responsability Principle) aplicado a nivel de
arquitectura.
Command Query Responsibility
Segregation
Clientes
Modelo de
dominio
Consultas de
Lectura
API
Escritura
API
Lectura
DB
Relacional
DB No
Relacional
Sync
Comando Comandos
consulta Consultas
Go to the Action
Hablemos un poco mensajes
• En CQRS en realidad vamos a tener 3 tipos de mensajes
• Comandos, le dice a la aplicación que tiene que hacer algo.
• Consultas, le pregunta a la aplicación por algo.
• Eventos, información para externos.
Clientes
Aplicación
Comando
consulta
Eventos
Externos
Clean Code
• Convenciones de nombres
Comandos EventosConsultas
En imperativo
EditContactInfo
Empezar con Get
GetList
Pasado
ContactInfoChanged
NO! EditContactInfoComand GetListQuery ContactInfoChangedEvent
Problemas en la arquitectura de dominio
Clientes
Modelo de
dominio
Servicios
App
Servicios
App
API
API
• Modelo de dominio complicado
• Transporte pesado de datos
innecesarios
• Mala rendimiento para las
consultas
¿Entonces voy a tener 2 modelos de
dominio?
Clientes
Comandos
Consultas
DDD aquí
DDD no aquí
• Donde no hay modificación de datos
• No necesitamos encapsulación.
• No necesitamos abstracciones.
¿Qué otra cosa no debo hacer?
Clientes
Comandos
Consultas
No usar ORMs
No usar ORMs en lecturas
• ¡Pero tengo el lazy load activado!
• Cuando esta activosy necesitamos acceder a la base de datos se vuelve a
consultar ( bye bye perfomance).
• ¡Bueno lo desactivo!
• Tampoco no hace falta esta medida extrema.
• Conclusión
• Solo usar un grande y pesado ORM con comandos.
• Escribir a mano las consultas SQL.
Aumentemos el rendimiento y la
escalabilidad
Clientes
Comandos
Consultas
Master
Replica 1
Replica 1
Replica
Mismo problema, separamos las lecturas, pero
seguimos con los mismos modelos.
Pensemos un minuto
¿Que forma tienen la mayoría del tiempo los
datos de consulta?
DESNORMALIZADOS
¡Desnormalizada! ¿Y que hago entonces?
• Podemos crear tablas especializadas de consultas que se actualizen
por un trigger en la base de datos.
• Podemos, en el caso de SQL, usar vistas especializadas para las
consultas.
• Podemos crearuna base de datos especializada total mente para
consultas para consultas.
• Podemos usar indexadorores o bases de datos NoSQL.
Resumen sobre las bases de datos
• Bases de datos separadas para consultas
• Podemos implementar completo el patron
CQRS.
• Las lecturas y escrituras están separadas
en cada nivel: API, servicios de
aplicaciones, modelo de dominio, base de
datos.
• Ajustar las lecturas de base de datos al a
necesidad real del modelo de consulta.
• Escalabilidad se da agregando recursos
de servidor
• Ejemplos de separación en el nivel de
base de datos:
• Vistas indexadas
• Replica de base de datos
• Algunas herramientas como elastic search.
• Diseñar la base de datos para lecturas
• Desnormalizar y ajustado a las
necesidades del modelo real.
• Reducir el numero de Joins y muchísimo
pos-procesamiento.
• La tercera forma normal es para
comandos, la primera mejor para
consultar.
• Podría necesitar una base de datos de
lectura separada para cada cliente.
• Mantener la sincronización es costoso;
eventual inconsistencia es confusa:
• en muchos casos, una sola base de datos
es suficiente
Go to the Action
Info
• https://github.com/fsonego/vOpenUyCQRS
• dotnet restore
• dotnet build
• dotnet run
Tarea para hogar
• Commandos Vs DTOs.
• Sincronización de comandos y consultas:
• Proyecciones impulsadas por estados.
• Proyecciones manejadas por manejadores de
eventos.
• Consistencia.
• Consistencia Eventual.
• Versionado.
• Expedición de cache
• CQRS vs Patrón Especificación
• Handlers Vs Decoradores Vs Middleware
Conclusiones y Preguntas
SPONSORS
¡Gracias!
fernando.sonego@gmail.com
@FernandoSonego
www.withoutdebugger.com
Fernando Sonego
Solution Architect

Más contenido relacionado

Similar a vOpenvOpenUy: El misterioso CQRS

¿Grails + DDD + Eventsourcing + CQRS?
¿Grails + DDD + Eventsourcing + CQRS?¿Grails + DDD + Eventsourcing + CQRS?
¿Grails + DDD + Eventsourcing + CQRS?Jorge Franco Leza
 
Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2Ricard Clau
 
Escalando con SQL Server hasta la nube, un trayecto necesario - Adrian Miranda
Escalando con SQL Server hasta la nube, un trayecto necesario - Adrian MirandaEscalando con SQL Server hasta la nube, un trayecto necesario - Adrian Miranda
Escalando con SQL Server hasta la nube, un trayecto necesario - Adrian MirandaSpanishPASSVC
 
Bajandose de la nube y volviendose a subir
Bajandose de la nube y volviendose a subirBajandose de la nube y volviendose a subir
Bajandose de la nube y volviendose a subirPedro Colmenares
 
Optimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-MemoryOptimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-MemoryGonzalo Chacaltana
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup
 
Escalando para sus primeros 10 millones de usuarios
Escalando para sus primeros 10 millones de usuariosEscalando para sus primeros 10 millones de usuarios
Escalando para sus primeros 10 millones de usuariosAmazon Web Services LATAM
 
Introducción mongodb y desarrollo
Introducción mongodb y desarrolloIntroducción mongodb y desarrollo
Introducción mongodb y desarrolloJuan Ladetto
 
Fundamentos para el diseño de una RESTful API pragmática
Fundamentos para el diseño de una RESTful API pragmáticaFundamentos para el diseño de una RESTful API pragmática
Fundamentos para el diseño de una RESTful API pragmáticaLeoWong91
 
LenguajeJavaSpringBootDesarrolloweb.pptx
LenguajeJavaSpringBootDesarrolloweb.pptxLenguajeJavaSpringBootDesarrolloweb.pptx
LenguajeJavaSpringBootDesarrolloweb.pptxcarrilloja98
 
Java script para desarrolladores SharePoint
Java script para desarrolladores SharePointJava script para desarrolladores SharePoint
Java script para desarrolladores SharePointAdrian Diaz Cervera
 
[SPANISH ]Codealike en MUG Argentina
[SPANISH ]Codealike en MUG Argentina[SPANISH ]Codealike en MUG Argentina
[SPANISH ]Codealike en MUG ArgentinaCodealike
 
Analisis de requerimientos, Ingenieria de Software
Analisis de requerimientos, Ingenieria de SoftwareAnalisis de requerimientos, Ingenieria de Software
Analisis de requerimientos, Ingenieria de SoftwareMarvin Romero
 

Similar a vOpenvOpenUy: El misterioso CQRS (20)

Servicios de Bases de Datos de AWS
Servicios de Bases de Datos de AWSServicios de Bases de Datos de AWS
Servicios de Bases de Datos de AWS
 
¿Grails + DDD + Eventsourcing + CQRS?
¿Grails + DDD + Eventsourcing + CQRS?¿Grails + DDD + Eventsourcing + CQRS?
¿Grails + DDD + Eventsourcing + CQRS?
 
Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2
 
Escalando con SQL Server hasta la nube, un trayecto necesario - Adrian Miranda
Escalando con SQL Server hasta la nube, un trayecto necesario - Adrian MirandaEscalando con SQL Server hasta la nube, un trayecto necesario - Adrian Miranda
Escalando con SQL Server hasta la nube, un trayecto necesario - Adrian Miranda
 
Bajandose de la nube y volviendose a subir
Bajandose de la nube y volviendose a subirBajandose de la nube y volviendose a subir
Bajandose de la nube y volviendose a subir
 
Optimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-MemoryOptimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-Memory
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
 
Escalando para sus primeros 10 millones de usuarios
Escalando para sus primeros 10 millones de usuariosEscalando para sus primeros 10 millones de usuarios
Escalando para sus primeros 10 millones de usuarios
 
Presentacion cw2012
Presentacion cw2012Presentacion cw2012
Presentacion cw2012
 
Introducción mongodb y desarrollo
Introducción mongodb y desarrolloIntroducción mongodb y desarrollo
Introducción mongodb y desarrollo
 
Fundamentos para el diseño de una RESTful API pragmática
Fundamentos para el diseño de una RESTful API pragmáticaFundamentos para el diseño de una RESTful API pragmática
Fundamentos para el diseño de una RESTful API pragmática
 
LenguajeJavaSpringBootDesarrolloweb.pptx
LenguajeJavaSpringBootDesarrolloweb.pptxLenguajeJavaSpringBootDesarrolloweb.pptx
LenguajeJavaSpringBootDesarrolloweb.pptx
 
Java script para desarrolladores SharePoint
Java script para desarrolladores SharePointJava script para desarrolladores SharePoint
Java script para desarrolladores SharePoint
 
Azure infrastructure testing con inspec
Azure infrastructure testing con inspecAzure infrastructure testing con inspec
Azure infrastructure testing con inspec
 
[SPANISH ]Codealike en MUG Argentina
[SPANISH ]Codealike en MUG Argentina[SPANISH ]Codealike en MUG Argentina
[SPANISH ]Codealike en MUG Argentina
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Sistema de Bases de Datos AWS
Sistema de Bases de Datos AWSSistema de Bases de Datos AWS
Sistema de Bases de Datos AWS
 
Clase 11
Clase 11Clase 11
Clase 11
 
Panel Magmaconf
Panel MagmaconfPanel Magmaconf
Panel Magmaconf
 
Analisis de requerimientos, Ingenieria de Software
Analisis de requerimientos, Ingenieria de SoftwareAnalisis de requerimientos, Ingenieria de Software
Analisis de requerimientos, Ingenieria de Software
 

Más de fernando sonego

Algeiba meetup Net Baires Bot Empresariales
Algeiba meetup Net Baires Bot EmpresarialesAlgeiba meetup Net Baires Bot Empresariales
Algeiba meetup Net Baires Bot Empresarialesfernando sonego
 
Novedades .Net Core - NetBaires
Novedades .Net Core - NetBairesNovedades .Net Core - NetBaires
Novedades .Net Core - NetBairesfernando sonego
 
Jornada de Arquitectura .NET - 3º Edición
Jornada de Arquitectura .NET - 3º EdiciónJornada de Arquitectura .NET - 3º Edición
Jornada de Arquitectura .NET - 3º Ediciónfernando sonego
 
vOpenUy: Construye tu aplicación Multi-Tenant
vOpenUy: Construye tu aplicación Multi-TenantvOpenUy: Construye tu aplicación Multi-Tenant
vOpenUy: Construye tu aplicación Multi-Tenantfernando sonego
 
2019.10.04.v open.azurevsaws
2019.10.04.v open.azurevsaws2019.10.04.v open.azurevsaws
2019.10.04.v open.azurevsawsfernando sonego
 
Xamarin y azure b2c Servicio de identidad para tus apps
Xamarin y azure b2c Servicio de identidad para tus appsXamarin y azure b2c Servicio de identidad para tus apps
Xamarin y azure b2c Servicio de identidad para tus appsfernando sonego
 
Azure bootcampo 2019 start up_v1
Azure bootcampo 2019 start up_v1Azure bootcampo 2019 start up_v1
Azure bootcampo 2019 start up_v1fernando sonego
 
Net-Baires: CleanCode 20190622
Net-Baires: CleanCode 20190622Net-Baires: CleanCode 20190622
Net-Baires: CleanCode 20190622fernando sonego
 
NetBaires 2018 - Azure Serach
NetBaires 2018 - Azure SerachNetBaires 2018 - Azure Serach
NetBaires 2018 - Azure Serachfernando sonego
 
NetConfUy 2018 - Azure B2C
NetConfUy 2018 - Azure B2CNetConfUy 2018 - Azure B2C
NetConfUy 2018 - Azure B2Cfernando sonego
 
NetConfCo 2018 Azure B2C
NetConfCo 2018  Azure B2CNetConfCo 2018  Azure B2C
NetConfCo 2018 Azure B2Cfernando sonego
 
.Net core multiplataforma. sera verdad???
.Net core multiplataforma. sera verdad???.Net core multiplataforma. sera verdad???
.Net core multiplataforma. sera verdad???fernando sonego
 
Net conf ar v2018 start up
Net conf ar v2018 start upNet conf ar v2018 start up
Net conf ar v2018 start upfernando sonego
 
DevDayAr de Junior a Sernior ¿Cual es el camino?
DevDayAr de Junior a Sernior ¿Cual es el camino?DevDayAr de Junior a Sernior ¿Cual es el camino?
DevDayAr de Junior a Sernior ¿Cual es el camino?fernando sonego
 
Net conf uy 2017 type script
Net conf uy 2017   type scriptNet conf uy 2017   type script
Net conf uy 2017 type scriptfernando sonego
 
Azure Microsft Cognite Service
Azure Microsft Cognite ServiceAzure Microsft Cognite Service
Azure Microsft Cognite Servicefernando sonego
 

Más de fernando sonego (18)

Algeiba meetup Net Baires Bot Empresariales
Algeiba meetup Net Baires Bot EmpresarialesAlgeiba meetup Net Baires Bot Empresariales
Algeiba meetup Net Baires Bot Empresariales
 
AI+ Tour 2019 Argentina
AI+ Tour 2019 ArgentinaAI+ Tour 2019 Argentina
AI+ Tour 2019 Argentina
 
Novedades .Net Core - NetBaires
Novedades .Net Core - NetBairesNovedades .Net Core - NetBaires
Novedades .Net Core - NetBaires
 
Jornada de Arquitectura .NET - 3º Edición
Jornada de Arquitectura .NET - 3º EdiciónJornada de Arquitectura .NET - 3º Edición
Jornada de Arquitectura .NET - 3º Edición
 
vOpenUy: Construye tu aplicación Multi-Tenant
vOpenUy: Construye tu aplicación Multi-TenantvOpenUy: Construye tu aplicación Multi-Tenant
vOpenUy: Construye tu aplicación Multi-Tenant
 
2019.10.04.v open.azurevsaws
2019.10.04.v open.azurevsaws2019.10.04.v open.azurevsaws
2019.10.04.v open.azurevsaws
 
Xamarin y azure b2c Servicio de identidad para tus apps
Xamarin y azure b2c Servicio de identidad para tus appsXamarin y azure b2c Servicio de identidad para tus apps
Xamarin y azure b2c Servicio de identidad para tus apps
 
Azure bootcampo 2019 start up_v1
Azure bootcampo 2019 start up_v1Azure bootcampo 2019 start up_v1
Azure bootcampo 2019 start up_v1
 
Net-Baires: CleanCode 20190622
Net-Baires: CleanCode 20190622Net-Baires: CleanCode 20190622
Net-Baires: CleanCode 20190622
 
NetBaires 2018 - Azure Serach
NetBaires 2018 - Azure SerachNetBaires 2018 - Azure Serach
NetBaires 2018 - Azure Serach
 
NetConfUy 2018 - Azure B2C
NetConfUy 2018 - Azure B2CNetConfUy 2018 - Azure B2C
NetConfUy 2018 - Azure B2C
 
NetConfCo 2018 Azure B2C
NetConfCo 2018  Azure B2CNetConfCo 2018  Azure B2C
NetConfCo 2018 Azure B2C
 
.Net core multiplataforma. sera verdad???
.Net core multiplataforma. sera verdad???.Net core multiplataforma. sera verdad???
.Net core multiplataforma. sera verdad???
 
Net conf ar v2018 start up
Net conf ar v2018 start upNet conf ar v2018 start up
Net conf ar v2018 start up
 
DevDayAr de Junior a Sernior ¿Cual es el camino?
DevDayAr de Junior a Sernior ¿Cual es el camino?DevDayAr de Junior a Sernior ¿Cual es el camino?
DevDayAr de Junior a Sernior ¿Cual es el camino?
 
Net conf uy 2017 type script
Net conf uy 2017   type scriptNet conf uy 2017   type script
Net conf uy 2017 type script
 
DevOps - TechNights
DevOps - TechNightsDevOps - TechNights
DevOps - TechNights
 
Azure Microsft Cognite Service
Azure Microsft Cognite ServiceAzure Microsft Cognite Service
Azure Microsft Cognite Service
 

Último

Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 

Último (20)

Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 

vOpenvOpenUy: El misterioso CQRS

  • 2. El misterioso CQRS Command Query Responsibility Segregation Fernando Sonego Solution Architect
  • 3.
  • 4. Muchachos tuve una idea extraordinaria que revolucionara al mundo ¡¡¡Dividamos los modelos de consulta de los demás!!! ¿Eso no es CQRS? Si, lo presento Greg Young el año pasado
  • 5. ¿Qué es CQRS? • Es un patrón bastante simple de entender • La Idea es en lugar de tener un modelo unificado, necesitamos tener 2, uno para lectura y otro para escritura. • CQRS fue presentado Greg Young en el año 2010, el se baso en la idea Single Responsibility Principle correspondiente a SOLID. • Las principales características dicen que cada método debe ser un comando o un query que solo haga una acción, pero no ambas cosas. • El patrón ayuda a la legibilidad del código, con un golpe de vista podemos ver su propósito por su firma. • CQRS extiende el principio de CQS a nivel arquitectura.
  • 6. ¿Y porque usar CQRS? Escalabilidad Rendimiento Simplicidad
  • 7. Escalabilidad Crear Leer Actualizar Eliminar Crear Leer Actualizar Eliminar
  • 8. Escalabilidad | Rendimiento | Simplicidad Crear Actualizar Eliminar Leer Comandos 1 Servidor Consultas 10 Servidores Consultas SQL altamente optimizadas Cache Solo cambian datos Reducción de código complejo
  • 9. En resumen • CQRS nace a partir de CQS. • CQRS extiende CQS a nivel arquitectocnico. • Separa un modelo unificado en 2 partes: una de lectura y otra de escritura. • CQRS nos permite tomar diferentes decisiones para las lecturas y las escrituras. • Mejor escalabilidad. • Mejor Performance. • Código Simple. • CQRS es SRP (Single Responsability Principle) aplicado a nivel de arquitectura.
  • 10. Command Query Responsibility Segregation Clientes Modelo de dominio Consultas de Lectura API Escritura API Lectura DB Relacional DB No Relacional Sync Comando Comandos consulta Consultas
  • 11. Go to the Action
  • 12. Hablemos un poco mensajes • En CQRS en realidad vamos a tener 3 tipos de mensajes • Comandos, le dice a la aplicación que tiene que hacer algo. • Consultas, le pregunta a la aplicación por algo. • Eventos, información para externos. Clientes Aplicación Comando consulta Eventos Externos
  • 13. Clean Code • Convenciones de nombres Comandos EventosConsultas En imperativo EditContactInfo Empezar con Get GetList Pasado ContactInfoChanged NO! EditContactInfoComand GetListQuery ContactInfoChangedEvent
  • 14. Problemas en la arquitectura de dominio Clientes Modelo de dominio Servicios App Servicios App API API • Modelo de dominio complicado • Transporte pesado de datos innecesarios • Mala rendimiento para las consultas
  • 15. ¿Entonces voy a tener 2 modelos de dominio? Clientes Comandos Consultas DDD aquí DDD no aquí • Donde no hay modificación de datos • No necesitamos encapsulación. • No necesitamos abstracciones.
  • 16. ¿Qué otra cosa no debo hacer? Clientes Comandos Consultas No usar ORMs
  • 17. No usar ORMs en lecturas • ¡Pero tengo el lazy load activado! • Cuando esta activosy necesitamos acceder a la base de datos se vuelve a consultar ( bye bye perfomance). • ¡Bueno lo desactivo! • Tampoco no hace falta esta medida extrema. • Conclusión • Solo usar un grande y pesado ORM con comandos. • Escribir a mano las consultas SQL.
  • 18. Aumentemos el rendimiento y la escalabilidad Clientes Comandos Consultas Master Replica 1 Replica 1 Replica Mismo problema, separamos las lecturas, pero seguimos con los mismos modelos.
  • 19. Pensemos un minuto ¿Que forma tienen la mayoría del tiempo los datos de consulta? DESNORMALIZADOS
  • 20. ¡Desnormalizada! ¿Y que hago entonces? • Podemos crear tablas especializadas de consultas que se actualizen por un trigger en la base de datos. • Podemos, en el caso de SQL, usar vistas especializadas para las consultas. • Podemos crearuna base de datos especializada total mente para consultas para consultas. • Podemos usar indexadorores o bases de datos NoSQL.
  • 21. Resumen sobre las bases de datos • Bases de datos separadas para consultas • Podemos implementar completo el patron CQRS. • Las lecturas y escrituras están separadas en cada nivel: API, servicios de aplicaciones, modelo de dominio, base de datos. • Ajustar las lecturas de base de datos al a necesidad real del modelo de consulta. • Escalabilidad se da agregando recursos de servidor • Ejemplos de separación en el nivel de base de datos: • Vistas indexadas • Replica de base de datos • Algunas herramientas como elastic search. • Diseñar la base de datos para lecturas • Desnormalizar y ajustado a las necesidades del modelo real. • Reducir el numero de Joins y muchísimo pos-procesamiento. • La tercera forma normal es para comandos, la primera mejor para consultar. • Podría necesitar una base de datos de lectura separada para cada cliente. • Mantener la sincronización es costoso; eventual inconsistencia es confusa: • en muchos casos, una sola base de datos es suficiente
  • 22. Go to the Action
  • 23. Info • https://github.com/fsonego/vOpenUyCQRS • dotnet restore • dotnet build • dotnet run
  • 24. Tarea para hogar • Commandos Vs DTOs. • Sincronización de comandos y consultas: • Proyecciones impulsadas por estados. • Proyecciones manejadas por manejadores de eventos. • Consistencia. • Consistencia Eventual. • Versionado. • Expedición de cache • CQRS vs Patrón Especificación • Handlers Vs Decoradores Vs Middleware

Notas del editor

  1. La foto se puede omitir, Si se quiere sumar pueden ir a “Replace Image” y si usan una foto cuadrada - redes sociales - no van a tener problema
  2. La foto se puede omitir, Si se quiere sumar pueden ir a “Replace Image” y si usan una foto cuadrada - redes sociales - no van a tener problema
  3. La foto se puede omitir, Si se quiere sumar pueden ir a “Replace Image” y si usan una foto cuadrada - redes sociales - no van a tener problema