Las arquitecturas distribuidas tienen un componente fundamental, el webhook se convirtió en ese componente para la integración de sistemas en tiempo real. Sin embargo, representa varios desafíos: ¿Cómo manejamos los picos de tráfico?, ¿Cómo garantizamos la entrega confiable de los mensajes?, ¿Qué sucede cuando los sistemas downstream están caídos?
Exploraremos como construir un webhook serverless utilizando los servicios de AWS, que no solo resuelve los desafíos anteriormente listados, sino que también nos proporciona escalabilidad y tolerancia a los fallos.
Es importante mencionar que con la propuesta de esta arquitectura permitiremos que no se sobrepase el soft limit de la ejecución de lambdas que tiene por defecto AWS (1000 funciones lambdas ejecutándose al mismo tiempo).
¿Por qué una arquitectura Serverless para webhooks?
Los webhooks por su naturaleza son de trafico impredecible, por lo cual, las arquitecturas Serverless son particularmente idóneas para este caso de uso. Asimismo, no es necesario mantener servidores a la espera de eventos para manejar los picos ocasionales de tráfico, y solo pagamos por lo que usamos.
Arquitectura por desarrollar:
- API Gateway endpoint: Validara el payload y preparara los headers necesarios para llamar al EventBridge Bus.
- EventBridge Bus: Distribuye los eventos enviados por el API Gateway hacia las reglas de eventbridge.
- EventBridge Rule: Se evalúa cada evento recibido desde el EB Bus, y se determinan hacia donde debe de enviarse basado en los patrones del evento.
- Cola SQS Standard: Actúa como un buffer y garantiza el procesamiento de mensajes y el manejo de picos de tráficos.
- DLQ SQS Standard: Captura los eventos que fallan después de 3 reintentos, permite el análisis posterior de eventos fallidos y con posibilidad de reprocesamiento manual si es necesario.
- Función Lambda: Procesa los mensajes de la cola SQS de forma asíncrona y escalable de los eventos.
Explicación del código
API Gateway endpoint
Source: Este campo se valida como prefijo en las reglas de eventbridge para saber cuales deben dejar pasar el evento.
EventBridge Rule
Suscripcion Función Lambda
Beneficios de esta Arquitectura
- Resiliencia: El uso de SQS y DLQ garantiza que ningún mensaje se pierda
- Escalabilidad: La arquitectura serverless escala automáticamente
- Control de Costos: Solo pagamos por el procesamiento real
- Mantenibilidad: Cada componente tiene una responsabilidad única
- Observabilidad: Fácil monitoreo mediante CloudWatch
El código fuente completo lo podrás encontrar en el siguiente enlace: Repositorio de Github
Para el despliegue completo de esta solución se requiere tener:
- Un bucket donde almacenar los stacks anidados.
- Un parameter store con el nombre del bucket.
- Los secretos necesarios de AWS para poder desplegar la solución.
Top comments (0)