Implementando el Patrón CQRS con Debezium, Postgresql, Redis, Kafka...

Поделиться
HTML-код
  • Опубликовано: 16 окт 2022
  • 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.

Комментарии • 63

  • @NullSafeArchitect
    @NullSafeArchitect  Год назад +7

    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

  • @jhonrodriguez8070
    @jhonrodriguez8070 28 дней назад +1

    Excelente contenido, muchas gracias digital!

  • @mamisho
    @mamisho Год назад +1

    Estos videos son muy avanzados. Es de lo que no hay. Muchas gracias por tu tiempo

  • @manueljesusgameroquiros3963
    @manueljesusgameroquiros3963 Год назад +2

    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.

  • @gutisjd
    @gutisjd Год назад +1

    Increíble Albert, magistral el vídeo ❤

  • @xxaqploboxx
    @xxaqploboxx Год назад +2

    Excelente explicacion profesor, sin duda el mejor contenido en español

  • @FranciscoOrtizC
    @FranciscoOrtizC Год назад +1

    Muy buen ejemplo y explicación como siempre. Muchas gracias por estos videos. Esperando los siguientes...

  • @FranFran7895
    @FranFran7895 Год назад +1

    Me encanta el logo y nuevo nombre, gracias por todos tu videos, valen oro €€

  • @wilfredomartel7781
    @wilfredomartel7781 Год назад +1

    Excelente video👏🌞

  • @pierrerecuay2083
    @pierrerecuay2083 Год назад +1

    Genial me quedó claro el patrón

  • @rbarriae
    @rbarriae Год назад +1

    ¡¡¡ IMPRESIONANTE !!! Saludos desde el sur de Chile.

  • @LTDATA
    @LTDATA Год назад +1

    Gracias! Me ha gustado!

  • @carlospinachomiranda9668
    @carlospinachomiranda9668 Год назад +1

    Excelente ejemplo, gracias

  • @benjaminsepulveda1664
    @benjaminsepulveda1664 Год назад +2

    Buen video lo de devezium no lo conocía se ve una solución bastante limpia en entornos de alta demanda

  • @santosmarte
    @santosmarte Год назад +1

    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 !!!

  • @EliberioSoftEC
    @EliberioSoftEC Год назад +1

    Excelente explicacion

  • @javiercarrillo3437
    @javiercarrillo3437 Год назад +1

    Excelente contenido

  • @Kikoken73
    @Kikoken73 Год назад +1

    que buena explicacion , gracias por compartir

  • @josuegarcia3355
    @josuegarcia3355 Год назад +1

    Esta buenísimo 👌

  • @CamiloCastroEscorcia
    @CamiloCastroEscorcia Год назад +1

    Excelente video

  • @13680seba
    @13680seba Год назад

    Excelente¡ Gracias por compartir¡ :)

  • @estudiantecool7659
    @estudiantecool7659 Год назад +1

    Que buen tutorial

  • @skuarch
    @skuarch Год назад +1

    que bien vídeo!

  • @alesofton
    @alesofton Год назад +1

    Buen video.

  • @juandavidcorrea5501
    @juandavidcorrea5501 Год назад +3

    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)

  • @oyepez003
    @oyepez003 Год назад +5

    Uno de los contras a tomar en cuenta es que se duplica x2 (aprox) el espacio en disco de la BD. Excelente video

    • @nigivamu
      @nigivamu Год назад +3

      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.

  • @josegalarza6628
    @josegalarza6628 Год назад +1

    Genial

  • @juanluiscastrovaldez3077
    @juanluiscastrovaldez3077 Год назад

    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.

  • @hugoflores7343
    @hugoflores7343 Год назад

    En las interfaces es opcional poner el modificador public a nivel de métodos.

  • @gerardogutierrez3908
    @gerardogutierrez3908 5 месяцев назад +1

    👍

  • @a0z9
    @a0z9 Год назад

    Eso es un proceso batch de toda la vida

  • @juansuarez2469
    @juansuarez2469 Год назад

    Muy bueno, no conocia este patron. Existe mucha diferencia con balancear los postgres?

  • @demoel
    @demoel Год назад +1

    Genial. muy buen tutorial. teórico y practico.

  • @sockosg
    @sockosg 6 месяцев назад +1

    Thanks!

    • @NullSafeArchitect
      @NullSafeArchitect  6 месяцев назад

      Mil gracias por el apoyo Samuel!

    • @sockosg
      @sockosg 6 месяцев назад +1

      @@NullSafeArchitectAl contrario, un millon de gracias a ti por compartir tu conocimiento... un saludo.

  • @vijb1475
    @vijb1475 11 месяцев назад +1

    Buenas tendra un ejemplo de redis geospacial con spring boot

  • @jesusnoguera8725
    @jesusnoguera8725 3 месяца назад

    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

  • @LODIK77
    @LODIK77 2 месяца назад

    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...

  • @marancibia1971
    @marancibia1971 Год назад

    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?

    • @juandavidcorrea5501
      @juandavidcorrea5501 Год назад +1

      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

  • @nicomf7478
    @nicomf7478 Год назад

    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 ?

    • @MichaelMartin66
      @MichaelMartin66 10 месяцев назад

      yo creo que seria lo ideal, ademas que el kafka connector sink de redis es open source

  • @VictorMeseguer
    @VictorMeseguer Год назад

    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

  • @davidpratr
    @davidpratr Год назад

    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

  • @UnDevMas
    @UnDevMas 5 месяцев назад

    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?¡

  • @LtdJorge
    @LtdJorge Год назад +1

    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.

  • @yorozuya6115
    @yorozuya6115 Год назад

    tiene el cqrs sentido que los commands como queries lo maneje el mismo servicio? no se puede escalar de forma separada lecturas y escrituras

  • @a0z9
    @a0z9 Год назад

    Pues sacate el mvp de Microsoft

  • @LewisFlorezRenza
    @LewisFlorezRenza Год назад

    un jdbc en el restcontroller... ajá arquitectura hexagonal...

  • @manuel__Youtube
    @manuel__Youtube 9 месяцев назад

    Command Query Responsibility* Segregation min: 2:05

  • @davidaguirre7344
    @davidaguirre7344 8 месяцев назад

    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`"}%

    • @papuchin7161
      @papuchin7161 8 месяцев назад +1

      Prueba aumentando esto "topic.prefix": "fulfillment"

  • @sergiocentenero
    @sergiocentenero Год назад

    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?

    • @claudioaltamirano389
      @claudioaltamirano389 Год назад

      gracias!!

    • @rbarriae
      @rbarriae Год назад

      ¿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).

    • @rbarriae
      @rbarriae Год назад

      MoongoDB es solo un ejemplo, también se puede hacer con CouchDB, etc.

  • @areku2012
    @areku2012 3 месяца назад

    realice la prueba y no funciona

  • @JamsMendez
    @JamsMendez Год назад +1

    🐘🟥☕🐋

  • @pedrojimenezblanquel3915
    @pedrojimenezblanquel3915 Год назад

    {
    "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