Resumen del Proyecto
Sistema de Gestión de Órdenes Basado en Eventos
Plataforma de comercio electrónico distribuida que gestiona el ciclo de vida completo de órdenes de compra con garantías de consistencia eventual en un entorno de microservicios.
Problema Resuelto
- •Gestión del ciclo de vida completo de órdenes de compra
- •Consistencia eventual en entorno de microservicios
- •Comunicación confiable entre servicios descentralizados
- •Compensación distribuida ante fallos
- •Auditabilidad completa del sistema de pedidos
Arquitectura del Sistema
Order Service
API + Workers
Gestión de órdenes, Event Sourcing, Outbox Worker
Inventory Service
Event Consumer
Reservas de stock, gestión de inventario
Payment Service
Event Consumer
Procesamiento de pagos, validación
REST API
Express + TSOA
HTTP endpoints para clientes
outbox-worker
Worker
Publica eventos del outbox a RabbitMQ
router.ts
Event Router
Enruta eventos usando Consistent Hashing
workers
Partitioned Workers
Procesan eventos de órdenes
Patrones de Diseño Implementados
Event Sourcing
Almacena el estado como secuencia de eventos en lugar de estado actual
Outbox Pattern
Publica eventos de forma confiable usando tabla outbox
Saga (Coreografía)
Orquestación distribuida mediante mensajes entre servicios
Deduplicación
Prevención de procesamiento duplicado con Redis
Consistent Hashing
Distribución uniforme de eventos entre workers
Infraestructura AWS
Componentes de Infraestructura AWS
services-cluster
ECS Cluster
t3.micro • ASG: 1-2
rabbitmq-cluster
ECS Cluster
t3.micro • Fixed: 1
order-service
ECS Service
Port: 3000 • Public-facing
inventory-service
ECS Service
Internal • Event Consumer
payment-service
ECS Service
Internal • Event Consumer
rabbitmq
ECS Service
Ports: 5672/15672 • Message Broker
ALB
Application Load Balancer
Port: 80/443
VPC
Virtual Private Cloud
AZ A
Service Connect
Cloud Map
commerce-platform.local
order-service-db
RDS PostgreSQL
db.t3.micro • 20GB
inventory-service-db
RDS PostgreSQL
db.t3.micro • 20GB
payment-service-db
RDS PostgreSQL
db.t3.micro • 20GB
Redis
ElastiCache
cache.t3.micro • Port: 6379
Security Groups
5 groups
order-svc, rabbitmq, rds, redis, common
KMS
Key Management
RDS + SSM encryption
ECR
Container Registry
3 repos
CloudWatch Logs
Logging
Log groups per service
SSM Parameter Store
Secrets
DATABASE_URL, Redis, RabbitMQ
IAM Roles
ECS Roles
Task Execution + Task Roles
Flujos de Datos
Decisiones de Diseño y Trade-offs
Consideraciones de Seguridad
Autenticación
No se observa JWT, API keys, ni OAuth
Mitigación: Implementar JWT tokens, API keys
Autorización
Cualquier cliente puede consultar cualquier orden
Mitigación: Autorización por customerId
Gestión de Secretos
DATABASE_URL
AWS SSM
RabbitMQ credentials
AWS SSM
Redis URL
AWS SSM
Vulnerabilidades Identificadas
Data exposure
Mitigación: Filtrar respuestas HTTP
SQL Injection
Mitigación: Queries parametrizadas
Rate limiting
Mitigación: API Gateway rate limit
Limitaciones y No-Objetivos
Lo que el Sistema NO Hace
Autenticación/Autorización
Cualquier cliente puede acceder a cualquier recurso
Catálogo de productos
Asume productId existentes
Gestión de usuarios
Asume customerId existentes
Notificaciones (email/SMS)
Podría extenderse con webhook
Reporting/Analytics
Requiere proyecciones adicionales
Restricciones Técnicas
Workers fijos (2 particiones)
Throughput limitado, requiere reconfiguración
Polling 5s en Outbox
Latencia mínima de 5s para eventos
PostgreSQL single-node
Punto único de fallo en persistencia
Event Store crece indefinidamente
Requiere estrategia de archivado