Skip to content

ricardosilval/orders-event-driven

Repository files navigation

🧩 Orders Processing System (Event-Driven Architecture)

Sistema backend serverless basado en eventos utilizando AWS. Permite recibir pedidos, procesarlos de forma asíncrona y manejar fallos de manera resiliente.

🏗️ Arquitectura

Flujo principal:

Client → API Gateway → Lambda (createOrder) → SQS → Lambda (processOrder) → DynamoDB

Características:

  • Procesamiento asíncrono
  • Desacople mediante colas
  • Persistencia de estado
  • Retries automáticos + DLQ
  • Observabilidad con correlationId

⚙️ Stack

  • Node.js + TypeScript
  • Serverless Framework
  • AWS Lambda
  • Amazon SQS + DLQ
  • Amazon DynamoDB
  • CloudWatch Logs

🚀 Features

  • Creación de pedidos vía API REST
  • Procesamiento asíncrono mediante SQS
  • Persistencia de estados (PENDING, PROCESSING, COMPLETED)
  • Manejo de errores con retries automáticos
  • Dead Letter Queue para fallos definitivos
  • Trazabilidad end-to-end con correlationId

🔁 Flujo del sistema

  1. Cliente envía POST /orders

  2. Se genera orderId y correlationId

  3. Se guarda en DynamoDB (PENDING)

  4. Se envía mensaje a SQS

  5. Worker procesa el pedido

  6. Se actualiza estado (PROCESSING → COMPLETED)

  7. En caso de error:

    • Reintentos automáticos
    • Envío a DLQ tras múltiples fallos

    📊 Observabilidad

El sistema implementa correlation IDs para trazabilidad:

  • Cada request genera un correlationId
  • Se propaga a través de SQS y Lambdas
  • Permite reconstruir el flujo completo desde logs

Ejemplo de log:

{ "message": "Processing order", "correlationId": "123", "orderId": "abc" }

🛡️ Resiliencia

  • Retries automáticos configurados en SQS
  • Dead Letter Queue (DLQ) para mensajes fallidos
  • Sistema tolerante a fallos sin pérdida de datos

▶️ Deploy

npm install
serverless deploy

curl -X POST https://<api-url>/orders \
  -H "Content-Type: application/json" \
  -d '{"productId":"abc","quantity":2}'

🧹 Cleanup

serverless remove

🧠 Decisiones técnicas

  • Se utilizó SQS para desacoplar el procesamiento y mejorar escalabilidad
  • Se eligió DynamoDB por su integración nativa con Lambda y escalabilidad automática
  • Se implementó DLQ para evitar pérdida de mensajes
  • Se usó correlationId para trazabilidad en un sistema distribuido

About

Orders Processing System (Event-Driven Architecture) - Sistema backend serverless basado en eventos utilizando AWS.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors