Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Arquitectura orientada a eventos para principiantes

Arquitectura orientada a eventos para principiantes

Con el aumento en el desarrollo de microservicios distribuidos, los patrones de conectividad entre ellos se vuelven críticos para contar con una arquitectura escalable. Es esta sesión, revisaremos los pasos para movernos de una arquitectura basada únicamente en APIS REST a un arquitectura basada en eventos. Cubriremos preguntas como ¿Qué es un evento? ¿Qué tipo de eventos existen? y ¿Cuales son su características? También hablaremos de cómo encajan los eventos en un arquitectura de microservicios. Finalmente, cubriremos un poco más el caso de los eventos reproducibles implementado Apache Kafka.

Hugo Guerrero

May 04, 2020
Tweet

More Decks by Hugo Guerrero

Other Decks in Programming

Transcript

  1. #SGVirtual Arquitectura basada en eventos para principiantes Hugo Guerrero APIs

    & Messaging Developer Advocate @ Red Hat Unidos compartiendo y aprendiendo #SGVirtual
  2. #SGVirtual EVENT-DRIVEN ARCHITECTURE Source: https://developers.redhat.com/blog/author/hguerrero/ Hugo Guerrero APIs & Messaging

    Developer Advocate @ Red Hat Viajes + Comida + Historia Mexicano @ Massachusetts, USA Twitter @hguerreroo [email protected] https://developers.redhat.com/blog/author/hguerrero/ Hola!
  3. #SGVirtual Conectado microservicios EVENT-DRIVEN ARCHITECTURE 4 • Sistemas distribuidos •

    Múltiples servidores • Cada servicio es un proceso • Abuso del protocolo Customers Billing Administration Operations Customer Service
  4. #SGVirtual Gestionando errores EVENT-DRIVEN ARCHITECTURE 7 Customers Billing Administration Operations

    Customer Service GUI Customers routing service discovery retries / timeouts
  5. #SGVirtual ¿Qué es la arquitectura basada en eventos (EDA)? EVENT-DRIVEN

    ARCHITECTURE 10 Event-Driven Architecture (EDA) es una forma de diseñar aplicaciones y servicios que respondan en tiempo real a información basada en enviar y recibir notificaciones de cambios individuales en el sistema.
  6. #SGVirtual 11 Source: https://en.wikipedia.org/wiki/UNIVAC_1103 Inside Macintosh, Apple Computer Inc. Cupertino,

    CA, 1985. https://en.wikipedia.org/wiki/Database_trigger http://soft.vub.ac.be/Publications/2012/vub-soft-tr-12-13.pdf https://en.wikipedia.org/wiki/Java_version_history UNIVAC 1103, first computer with operating system level interrupts debuts. 1953 Apple Macintosh interface based on main event handling loop. 1984 Database vendors Oracle, Sybase, and others add triggers. 1993 First reactive programming language, Fran (Haskell), released. 1997 Java 1.4 introduces event handlers as first class objects. 2002
  7. #SGVirtual ¿Por qué arquitectura basada en eventos? EVENT-DRIVEN ARCHITECTURE 12

    Refleja el mundo real El mundo real está basado en eventos. Como el sistema nervioso, o una cafeteria. Reduce el acoplamiento EDA permite desacoplar servicios en tiempo de ejecución así como en tecnología Encapsulación Servicios aislados ayudan a diseñar microservicios que no dependen de cómo se consuman los eventos. Escalamiento individual Los servicios se pueden escalar independientemente. Latencia en casi tiempo real La desventaja de estar haciendo consultas se elimina moviendose a EDA.
  8. #SGVirtual ¿Qué es un evento? EVENT-DRIVEN ARCHITECTURE 13 Image: https://foto.wuestenigel.com/hand-ready-to-push-domino-pieces/

    Evento es una acción o un acontecimiento procesado por software usualmente originado asíncronamente fuera del sistema. La mayoría de las veces reemplazado por la notificación del acontecimiento.
  9. #SGVirtual EVENT-DRIVEN ARCHITECTURE Algunos protocolos para eventos 18 Source: •

    AMQP ◦ Advanced Message Queuing Protocol • STOMP ◦ Simple (or Streaming) Text Orientated Messaging Protocol • MQTT ◦ Message Queuing Telemetry Transport • KAFKA ◦ Protocolo binario sobre TCP • WEB ◦ WebSockets ◦ WebHooks ◦ Server-Sent Events
  10. #SGVirtual Microservicios basados en eventos EVENT-DRIVEN ARCHITECTURE 19 Ordering Billing

    Orders Payments Shipments Shipping Inventory Notification
  11. #SGVirtual EVENT-DRIVEN ARCHITECTURE ¿Qué es Apache Kafka? 20 Apache Kafka

    es un sistema distribuido diseñado para flujos de eventos. Está construido para ser escalable horizontalmente, tolerante a fallos, como un registro de bitácora, que permite procesar flujos y datos distribuidos.
  12. #SGVirtual EVENT-DRIVEN ARCHITECTURE Ecosistema de Apache Kafka 21 • Kafka

    Core ◦ Broker ◦ Producer API, Consumer API, Admin API ◦ Herramientas de administración • Kafka Connect • Kafka Streams API • Mirror Maker / Mirror Maker 2 • REST Proxy para HTTP y Kafka • Registro de esquemas
  13. #SGVirtual EVENT-DRIVEN ARCHITECTURE Patrones de implementación con Apache Kafka 23

    Event Sourcing Es un patrón que permite al sistema registrar los cambios en orden y luego reproducirlos para conocer el estado. Captura de cambios en la base de datos que permite auto generar eventos para que otros servicios puedan tener los últimos datos. Change Data Capture Estos sistemas detectan y reaccionan a condiciones críticas consultando un flujo continuo de eventos en ventanas de tiempo. Procesamiento de flujos de eventos Flujos de datos con múltiples etapas y consumidores formando un pipeline de información. Broadcast and Pipelines Source:
  14. #SGVirtual EVENT-DRIVEN ARCHITECTURE Eventos desde la base de datos 24

    Debezium Change Data Capture Platform Source: https://debezium.io/community/users/ • Conectores CDC para varias bases de datos ◦ Basado en transaction logs ◦ Snapshotting, Filtering etc. • 100% open-source, comunidad activa • Última version: 1.1 • Compañías desplegando en producción (e.g. WePay, JW Player, Convoy, Trivago, OYO, BlaBlaCar etc.)
  15. #SGVirtual Una vez que se empieza a trabajar en microservicios

    o funciones, la forma de mantener la comunicación es mediante notificaciones. Los patrones de integración basados en eventos permiten escalar y desacoplar microservicios, usando una cola o un tópico se pueden coordinar.. Microservicios y arquitecturas basadas en eventos EVENT-DRIVEN ARCHITECTURE 25 Migración a Microservicios Moverse a Serverless
  16. #SGVirtual Gracias Hugo Guerrero APIs & Messaging Developer Advocate @

    Red Hat Continuemos en slack o twitter @hguerreroo #SGVirtual