Slide 1

Slide 1 text

#SGVirtual Arquitectura basada en eventos para principiantes Hugo Guerrero APIs & Messaging Developer Advocate @ Red Hat Unidos compartiendo y aprendiendo #SGVirtual

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

#SGVirtual Modernizando Arquitecturas EVENT-DRIVEN ARCHITECTURE 3 Ye Olde Architecture Enlightened postmodernism

Slide 4

Slide 4 text

#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

Slide 5

Slide 5 text

#SGVirtual EVENT-DRIVEN ARCHITECTURE Los microservices son difíciles 5

Slide 6

Slide 6 text

#SGVirtual SERVICES INTERACTIONS 6 Ejemplo

Slide 7

Slide 7 text

#SGVirtual Gestionando errores EVENT-DRIVEN ARCHITECTURE 7 Customers Billing Administration Operations Customer Service GUI Customers routing service discovery retries / timeouts

Slide 8

Slide 8 text

#SGVirtual Gestionando errores EVENT-DRIVEN ARCHITECTURE 8

Slide 9

Slide 9 text

#SGVirtual Modernizando Arquitecturas EVENT-DRIVEN ARCHITECTURE 9

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

#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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

#SGVirtual EVENT-DRIVEN ARCHITECTURE ¿Qué es un evento? 14 Source: Query Comando Evento

Slide 15

Slide 15 text

#SGVirtual EVENT-DRIVEN ARCHITECTURE Tipos de eventos 15 Source: Replayable Consumible Volatil

Slide 16

Slide 16 text

#SGVirtual EVENT-DRIVEN ARCHITECTURE Request-response / Event-driven 16 Source:

Slide 17

Slide 17 text

#SGVirtual EVENT-DRIVEN ARCHITECTURE Bus de Eventos (Event Broker) 17 Source:

Slide 18

Slide 18 text

#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

Slide 19

Slide 19 text

#SGVirtual Microservicios basados en eventos EVENT-DRIVEN ARCHITECTURE 19 Ordering Billing Orders Payments Shipments Shipping Inventory Notification

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

#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

Slide 22

Slide 22 text

#SGVirtual EVENT-DRIVEN ARCHITECTURE Apache Kafka y Kubernetes 22 Source: https://landscape.cncf.io/

Slide 23

Slide 23 text

#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:

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

#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

Slide 26

Slide 26 text

#SGVirtual Gracias Hugo Guerrero APIs & Messaging Developer Advocate @ Red Hat Continuemos en slack o twitter @hguerreroo #SGVirtual