Implementando el Patrón CQRS con Debezium, Postgresql, Redis, Kafka...
HTML-код
- Опубликовано: 16 окт 2024
- Todo sobre el patrón CQRS(Command Query Responsability Segregation) mejora del rendimiento, formas de implementarlo, pros/contras y lo implementamos con Debezium, Postgresql, Redis y SpringBoot con Java.
Por fin es Viernes! Y aquí tenéis el post sobre el vídeo dedicado a arquitecturas #CQRS con #Debezium www.albertcoronado.com/2022/10/21/implementando-el-patron-cqrs-con-debezium/ y el código ya está publicado en Github github.com/acoronadoc/java-springboot-cqrs-architecture-sample
vos sos un grosso, saludos desde chile
Excelente!!
¡¡¡ IMPRESIONANTE !!! Saludos desde el sur de Chile.
Estos videos son muy avanzados. Es de lo que no hay. Muchas gracias por tu tiempo
Conocía el patrón pero los ejemplos prácticos vistos a vista de pájaro son muy limitados en la red, me ha ayudado a marcar hoja de ruta en algunos flecos en mi conocimiento, muchas gracias por todo el contenido que haces.
Uno de los contras a tomar en cuenta es que se duplica x2 (aprox) el espacio en disco de la BD. Excelente video
Debes tener en cuenta que el valor agregado de una característica normalmente se requiere pagar con otra. No es una bala de plata. Estás dispuesto a sacrificar espacio por velocidad (y disponibilidad) a consultas? Eso sólo lo da el caso de uso que quieras implementar. Recuerdo una caída de github donde no podías hacer push pero podías consultar y descargar los repos. Un excelente ejemplo donde aplica ésta técnica.
Excelente contenido, muchas gracias digital!
Buen video lo de devezium no lo conocía se ve una solución bastante limpia en entornos de alta demanda
Está genial. Solo para complementar. Para iniciar, no necesariamente tienes que tener dos bases de datos, también puede ser implementado basado en drivers,libs, etc. Ejemplo en c# : tienes los comandos con entity framework y las queries con dapper(optimizado para lectura)
Me encanta el logo y nuevo nombre, gracias por todos tu videos, valen oro €€
Excelente explicacion profesor, sin duda el mejor contenido en español
Increíble Albert, magistral el vídeo ❤
Creo que tendre que ver el video de nuevo ( esta vez solo el video ). Esta muy interesante el nivel de mejora en rendimiento es buenisimo. Gracias !!!
Muy buen ejemplo y explicación como siempre. Muchas gracias por estos videos. Esperando los siguientes...
Excelente ejemplo, gracias
que buena explicacion , gracias por compartir
Excelente video👏🌞
Genial me quedó claro el patrón
Esta buenísimo 👌
Excelente video
Excelente contenido
Excelente¡ Gracias por compartir¡ :)
Gracias! Me ha gustado!
que bien vídeo!
Excelente como siempre líder pero creo que esta explicación aplicada a implementar correctamente el Patrón CQRS en Wordpress sería de mucha ayuda para las personas que quieran escalar de mejor manera una solución creada en ese CMS, sé que ese vídeo sería una popular en RUclips, se puede llamar algo así como: Aprende como hacer tu wordpress 50% más rápido y escalable con CQRS, eso haría popular el vídeo y le sería de mucha ayuda a personas como yo.
Eso es un proceso batch de toda la vida
Buen video.
Excelente explicacion
Que buen tutorial
👍
Genial
Thanks!
Mil gracias por el apoyo Samuel!
@@NullSafeArchitectAl contrario, un millon de gracias a ti por compartir tu conocimiento... un saludo.
HJola, muy interesante, entonces el debezium ya actua como si fuera un server donde realmente yo como developer lo que tengo que llegar a hacer la mayoria de las veces es simplemente configurar la conexion? , o hay ocasiones donde toque mover codigo?¡
Muy bueno, no conocia este patron. Existe mucha diferencia con balancear los postgres?
Una duda: ¿Como controlas los datos que si que están persistidos en la PostgreSQL y que por el motivo que sea ya no están en Redis? un ejemplo de esto sería que Redis al ser BBDD en RAM si se reinicia se pierde toda la información y tal como está implementada esa arquitectura, solo se actualiza Redis si se cambian registros en PostgreSQL, en ese momento ambas bases de datos ya no están sincronizadas.
Otra cuestión es ¿si la base de datos en PostgreSQL es muy grande?, eso no se puede cargar en RAM siempre via Redis, por lo que igualmente ¿toca estar viendo que datos no estan disponibles en Redis para irlos a buscar a PostgreSQL?, ya que realmente Redis está haciendo como de cache de lectura de Postgre.
Yo normalmente he utilizado algo similar, pero directamente usando PostgreSQL cluster (no recuerdo si fue con pg_pool o algo similar) con 1 master y 2 slaves por ejemplo haciendo que las lecturas las resuelvan los slaves, y las escrituras todas al master, y usando los WAL se mantienen la sincronización entre todos
En cualquier caso muy interesante. Muchas gracias
En las interfaces es opcional poner el modificador public a nivel de métodos.
Puedo tener una sola BD pero con dos modelos distintos?? Un modelo relacional que se encargara de los commands.y un modelo con un par de tabla sin constraints donde tendremos los datos replicados del modelo relacional la cual usare para las querys.. La sincronizacion la realizare a traves de triggers...
Buenas tendra un ejemplo de redis geospacial con spring boot
Excelente video. Muchas gracias. Tengo entendido que CQRS es un patrón que se considera cuando el workload del sistema es un mayor porcentaje de lecturas versus escrituras, ya que opitmizar un único modelo para dicho escenario es muy difícil. Al segregar en dos modelos distintos permite optimizar cada workload por separado, lo que permite usar productos distintos como lo hiciste en el video usando PostgreSQL y Redis. Por otro lado, si no fuera por Debezium capturar los cambios en las bases de datos de forma standard sería complicado. Por último, si bien Kafka es una buena opción como repositorio de mensajes, ¿sería una opcion también usar un broker tradicional como RabittMQ o AMQ, por ejemplo?
No sé a qué te refieras con “un broker tradicional” pero, sería cuestión de buscar/construir el conector de rabbit para debezium y no abría problema
Genial el video 🎉, consideras que se podrías haber evitado incluir la lógica para almacenar el dato en redis, delegando esa responsabilidad a un Kafka connector para redis y de esta forma desentender de esa responsabilidad a tu aplicación, que opinas al respecto ?
yo creo que seria lo ideal, ademas que el kafka connector sink de redis es open source
Genial. muy buen tutorial. teórico y practico.
Hola, al realizar una operación de escritura en la base de datos relacional que se publican los cambios para replicarse en la base de datos no relacional, como sabe a que documento de Redis debe ir para aplicar esos cambios? entiendo que los id en la base de datos para las tablas en la base de datos SQL son unos y los Id de los documentos en Redis son otros, como los relacionas para saber en que documento aplicar los cambios ?
Gracias
Me pregunto cómo aumentaría el rendimiento teniendo un cluster de CouchDB de lecturas y otro cluster de CouchDB de escritura. La ventaja sería el aclamado sistema de replicación de CouchDB.
Sería cuestión de probar...
Interesante vídeo, se encuentra a faltar remarcar que este patrón no es usable en ningún caso de uso que requiera leer respetando la consistencia de las escrituras. En un app social sí que puede ser de gran ayuda para tener mejor rendimiento
tiene el cqrs sentido que los commands como queries lo maneje el mismo servicio? no se puede escalar de forma separada lecturas y escrituras
Pues sacate el mvp de Microsoft
Command Query Responsibility* Segregation min: 2:05
un jdbc en el restcontroller... ajá arquitectura hexagonal...
hola me sale este error cuando coloco el script para debezium : {"error_code":400,"message":"Connector configuration is invalid and contains the following 1 error(s):
The 'topic.prefix' value is invalid: A value is required
You can also find the above list of errors at the endpoint `/connector-plugins/{connectorType}/config/validate`"}%
Prueba aumentando esto "topic.prefix": "fulfillment"
No conocia este patron CQRS. Pero me parece muy interesante.
Yo en mi trabajo tengo muchisimas inserccionenes de dispositivos IOTS que me mandan información de las sondas cada 5 minutos. Estoy buscando la manera de poder replicar mi base de datos mysql que sea tolerante a fallos y que no sea la tipica base de datos Maestro-Esclavo. Mi insfraestructura la he montado yo en un servidor que tengo a tal efecto (nada de amazonws o google cloud) ¿Alguien por aqui con alguna solución para replicar de forma segura la base de datos reduntante por si en algun momento se cae poder tener una segunda base de datos como si fuese la principal?
gracias!!
¿No has pensado en implementar tu BD en MongoDB? podrías crear un Cluster de servidores de BD y de esa manera ya no tienes el problema de una sola BD que podría fallar. El Cluster mantiene todo siempre andando. Incluso no necesitas que todos los servidores del Cluster estén el mismo lugar físico (que es lo recomendable).
MoongoDB es solo un ejemplo, también se puede hacer con CouchDB, etc.
realice la prueba y no funciona
🐘🟥☕🐋
{
"name": "inventory-connector",
"config": {
"connector.class": "io.debezium.connector.postgresql.PostgresConnector",
"tasks.max": "1",
"database.hostname": "postgres",
"database.port": "5432",
"database.user": "postgres",
"database.password": "postgres",
"database.dbname" : "postgres",
"topic.prefix": "dbserver1",
"schema.include.list": "inventory"
}
}
FOR POSTGRESQL