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

Migrando a Microservicios

Migrando a Microservicios

Mi charla en CodeÑuble 2019

Jano González

June 07, 2019
Tweet

More Decks by Jano González

Other Decks in Programming

Transcript

  1. • Definir fuentes autoritativas • Componer respuestas en los bordes

    • Usar eventos de ciclo de vida cuando sea necesario Consistencia eventual Los problemas
  2. • Estandarizar mecanismos de RPC y comunicación asíncrona • Proveer

    niveles de soporte para distintos stacks tecnológicos Muchos stacks tecnológicos Los problemas
  3. Identificar candidatos Este feature necesita cambios? Produce riesgo técnico? Escoger

    un enfoque de integración Cómo integrar el servicio extraído? Escoger un enfoque de migración de datos Cómo mover los datos a su propio storage? Extrayendo servicios El proceso 1 2 3
  4. Identificar candidatos Este feature necesita cambios? Produce riesgo técnico? Escoger

    un enfoque de integración Cómo integrar el servicio extraído? Escoger un enfoque de migración de datos Cómo mover los datos a su propio storage? Extrayendo servicios El proceso 1 2 3
  5. Introducir capa de servicios para el feature Si ya no

    la tienes Agregar camino alternativo bajo feature flag Cuidado, se podrían necesitar joins en memoria Mover el tráfico Ahora el código se puede limpiar Monolito como gateway El proceso 2.1 2.2 2.3
  6. Introducir capa de servicios para el feature Si ya no

    la tienes Agregar camino alternativo bajo feature flag Cuidado, se podrían necesitar joins en memoria Mover el tráfico Ahora el código se puede limpiar El proceso 2.1 2.2 2.3 Monolito como gateway
  7. def public_track_likes(user, pagination) if $feature.active?(:use_likes_service, user) … else … end

    end Agregar camino alternativo bajo feature flag Monolito como gateway
  8. Introducir capa de servicios para el feature Si ya no

    la tienes Agregar camino alternativo bajo feature flag Cuidado, se podrían necesitar joins en memoria Mover el tráfico Ahora el código se puede limpiar El proceso 2.1 2.2 2.3 Monolito como gateway
  9. Strangler Strangler Service Service ALG Ú N D ÍA… Service

    Service Escoger un enfoque de integración
  10. Introducir handlers para los paths Esto permite intervención Agregar camino

    alternativo bajo feature flag Puede implicar no sólo invocar el nuevo servicio Mover el tráfico Ahora el código se puede limpiar Strangler El proceso 2.1 2.2 2.3
  11. Introducir handlers para los paths Esto permite intervención Agregar camino

    alternativo bajo feature flag Puede implicar no sólo invocar el nuevo servicio Mover el tráfico Ahora el código se puede limpiar Strangler El proceso 2.1 2.2 2.3
  12. Introducir handlers para los paths Esto permite intervención Agregar camino

    alternativo bajo feature flag Puede implicar no sólo invocar el nuevo servicio Mover el tráfico Ahora el código se puede limpiar Strangler 2.1 2.2 2.3 El proceso
  13. Identificar candidatos Este feature necesita cambios? Produce riesgo técnico? Escoger

    un enfoque de integración Cómo integrar el servicio extraído? Escoger un enfoque de migración de datos Cómo mover los datos a su propio storage? Extrayendo servicios El proceso 1 2 3
  14. Nuevo schema Monolith M IG R AC IÓ N A

    Service B Escoger un enfoque de migración de datos
  15. Nuevo schema D ESPU ÉS Monolith A Service B Escoger

    un enfoque de migración de datos
  16. • Permite cambiar el motor de storage • Agrega riesgo

    a la migración • No lo he usado personalmente, más adecuado cuando se requieren cambios de features. Nuevo Escoger un enfoque de migración de datos
  17. El mismo schema Monolith M IG R AC IÓ N

    A Service A’ Escoger un enfoque de migración de datos
  18. El mismo schema D ESPU ÉS Monolith A Service A’

    Escoger un enfoque de migración de datos
  19. • Bajo riesgo • Usualmente movemos los lecturas en forma

    progresiva más un cut-over para las escrituras • Lo hemos escogido para migraciones por riesgo técnico El mismo schema Escoger un enfoque de migración de datos
  20. • Sistemas que leían directo desde BDs ajenas • Cut-over

    de las escrituras • Migrando eventos de ciclo de vida • Outages Extrayendo servicios Detalles omitidos
  21. Un feature a la vez Cuando lo necesitas Sin parar

    el delivery! Conclusions Como romper un monolito