Coordinación de servicios y gestión del estado

Desarrollo de aplicaciones en AWS

Ricardo Sueiras

Principal Technologist

Coordinación de servicios

 

coordinación de servicios

  • Varios servicios deben colaborar para completar un flujo de trabajo.
  • Necesitan una estrategia de coordinación.
  • Dos enfoques: orquestación y coreografía.
Desarrollo de aplicaciones en AWS

Orquestación

 

patrón de orquestación

  • Un orquestador central coordina el flujo.
  • Controla la secuencia y decide qué servicio va después.
  • Útil para reintentos, lógica condicional y manejo de errores.
  • En AWS: se implementa con Step Functions sobre Lambda, ECS, DynamoDB.
Desarrollo de aplicaciones en AWS

Orquestación

 

patrón de orquestación

  • La lógica del flujo vive en un único lugar, así que depurar y monitorizar es más fácil.
  • Contraprestación: introduce una dependencia central.
Desarrollo de aplicaciones en AWS

Coreografía

  • Sin controlador central.
  • Los servicios reaccionan a eventos de forma independiente.
  • Cada servicio escucha eventos relevantes y hace su trabajo.
  • Ningún servicio necesita conocer todo el flujo.
  • Mejora el acoplamiento débil y la escalabilidad.

 

coreografía

Desarrollo de aplicaciones en AWS

Coreografía

  • En AWS: EventBridge, SNS, SQS.
  • Altamente escalable.
  • Contraprestación: más difícil de entender y depurar a medida que crece.

 

coreografía

Desarrollo de aplicaciones en AWS

Arquitectura dirigida por eventos

  • Los servicios se comunican produciendo y consumiendo eventos.
  • Favorece el acoplamiento débil entre servicios.
  • Favorece alta escalabilidad.
  • Permite procesar eventos en paralelo.
  • Nuevos servicios pueden suscribirse sin modificar los existentes.

 

arquitectura dirigida por eventos

Desarrollo de aplicaciones en AWS

Arquitectura dirigida por eventos

 

arquitectura dirigida por eventos

  • Contraprestaciones al implementar EDA:
  • Diseñar para consistencia eventual.
  • Implementar idempotencia.
  • El manejo de fallos es más complejo.
Desarrollo de aplicaciones en AWS

Idempotencia

 

idempotencia

  • La misma operación ejecutada varias veces produce el mismo resultado.
  • Principio clave en sistemas asíncronos y dirigidos por eventos.
  • Los sistemas distribuidos pueden entregar eventos duplicados (reintentos, fallos de red, reprocesos).
  • Conserva la corrección y fiabilidad del sistema.
Desarrollo de aplicaciones en AWS

Colas de mensajes muertos (DLQ)

 

dlq

  • Gestiona fallos en comunicación asíncrona.
  • Aísla mensajes problemáticos «venenosos».
  • Tras varios reintentos fallidos, el mensaje pasa a la DLQ.
  • El flujo principal sigue funcionando.
Desarrollo de aplicaciones en AWS

Colas de mensajes muertos (DLQ)

  • Úsalas cuando el orden de mensajes no sea crítico.
  • Omítelas en sistemas no críticos donde se acepte alguna pérdida de datos.
  • Evítalas cuando deba preservarse el orden de mensajes.

 

dlq

Desarrollo de aplicaciones en AWS

Gestión del estado

  • Gestionar el estado es fundamental en apps nativas en la nube.
  • Estado es cualquier dato que persiste entre interacciones.
  • Guardar estado local en el servidor limita escalabilidad y resiliencia.

 

gestión del estado

Desarrollo de aplicaciones en AWS

Gestión del estado

  • Gestionar el estado implica decisiones según lo que construyas.
  • Estado externo mejora escalabilidad y resiliencia.
  • Costes: más latencia y complejidad.
  • A considerar: consistencia, caché y patrones de acceso a datos.

 

gestión del estado

Desarrollo de aplicaciones en AWS

Con estado (stateful)

 

diseño con estado

  • Los datos de sesión se mantienen en el servidor.
  • Las peticiones deben ir a la misma instancia (sesiones pegajosas).
  • Limita la flexibilidad de escalado.
  • Si falla la instancia, se pierde la sesión.
Desarrollo de aplicaciones en AWS

Sin estado (stateless)

 

sin estado

  • Cada petición se trata de forma independiente.
  • No se guarda estado en el servidor.
  • El estado vive en sistemas externos.
  • Enfoque preferido para apps nativas en la nube.
  • Cualquier instancia puede manejar cualquier petición; escalar horizontalmente es sencillo.
Desarrollo de aplicaciones en AWS

¡Vamos a practicar!

Desarrollo de aplicaciones en AWS

Preparing Video For Download...