Skip to content

Conversation

@arodriguez1996
Copy link

La solución implementa una arquitectura basada en microservicios con NestJS y Apache Kafka, diseñada para manejar el flujo de transacciones financieras de forma desacoplada, escalable y confiable.

El primer microservicio (trx-microservice) recibe y crea transacciones, publicando eventos en Kafka, mientras que el segundo (anti-fraud-microservice) consume dichos eventos, aplica reglas de validación sobre el monto de la transacción y emite nuevos eventos de aprobación o rechazo, para mayor escalabilidad en el proceso completo ej. Otros microservicios pueden consumir el evento de aprobación para notificar al usuario o debitar de su cuenta de ahorros.

La principal base de datos es con Postgres, y toda la comunicación entre ellos se realiza de forma asíncrona mediante Kafka, siguiendo los principios de Clean Architecture y CQRS (Command Query Responsibility Segregation) para separar la lógica de comandos, consultas y eventos.

⚙️ Tecnologías principales
• NestJS → Framework backend modular y escalable.
• CQRS → Separación entre comandos, consultas y eventos.
• Apache Kafka → Sistema de mensajería distribuida para comunicación asíncrona.
• PostgreSQL → Persistencia de datos transaccionales.
• Docker & Docker Compose → Orquestación y contenedorización de microservicios.
• TypeORM → ORM para interacción con PostgreSQL.
• Node.js 22 (Alpine) → Entorno base ligero y moderno.

🚀 Next Steps
• Implementar el Outbox Pattern en ambos microservicios para garantizar la entrega confiable de eventos y evitar inconsistencias entre las transacciones de base de datos y los mensajes enviados a Kafka.
• Agregar un mecanismo de retry/backoff para la publicación de eventos fallidos.
• Incluir un Inbox Pattern en el servicio consumidor para asegurar idempotencia en los eventos procesados.
• Incorporar monitoring (Datadog / Prometheus / Grafana) para métricas y trazabilidad de eventos Kafka.

Estuvo muy divertido el reto! 🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant