Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Eventos, mensajería y otras fábulas - PulpoCon 2019

339 views

Published on

El objetivo de la presentación es ayudar con trucos y consideraciones para mover nuestras aplicaciones del nivel 3 al nivel 4 de una forma práctica y reduciendo los costes de transición (de menor coste/complejidad a mayor sin comprometer mucho el siguiente paso). Veremos cómo desacoplar sin eventos de dominio sobre el mismo monolito, algunos trucos para mejorar la asincronía, cómo usar eventos con un monolito, la diferencia entre orquestrar y coordinar, y mucho más!

Published in: Software
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://soo.gd/qURD } ......................................................................................................................... Download Full EPUB Ebook here { https://soo.gd/qURD } ......................................................................................................................... Download Full doc Ebook here { https://soo.gd/qURD } ......................................................................................................................... Download PDF EBOOK here { https://soo.gd/qURD } ......................................................................................................................... Download EPUB Ebook here { https://soo.gd/qURD } ......................................................................................................................... Download doc Ebook here { https://soo.gd/qURD } ......................................................................................................................... ......................................................................................................................... ................................................................................................................................... eBook is an electronic version of a traditional print book THIS can be read by using a personal computer or by using an eBook reader. (An eBook reader can be a software application for use on a computer such as Microsoft's free Reader application, or a book-sized computer THIS is used solely as a reading device such as Nuvomedia's Rocket eBook.) Users can purchase an eBook on diskette or CD, but the most popular method of getting an eBook is to purchase a downloadable file of the eBook (or other reading material) from a Web site (such as Barnes and Noble) to be read from the user's computer or reading device. Generally, an eBook can be downloaded in five minutes or less ......................................................................................................................... .............. Browse by Genre Available eBooks .............................................................................................................................. Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, ......................................................................................................................... ......................................................................................................................... .....BEST SELLER FOR EBOOK RECOMMEND............................................................. ......................................................................................................................... Blowout: Corrupted Democracy, Rogue State Russia, and the Richest, Most Destructive Industry on Earth,-- The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company,-- Call Sign Chaos: Learning to Lead,-- StrengthsFinder 2.0,-- Stillness Is the Key,-- She Said: Breaking the Sexual Harassment Story THIS Helped Ignite a Movement,-- Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones,-- Everything Is Figureoutable,-- What It Takes: Lessons in the Pursuit of Excellence,-- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money THIS the Poor and Middle Class Do Not!,-- The Total Money Makeover: Classic Edition: A Proven Plan for Financial Fitness,-- Shut Up and Listen!: Hard Business Truths THIS Will Help You Succeed, ......................................................................................................................... .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

