💳 Escalabilidad ante Picos Altos de Transacciones

Este documento detalla estrategias técnicas para manejar picos altos de transacciones en tu proyecto de billetera digital, indicando los componentes afectados y qué se debe mejorar o cambiar en cada uno.

Las mejoras propuestas contemplan:

🛠 Componente 🔧 Qué se debe mejorar / cambiar
TransactionService
  • 📦 Desacoplar lógica de recepción y procesamiento usando colas (AWS SQS).
  • ⚡ Hacer procesamiento asíncrono para no bloquear el endpoint principal.
  • ⏱ Reducir tiempo dentro de transacciones de DB, mover cálculos de balance fuera de BEGIN…COMMIT.
  • 🔄 Implementar batching de transacciones para actualizaciones de saldo e inserciones en la tabla transactions.
PostgresRepository
  • 📊 Crear índices compuestos en transactions(user_id, timestamp) y users(user_id) para acelerar consultas.
  • 🗂 Considerar particionamiento o sharding de la tabla transactions por rango de fechas o user_id para alta concurrencia.
  • 💾 Integrar caching de balances recientes (Redis / ElastiCache) para reducir carga en consultas de getUserBalance().
  • 🛠 Optimizar queries SQL, evitar subconsultas innecesarias y usar VACUUM ANALYZE periódicamente.
Node.js Backend / API
  • 🖥 Escalamiento horizontal: permitir múltiples instancias de API (ECS/EC2) detrás de ELB.
  • ⚖️ Configurar ELB para distribuir la carga y realizar health checks a cada instancia.
  • 🚦 Implementar throttling/rate limiting por usuario para proteger endpoints críticos.
  • 🔗 Connection pooling con pg.Pool bien configurado para manejar conexiones concurrentes a Postgres.
AWS Infrastructure
  • 🚀 Auto Scaling Group para instancias EC2/ECS según métricas de CPU, memoria o requests por segundo.
  • 💾 Integración de Redis/ElastiCache para caching y reducción de latencia de queries frecuentes.
  • 📩 Uso de SQS para desacoplar procesamiento de transacciones y evitar saturación del backend.
  • 📊 CloudWatch / Grafana / Prometheus para monitoreo de latencia, throughput y alertas ante picos de tráfico.
Frontend (React)
  • 🌐 Implementar polling o WebSockets para mostrar saldos actualizados sin generar demasiadas consultas simultáneas a la API.
  • 💡 Optimizar llamadas a endpoints críticos, usar caching local o state management (Redux / Zustand) para evitar exceso de requests.