Comunicación entre microservicios: 🕋 Event-Driven Architecture

Поділитися
Вставка
  • Опубліковано 28 вер 2024

КОМЕНТАРІ • 84

  • @CodelyTV
    @CodelyTV  6 років тому +12

    Este vídeo es un pequeño repaso a todo lo que vemos en detalle en el curso sobre comunicación entre microservicios. Más información:
    🚀 Curso comunicación entre microservicios: bit.ly/curso-microservicios
    📕 Catálogo completo de cursos CodelyTV Pro: codely.tv/pro/cursos
    💸 Descuento 111€ gratis: codely.tv/pro/celebramos-5k-subs

    • @cristianandresvargasgonzal4510
      @cristianandresvargasgonzal4510 4 роки тому

      Hola muchas gracias por el curso, estuvo genial, lo tome hace un tiempo, hoy volví a ver este vídeo, quería preguntarles que libros sobre este tema me pueden recomendar?

  • @PiaGomezq
    @PiaGomezq 4 роки тому +22

    He enganchado con su contenido, me viene muy bien saber de arquitectura, soy desarrolladora frontend :) nueva suscriptora ✌🏻🇨🇱

  • @polzaoops90
    @polzaoops90 2 роки тому +1

    colle me ajudaron mucho a entender algunos detalles y entender mejor como tomar decisiones de arquitetura mas sabiamente, muchas gracias

  • @kmilo93sd
    @kmilo93sd 6 років тому +6

    Muy buena introducción y la explicación, es genial ver como explican estas cosas poniendole una buena cuota de humor.

  • @b14ckh4wk3
    @b14ckh4wk3 2 роки тому +1

    trabaje en un banco y usabamos circuit breaker y era un desmadre, demasiadas capas, saludos

  • @jonalexjm1
    @jonalexjm1 3 роки тому +1

    Tienen temas avanzados y vigentes.. excelentes creadores de contenido !

  • @CesarICAO
    @CesarICAO 6 років тому +3

    Muy buenos videos, soy Front end developer y actualmente convivo con backends que están haciendo microservicios, me sirve mucho porque asi entiendo todo el ecosistema completo. Gracias por los videos, esperamos mas de Front End también :D Saludos desde México...!!!!

    • @CodelyTV
      @CodelyTV  6 років тому +1

      Esa es la actitud! 🙌🙌🙌
      Gracias por tu comentario!

  • @dialruppertOk
    @dialruppertOk 2 роки тому

    Uno de los mejores videos de codely. Me imagino el curso!

  • @eduardoarenas535
    @eduardoarenas535 4 роки тому

    Me encanto el video !!!, ideas claras y me han iluminado el camino para entrarle a los microservicios

  • @horaciosanchez921
    @horaciosanchez921 5 років тому

    Muchas gracias este video me ha dado mucha visibilidad sois geniales

  • @traviscr
    @traviscr 4 роки тому

    Muy informativo y se ve que la están pasando bien.

  • @andresgutierrez1804
    @andresgutierrez1804 6 років тому +6

    Justo lo q buscaba

  • @rubencristobal655
    @rubencristobal655 2 роки тому +1

    Excelente, genial explicado, like + subscriptor nuevo.

  • @fabiosanchez9595
    @fabiosanchez9595 5 років тому +1

    Buenisima la explicacion, clara y sencilla.

  • @carloslfu
    @carloslfu 6 років тому +1

    Muy buena explicación y ademas entretenida :)

  • @solcha96
    @solcha96 7 місяців тому

    las animaciones son tan buenas q me distraían de la explicación, jaja. Muy bueno!

  • @pablovalencia1917
    @pablovalencia1917 2 роки тому

    Excelente video.. haré los cursos

  • @neutro78
    @neutro78 6 місяців тому

    Hola! tienen alguna guia de las arquitecturas y como combinarlas? quiero usar arquitectura hexagonal y EDA pero no sé si seria conveniente

  • @LuisRuizHalo
    @LuisRuizHalo 4 роки тому +7

    A la gente que quiera aprender un poco más, les comparto un link a un doc Microsoft donde explican muy bien y además también incluyen explicación de los servicios requeridos (como RabbitMQ) por la nueva infraestructura. docs.microsoft.com/en-us/dotnet/architecture/microservices/multi-container-microservice-net-applications/microservice-application-design

  • @proyectotau7203
    @proyectotau7203 6 років тому +2

    genial la presentación 👍👏
    sólo una aclaración de la parte de los subscribers. en el caso de que aumenten x1000 la creación de vídeos, tb habrá x1000 invocaciones al callback del user service... y eso ¿no perjudica porque va directo por el id del usuario? pero aún así hay x1000 peticiones PUT complas qué procesar... no? un abrazo!!!!

    • @CodelyTV
      @CodelyTV  6 років тому +12

      ¡Buenas!
      En el caso de un x1000 de creación de vídeos, si el consumidor de eventos del servicio de usuarios no puede procesarlos, simplemente la cola actuará como buffer. Es decir, como comentamos en el minuto 24:10, los eventos quedarían retenidos en la cola hasta que el servicio de usuarios poco a poco fuera capaz de procesarlos y ponerse al día.
      Aquí es cuando se produce lo que se conoce como "consistencia eventual". Es decir, el servicio de usuarios devolverá un total de vídeos creados que no será el real durante un espacio de tiempo.
      Le pongo las comillas a "consistencia eventual" porque realmente sería una mala traducción del término en inglés _Eventual consistency_. En inglés, _Eventual_ significa que algo tarde o temprano tendrá lugar. En cambio, que algo sea eventual en castellano quiere decir que está sujeto a circunstancias y que por lo tanto no es seguro que pase o que sea constante en el tiempo. A pesar de esto, se suele traducir como consistencia eventual y de tanto usarlo a nivel técnico ya nos entendemos 😅
      Un saludo y gracias por la pregunta. Es algo que no tratamos a fondo en el vídeo y seguro que le sirve a alguien más 🙂

  • @paulwelsch6462
    @paulwelsch6462 5 років тому

    Muy bueno y entretenido muchachos!

  • @futureControl
    @futureControl 4 роки тому

    Perdonar tengo unas dudas ... si no necesitamos tablas ni BBDD relacionales ... ¿donde se guarda la información de los usuarios? ... si tenemos por ejemplo 30 entidades de domino ¿necesitaremos 30 instancias de la BD? ... que sea (MongoDB, MySQL, etc) ... un saludo un gran video!!

  • @cristianscript5649
    @cristianscript5649 5 місяців тому

    tienen cursos en udemy?

  • @kaelt75
    @kaelt75 3 роки тому

    Excelentes videos y explicaciones. Muchas gracias. Tengo una duda respecto al caso de que yo necesite saber que videos pertenecen a un determinado usuario, para evitar relaciones o llamadas HTTP entre servicios, lo que se haría es en cada registro de video agregar la información del dueño del mismo, ¿cierto?
    ¿Es decir, replicaria en cada base de datos la información que se necesita?

    • @asier6734
      @asier6734 2 роки тому

      No replicarias datos ya que no hay necesidad de ello, consultarias los datos al servicio que corresponda. Para replicar datos se necesitarian otras razones, no por eficiencia

  • @JoseDiaz-um3zg
    @JoseDiaz-um3zg 5 років тому

    Me pregunto si la alternativa 2 no se solucionaría simplemente poniendo una base de datos distribuida en Comodity Hardware, se evitan sobrecargas en la BBDD, la complejidad en el desarrollo no se dispara, se puede escalar añadiendo mas nodos a la BBDD en caso de aumento de peticiones, y el coste no se dispara. También recordar que las BBDD's también se pueden caer y con una BBDD distribuida el servicio no deja de funcionar en ese caso ya que siempre hay otros nodos disponibles. Por poner un par de ejemplos... Cassandra o ArangoDB (del cual soy muy fan).
    En todo caso la explicación del caso es muy interesante.

    • @jordirockamore
      @jordirockamore 5 років тому +1

      Pero esto sería "hacer trampa", claro que puedes multiplicar el número de esclavos de Mysql o usar Cassandra (buena suerte configurando una política de source of truth o manteniendo integridad referencial), igual que puedes multiplicar el número de monolitos (con máquinas o contenedores), pero la ingeniería busca resolver problemas de forma eficiente con el mínimo de recursos, no poniendo más dinero

  • @code_castle
    @code_castle 5 років тому

    Super interesante !!

  • @chinex1988
    @chinex1988 5 років тому +1

    Una consulta y que pasaría si todo esto está montado con contenedores dentro de un cluster de kubernetes. Y tenemos 3 réplicas definidas para el microservicio de usuario, al momento de publicar el evento de video creado mis 3 réplicas estarían suscritas a ese evento y por ende leerían el evento y podrían actualizar 3 veces el campo total de videos creados. ¿Cómo se gestionaría esto?. Pensé en mandar el campo ya actualizado al evento; sin embargo de todas maneras esto se estaría actualizando de acuerdo a la cantidad de réplicas que tenga el microservicio.

    • @CodelyTV
      @CodelyTV  5 років тому

      ¡Buenas Edgar!
      Respondiendo a tu pregunta: La gestión de consumir 1 única vez el evento vendría dada por el sistema de publicación y suscripción de eventos que usemos (RabbitMQ, Kafka, AWS SNS->SQS, etc.). Es decir, una vez 1 consumidor que está suscrito a los eventos de esa cola recoge el evento, el propio sistema marca ese evento/mensaje como "transmitido" a la espera de un ACK del consumidor o un timeout para volverlo a hacer visible a otro consumidor. Esto evitaría en un primer momento que otra instancia de nuestros consumidores leyera el mismo evento.
      Dicho esto, hay sistemas como SQS que no garantizan el orden de los eventos/mensajes de la cola al consumir, ni tampoco que no puedas llegar a consumir un evento por duplicado. Ahí entramos en temas de hacer nuestros consumidores tolerantes a este tipo de casos a través de idempotencia o similares.
      Todo esto lo explicamos mucho más en detalle y con ejemplos concretos a nivel conceptual y de código en el curso: pro.codely.tv/library/comunicacion-entre-microservicios-event-driven-architecture/about/
      Si te interesan estos temas… ¡te esperamos! 🙂

    • @chinex1988
      @chinex1988 5 років тому +1

      @@CodelyTV Excelente, gracias por el detalle de la respuesta. De todas maneras llevaré el curso.

  • @carlitosdroid
    @carlitosdroid 5 років тому +1

    Solo tengo un pequeña duda, el servicio de creación de videos es un PUT y no un POST, porque esta vez los clientes de la aplicación son los que generan ese identificador único para el video y en el caso de los usuarios también debo usar un PUT? como genero un identificador único para el caso de video?, un algoritmo amarrado al id del usuario?

    • @CodelyTV
      @CodelyTV  5 років тому

      Lo que planteas es correcto. Para la generación del identificador lo haríamos de forma aleatoria usando UUIDs.
      UUID es un formato de identificador único aleatorio bastante estándar. Encontraras librerías para generar UUIDs en los principales lenguajes de programación sin problema.
      Te recomendamos el vídeo de preguntas frecuentes de CQRS donde justamente comentamos el tema de la generación de IDs desde el cliente: ua-cam.com/video/auEhX4WfCRA/v-deo.html
      Saludos!

    • @mclaren9542
      @mclaren9542 4 роки тому +1

      Con esto me ha quedado clara la diferencia entre PUT y POST. Gracias!

  • @rad8329
    @rad8329 6 років тому +4

    Cómo hago para dar más de un like?

  • @JDQN
    @JDQN 3 роки тому

    Está muy buena el contenido, pero me gustaría que hablaran muchísimo más claro porque a Javi se le entiende lo que habla y habla con fuerza y claridad peor al otro chico no se le entiende casi nada hablas muy, pero muy nasal y sin fuerza y es superimportante que hables muy bien me quede asta el final porque Javi me engancho Gracias Javi sos un Genio

  • @freedosforever
    @freedosforever 3 роки тому

    No me parece razonable, ese ejemplo del contador de videos. Si por ejemplo abro youtube y quiero ver cuántos videos ha publicado un determinado usuario, estan asegurando que no se necesitara hacer un conteo de los videos. Alguien me puede decir entonces cómo se logra esta cuenta de manera más eficiente?

    • @xabierm1609
      @xabierm1609 3 роки тому +1

      Yo tambien tengo esa duda, lo lograste solucionar?

    • @freedosforever
      @freedosforever 3 роки тому

      @@xabierm1609 no, soy ignorante en ese tema. Pero creo que hay un "bus" a donde van las notificaciones y así en teoria seria mas eficiente llevar la cuenta de algo. Pero me parece que eso implicaría más recursos porque un servidor debe recibir el dato y notificar, y la aplicación recibir y actualizar el contador en el cliente, lo cual es más complicado que lo tradicional donde solo se obtiene el conteo en el momento que se necesita conjuntamente con otros datos que puedan ser utiles.

  • @PMFOXTECHNOLOGIES2
    @PMFOXTECHNOLOGIES2 3 роки тому

    Una charla muy interesante, me.ayudo a complementar lo que sabía ua-cam.com/video/N95W6I_DoRs/v-deo.html
    Saludos y seguiré viendo el bueno contenido.

  • @pedromartinez9148
    @pedromartinez9148 3 роки тому +2

    Jajaja que divertido y educador video.
    Super like.

  • @carlosestebangil
    @carlosestebangil Місяць тому

    Acá estaban mas didácticos, menosacelerados, traten de hacer todos asi. pd: Gran canal.

  • @Red_bone
    @Red_bone 2 роки тому

    Enormes gracias a mi pareja lgtb favorita

  • @Devxcuba
    @Devxcuba 11 місяців тому +1

    De los mejores canales en mi criterio 🙌🏻

  • @FabianMontoya
    @FabianMontoya 3 роки тому +1

    COmo escuché un día "Que camión de información" super genial este tipo de vídeos, una lastima que sea tan por encima pero igual es super instructivo. Mil gracias y ganais un nuevo suscriptor :D

  • @leniedor733
    @leniedor733 2 роки тому +1

    Esto de los microservicios es una pasada y sobre todo es sencillo si lo planteas en un folio :)

  • @carlitosdroid
    @carlitosdroid 5 років тому +2

    Muchísimas gracias! Son muy buenos profesionales, excelente explicación.

  • @JavierRaffo
    @JavierRaffo 2 роки тому

    Cracks!

  • @lucianosantillan164
    @lucianosantillan164 4 роки тому +1

    Hablan de temas que me interesan muchisimo y, a demás, me entretiene su forma de contar las cosas. Parece una charla educativa entre amigos

  • @armas125125
    @armas125125 4 роки тому +1

    Muy buena explicación, muchas gracias....

  • @sergioramirez4159
    @sergioramirez4159 2 роки тому

    Gracias por el contenido, me da una duda, son pareja? digo, por la forma en la que se miran, se ve raro, perdón si esto les ofende.

    • @CodelyTV
      @CodelyTV  2 роки тому +1

      Nos queremos.

    • @sergioramirez4159
      @sergioramirez4159 2 роки тому +2

      @@CodelyTV pues tambien la comunidad los queremos por tan buen material de ayuda, saludos!

  • @memoodm
    @memoodm 4 роки тому +1

    Muy buena energia!

  • @johanguzman9334
    @johanguzman9334 4 роки тому +1

    ¿Hola, una pregunta, como se llama el programa que usan en el minuto 24:53 para simular las comunicaciones de la infraestructura?

    • @CodelyTV
      @CodelyTV  4 роки тому

      Buenas Johan!
      Es tryrabbitmq.com 😊

  • @munoztorresjhonramiro1594
    @munoztorresjhonramiro1594 3 роки тому

    Muy grande la explicación cracks. Pareciera que se iba a besar cuando se miraban a los ojos JAJAJAJA. Las mejores energias. Saludos desde Colombia.

  • @eldiosdelcielo
    @eldiosdelcielo 4 роки тому

    que mas muchachos como va todo, hey tenes el cupon para inscribirse al pro? estoy usando este CODELYCQDXP y nada tio, la ostia con esa interfaz

  • @agustinyuse5143
    @agustinyuse5143 4 роки тому +1

    Esto es genial! Gracias!

  • @agonzalezo
    @agonzalezo 8 місяців тому

    Muy buena explicación y los diagramas ayudan a entender mejor todo 🫡

  • @gustavoCaa
    @gustavoCaa 5 років тому

    Que buen vídeo, gracias!! Tengo una pregunta... Si se quisiera agregar un servicio de usuario más...por cualquier motivo. Los dos servicios empezarían a duplicar info en la db?. Los dos servicios recibirian la misma cantidad de mensajes?

  • @RobotgruntXD
    @RobotgruntXD 3 роки тому

    excelente video, creo que es la mejor explicación de architecturas de software que he visto hasta ahora.

  • @pavelmansilla1124
    @pavelmansilla1124 3 роки тому

    Que genial , clara explicación . Saludos desde Perú.

  • @hernanriospinedo
    @hernanriospinedo 3 роки тому

    Tambien esta la carga de balanceo en los microservicios?

  • @alfoom6922
    @alfoom6922 4 роки тому

    20:24
    Se agradecen los chascarrillos y las explicaciones previas, pero lo bueno está en ese punto.

  • @edgardejesusmendozaortegon7655
    @edgardejesusmendozaortegon7655 5 років тому

    Muy buen video. gracias por tanto conocimiento.

  • @JorgeOrtegaPereira
    @JorgeOrtegaPereira 4 роки тому

    Excelente análisis y explicación!!

  • @arielfalco12358
    @arielfalco12358 4 роки тому

    Tengo una consulta, al hacer que el procesamiento de la cantidad de videos lo haga el servicio del usuario, no estoy agregando columnas innecesarias? es decir, con este enfoque estaria creando una columna por cada calculo a realizar sobre otro servicio.

    • @asier6734
      @asier6734 2 роки тому

      Asi es, añadirias a los datos del microservicio los derivados de procesar los eventos

  • @jhonmendex1
    @jhonmendex1 4 роки тому +1

    En caso de que requieran la herramienta. del video: tryrabbitmq.com/

  • @jacsamg
    @jacsamg 6 років тому

    ¡Buenisimo!

  • @federicomarilungo
    @federicomarilungo 2 роки тому

    Buenas! Tengo una duda, puede la arquitectura por eventos en algún caso hacer posible que sea conveniente duplicar información? Por ejemplo, guardar el nombre del video en ambas base de datos, imaginando que tenemos dos pantallas que usan ese dato

    • @asier6734
      @asier6734 2 роки тому

      La arquitectura orientada a eventos tiene dos cualidades (entre otras): la resiliencia (que se explica en el video) y el desacoplamiento entre el que llama y es llamado (consumidores y productores). No implica que debas duplicar tus datos.

    • @federicomarilungo
      @federicomarilungo 2 роки тому

      ​@@asier6734 Gracias por responder.
      Me cuesta mucho imaginarme escenarios que conozco donde un microservicio necesita el dato de otro para su respuesta con EDD .
      por ejemplo, front web y front mobile utilizan el mismo dato, cada uno de los front tiene su propio servicio al que llaman para pedirselo.
      En mi experiencia estos servicios suelen comunicarse con el mismo servicio "core" que tiene el dato , cada vez que lo necesitan
      en EDD esto no seria posible, entonces, cada servicio deberia almacenar el dato que necesitan para cuando los front los consulte, pero de esta forma triplicarias la información.
      Es un patrón comun en EDD o es un mal caso de uso para el patron y en este caso seguiriamos usando los tipicos microservicios y consultas http? Saludos!

    • @asier6734
      @asier6734 2 роки тому

      @@federicomarilungo los datos asociasos a un microservicio no tienen relacion con que sea de eventos o sincrono. Sino con como se hayan definido los microservicios y lo que cada uno sirva y datos que gestione en su bbdd. A microservicios mas pequeños mayor escalabilidad.
      Es comun que unos microservicios hagan uso de datos de otros microservicios. EDD solo modifica como se comunica e impone algunas condiciones (para gestionar un evento repetido etc) pero no supone un cambio en que datos gestiona cada microservicio

    • @federicomarilungo
      @federicomarilungo 2 роки тому

      ​@@asier6734 Bueno creo que no supe explicar donde aparece el duplicado de datos.
      Microservicio A hace uso de Microservicio B para pedir dato 1
      Escenario 1) Usamos arquitectura de comunicacion http
      El microservicio A llama cada vez que necesita el dato a microservicio B
      Escenario 2) Usamos arquitectura EDD
      El microservicio A se entera cuando el dato cambia (cuando el microservicio B lanza un evento) y tiene que almacenarlo para cuando el front se lo pida.
      En este ejemplo se puede ver como en el escenario 2, con EDD, necesitas duplicar la información. No hay forma de comunicar los servicios por EDD sin duplicar la información para este caso de uso. O si? Esa es mi pregunta
      Gracias.

    • @asier6734
      @asier6734 2 роки тому +1

      @@federicomarilungo ok, entiendo. Tal y como lo veo almacenaria el dato pero no es necesariamente un duplicado. B puede no guardar el total ya que puede no necesitarlo (o si). Lo que hace es lanzar el evento para que lo procese A, recalculando el total y almacenandolo). No tiene por que haber duplicados, aunque puede haberlos en EDD. Esto tb tiene relacion con event sourcing, una tecnica donde se registran todos los eventos para el calculo de datos (donde lo que se registra son los eventos en si mismos y no los datos)