Eventos, mensajería y otras fábulas - PulpoCon 2019

  1. 1. EVENTOS, MENSAJERÍA Y OTRAS FÁBULAS CARLOS @BUENOSVINOS - #PULPOCON19
  2. 2. @BUENOSVINOS
  3. 3. Domain-Driven Design in PHP Carlos Buenosvinos, Christian Soronellas and Keyvan Akbary https://leanpub.com/ddd-in-php
  4. 4. INTENTO AYUDAR A MEJORAR TÉCNICAMENTE CON CAMBIOS PEQUEÑOS, BARATOS, PROGRESIVOS Y RÁPIDOS
  5. 5. BASADO EN MIS CLIENTES BUENOSVINOS MATURITY MODEL ▸ Level 1: Spaguetti ▸ Level 2: Framework Fanboy ▸ Level 3: Hexagonal Architecture ▸ Level 4: Hexagonal + Domain Events ▸ Level 5: Stepping Store (CQRS w/o ES) ▸ Level 6: CQRS + Event Sourcing
  6. 6. OBJETIVO OBJETIVO DE LA CHARLA ▸ Ayudaros con trucos y consideraciones para mover nuestras aplicaciones del nivel 3 al nivel 4 de una forma práctica y reduciendo los costes de transición (de menor coste/ complejidad a mayor sin comprometer mucho el siguiente paso). ▸ Level 3: Hexagonal Architecture ▸ Level 4: Hexagonal + Domain Events
  7. 7. NIVEL 3: HEXAGONAL
  8. 8. MATERIAL EN VIDEOS REFACTORIZAR HACIA HEXAGONAL ▸ https://carlosbuenosvinos.com/rigor-talks-php-13-refactor-use-case-i-spanish/ ▸ https://carlosbuenosvinos.com/rigor-talks-php-14-refactor-use-case-ii-spanish/ ▸ https://carlosbuenosvinos.com/rigor-talks-php-15-refactor-use-case-iii-spanish/ ▸ https://carlosbuenosvinos.com/rigor-talks-php-16-refactor-use-case-iv-spanish/ ▸ https://carlosbuenosvinos.com/rigor-talks-php-17-refactor-use-case-v-spanish/ ▸ https://carlosbuenosvinos.com/rigor-talks-php-18-tell-dont-ask-spanish/ ▸ https://carlosbuenosvinos.com/rigor-talks-php-19-refactor-use-case-vi-spanish/
  9. 9. DE NIVEL 3 A 4 (HEX + EVENTOS)
  10. 10. “A DOMAIN EVENT IS A RECORD OF SOME BUSINESS-SIGNIFICANT OCCURRENCE IN A BOUNDED CONTEXT” Vaughn Vernon
  11. 11. MATERIAL EN VIDEOS EVENTOS DE DOMINIO ▸ https://carlosbuenosvinos.com/rigor-talks-php-22-domain-events-i-spanish/ ▸ https://carlosbuenosvinos.com/rigor-talks-php-23-domain-events-ii-spanish/ ▸ https://carlosbuenosvinos.com/rigor-talks-php-24-domain-events-iii-spanish/ ▸ https://carlosbuenosvinos.com/rigor-talks-php-25-persisting-domain-events-spanish/ ▸ https://carlosbuenosvinos.com/rigor-talks-php-26-distributing-domain-events-using-rest- spanish/ ▸ https://carlosbuenosvinos.com/rigor-talks-php-27-distributing-domain-events-using-rabbitmq- spanish/
  12. 12. LOS BENEFICIOS DE LOS EVENTOS DE DOMINIO SON: MEJORAN EL DESACOMPLAMIENTO Y MEJORAN EL RENDIMIENTO (USÁNDOSE DE FORMA ASINCRONÍA)
  13. 13. DESACOPLAMIENTO Y ASINCRONÍA…
  14. 14. Y SI NO ESTUVIERAMOS LISTOS PARA EVENTOS/MENSAJERÍA (TODAVÍA)…
  15. 15. PODEMOS OBTENER LOS MISMOS BENEFICIOS SIN USAR EVENTOS DE DOMINIO?
  16. 16. IF (MONOLITO)
  17. 17. NO ESTAMOS LISTOS (Y ADEMÁS TENGO UN MONOLITO) MEJORAR DESACOPLAMIENTO (PERO NO ASINCRONÍA) ▸ /src ▸ /User ▸ /Billing ▸ /Inventory ▸ Prohibir la instanciación (new MyClass) entre carpetas de cada Bounded Context (Billing vs. Inventory, por ejemplo) y usar llamadas API REST entre cada Bounded Context ▸ Git precommit Hook + Check Style ▸ Autoload Composer (@dev) ▸ Runtime con Factory (Caller Stack simulando friend visibility)
  18. 18. NO ESTAMOS LISTOS (Y ADEMÁS TENGO UN MONOLITO) MEJORAR DESACOPLAMIENTO (PERO NO ASINCRONÍA) MI MONOLITO (DESDE BILLING) MI MONOLITO 200 /users/…
  19. 19. NO ESTAMOS LISTOS (Y ADEMÁS TENGO UN MONOLITO) MEJORAR ASINCRONÍA (LLAMADAS QUE NO REQUIEREN RESPUESTA) MI MONOLITO (DESDE BILLING) MI MONOLITO 201 /users/…
  20. 20. NO ESTAMOS LISTOS (Y ADEMÁS TENGO UN MONOLITO) OPCIONES EN EL LADO SERVIDOR C. Background Job (BD, REDIS, RabbitMQ) A. fastcgi_finish_request MI MONOLITO B. cron
  21. 21. NO ESTAMOS LISTOS (Y ADEMÁS TENGO UN MONOLITO) MEJORAR ASINCRONÍA (LLAMADAS QUE REQUIEREN RESPUESTA / POOLING) MI MONOLITO (DESDE BILLING) MI MONOLITO 201 (+ ?pool_url) /users/… pool_url
  22. 22. NO ESTAMOS LISTOS (Y ADEMÁS TENGO UN MONOLITO) MEJORAR ASINCRONÍA (LLAMADAS QUE REQUIEREN RESPUESTA / PUSH WEBHOOK) MI MONOLITO (DESDE BILLING) MI MONOLITO 201 webhook_url /users/… (+ webhook_url)
  23. 23. IF (SERVICES)
  24. 24. NO ESTOY LISTA PARA EVENTOS (Y ADEMÁS TENGO SERVICIOS) IGUAL QUE CON MONOLITO PERO HAY 2 O MÁS SERVICIOS SERVICIO 1 SERVICIO 2 201 201 (+ webhook_url) webhook_url
  25. 25. https://www.youtube.com/watch?v=kBlmEfljrn0
  26. 26. Y SI ESTUVIÉRAMOS LISTOS PARA EVENTOS/MENSAJERÍA…
  27. 27. BÁSICOS
  28. 28. BÁSICOS DISPARANDO EVENTOS (ESTÁTICAMENTE)
  29. 29. DISPARANDO EVENTOS (DESDE LA ENTIDAD)
  30. 30. SI NO TENÉIS SYMFONY O SIMILAR, NO PASA NADA… Domain Event Publisher Example
  31. 31. TRUCOS
  32. 32. PERSISTIR TODOS LOS EVENTOS EN BBDD Domain Event Listener (MySQL Example)
  33. 33. PUBLICAR API REST CON LOS EVENTOS
  34. 34. MESSAGE IDS
  35. 35. MESSAGE IDS MESSAGE ID, CAUSATION ID & CORRELATION ID
  36. 36. MESSAGE IDS MESSAGE ID, CAUSATION ID & CORRELATION ID
  37. 37. MESSAGE IDS MESSAGE ID, CAUSATION ID & CORRELATION ID
  38. 38. META INFO
  39. 39. META INFO META DATOS INTERESANTES ▸ webhooks_endpoint_url ▸ De la misma forma que con HATEOAS en APIs REST ▸ documentation_url ▸ Para la mejora de Experiencia de Developer ▸ deprecated ▸ Campos deprecados o consideraciones a tener en cuenta
  40. 40. VERSIONADO
  41. 41. VERSIONADO MUCHAS DIFICULTADES… ▸ Eventos ya enviados ▸ Retrocompatibilidad para Consumers viejos ▸ Replay de eventos viejos con código nuevo ▸ …
  42. 42. VERSIONADO ALGUNAS CONSIDERACIONES PARA EVITAR PARTE DEL DOLOR ▸ Sólo agrega campos nuevos al Evento (a los consumers viejos no le importará) ▸ user.birthday en ISO 8601 y agregamos user.birthday_in_timestamp ▸ No eliminamos campos del Evento (podemos marcarlos como deprecated en la información meta) ▸ No modificamos contenido de Eventos ni formatos (agregamos campo nuevo)
  43. 43. CHOREOGRAPHED VS. ORCHESTRATED
  44. 44. CHOREOGRAPHED VS. ORCHESTRATED EJEMPLO: RESTAURANTE ASÍNCRONO (REQUERIMIENTO INICIAL) WAITER COOK ASSISTANT MANAGERCASHIER 1. Toma el pedido 2. Cocina el pedido 3. Calcula $4. Cobra el pedido
  45. 45. CHOREOGRAPHED VS. ORCHESTRATED COMUNICACIÓN: EVENT IN, EVENT OUT WAITER COOK ASSISTANT MANAGERCASHIER OrderPlaced OrderCooked OrderAccountedOrderCashed
  46. 46. CHOREOGRAPHED VS. ORCHESTRATED COMUNICACIÓN: COMMAND IN, COMMAND OUT WAITER COOK ASSISTANT MANAGERCASHIER CookOrder AccountOrder CashOrder
  47. 47. FEATURE NUEVO: EL CLIENTE PAGA PRIMERO…
  48. 48. CHOREOGRAPHED VS. ORCHESTRATED DIFÍCIL IMPLEMENTAR EL FLUJO CON EVENT IN/EVENT OUT WAITER COOK ASSISTANT MANAGERCASHIER OrderPlaced OrderCooked OrderAccountedOrderCashed
  49. 49. CHOREOGRAPHED VS. ORCHESTRATED SOLUCIÓN: PROCESS MANAGER (EVENT IN, COMMAND OUT) WAITER COOK ASSISTANT MANAGERCASHIER ORCHESTRATOR (PROCESS MANAGER) OrderPlaced CookOrder OrderCooked order.userPaysFirst: True / False Múltiples flujos o diferentes PM
  50. 50. CHAOS MESSAGING DEVELOPMENT
  51. 51. FORCEMOS EN DESARROLLO LO QUE PUEDE OCURRIR EN PRODUCCIÓN (PÉRDIDA DE MENSAJES Y DUPLICIDAD DE MENSAJES)
  52. 52. CHAOS MESSAGING DEVELOPMENT CUSTOM TRANSPORTER FOR DUPLICATING MESSAGES (EXAMPLE IN SYMFONY)
  53. 53. CHAOS MESSAGING DEVELOPMENT CUSTOM TRANSPORTER FOR DROPPING MESSAGES (EXAMPLE IN SYMFONY)
  54. 54. CHAOS MESSAGING DEVELOPMENT SI DUPLICÁIS UN 20% DE MENSAJES Y PERDÉIS UN 20% DE MENSAJES (CUALQUIER RED SERÁ MEJOR) SERVICIO A SERVICIO B 20% DROPPED MESSAGES 20% DUPLICATED MESSAGES
  55. 55. BATALLANDO CON DUPLICIDAD Y PÉRDIDAS
  56. 56. BATALLANDO CON DUPLICIDAD Y PÉRDIDAS QUÉ PASA SI SE DUPLICARAN (20% DE COOKORDER) MENSAJES? WAITER COOK ASSISTANT MANAGERCASHIER ORCHESTRATOR (PROCESS MANAGER) OrderPlaced CookOrder OrderCooked CashOrder
  57. 57. CHOREOGRAPHED VS. ORCHESTRATED PROBLEMA: COOK RECIBE COOKORDER DUPLICADOS COOKORCHESTRATOR (PROCESS MANAGER) CookOrder SOLUCIÓN #1: CONTROL DE IDS VISTOS EN COOK SOLUCIÓN #2: COOKORDER ES IDEMPOTENTE (ORDER IS COOKED?) CookOrder CookOrder OrderCooked
  58. 58. BATALLANDO CON DUPLICIDAD Y PÉRDIDAS QUÉ PASA SI SE PERDIERAN (20% DE COOKORDER) MENSAJES? WAITER COOK ASSISTANT MANAGERCASHIER ORCHESTRATOR (PROCESS MANAGER) OrderPlaced CookOrder OrderCooked CashOrder
  59. 59. CHOREOGRAPHED VS. ORCHESTRATED PROBLEMA: COOK NO RECIBE COOKORDER COOKORCHESTRATOR (PROCESS MANAGER) SOLUCIÓN #1: TIMEOUT EN N SEGUNDOS Y REPUBLICAR CRON / REDIS LOCAL / NO USANDO PHP CookOrderTimeout
  60. 60. BATALLANDO CON DUPLICIDAD Y PÉRDIDAS WAITER COOK ASSISTANT MANAGERCASHIER ORCHESTRATOR (PROCESS MANAGER) OrderPlaced CookOrder OrderCooked CashOrder
  61. 61. CONCLUSIONES RESUMEN ▸ Antes de usar Eventos y Mensajería podemos: ▸ Separar los BC en Módulos con restricciones de instanciación y usando REST contra la misma app. Usar fastcgi_finish_request, crons o background tasks. Webhooks ▸ Evitar lo máximo los problemas de versionado de Eventos añadiendo campos (sin eliminar ni modificar existentes) ▸ Usar Correlation Id, Causation Id además del Message Id para mejorar la observability ▸ Meter META INFO en los Eventos como Documentación
  62. 62. CONCLUSIONES RESUMEN (II) ▸ Coreografía vs. Orchestración ▸ Chaos Messaging ▸ Idempotencia y control de Ids para Duplicación ▸ TimeOut para pérdida de paquetes
  63. 63. GRACIAS A TOD@S! (MENUDA CHAPA / FUMADA) @BUENOSVINOS

×