Arquitectura del Sistema β
Diagrama de Contexto (C4 - Nivel 1) β
mermaid
C4Context
title Diagrama de Contexto - Aulix SAAS
Person(user, "Usuario", "Usuario de la plataforma")
Person(admin, "Administrador", "Administrador del sistema")
System(aulix, "Aulix SAAS", "Sistema principal")
System_Ext(email, "Servicio de Email", "SendGrid/AWS SES")
System_Ext(payment, "Pasarela de Pago", "Stripe")
System_Ext(storage, "Almacenamiento", "AWS S3")
Rel(user, aulix, "Usa")
Rel(admin, aulix, "Administra")
Rel(aulix, email, "EnvΓa emails")
Rel(aulix, payment, "Procesa pagos")
Rel(aulix, storage, "Almacena archivos")Diagrama de Contenedores (C4 - Nivel 2) β
mermaid
C4Container
title Diagrama de Contenedores - Aulix SAAS
Person(user, "Usuario", "Usuario final")
Container_Boundary(aulix, "Aulix SAAS") {
Container(spa, "Frontend", "React/Vue", "AplicaciΓ³n SPA")
Container(api, "API Backend", "Node.js/Python", "API REST/GraphQL")
Container(worker, "Workers", "Node.js", "Jobs en background")
ContainerDb(db, "Base de Datos", "PostgreSQL", "Datos del sistema")
ContainerDb(cache, "Cache", "Redis", "Sesiones y cache")
}
Rel(user, spa, "Usa", "HTTPS")
Rel(spa, api, "Consume", "HTTPS/JSON")
Rel(api, db, "Lee/Escribe")
Rel(api, cache, "Lee/Escribe")
Rel(worker, db, "Lee/Escribe")Arquitectura de Alto Nivel β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CLIENTE β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β Web App β β Mobile App β β CLI/API β β
β ββββββββ¬βββββββ ββββββββ¬βββββββ ββββββββ¬βββββββ β
βββββββββββΌβββββββββββββββββΌβββββββββββββββββΌββββββββββββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β LOAD BALANCER β
β (Nginx / AWS ALB) β
βββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββ
β API GATEWAY β
β ββββββββββββββ βββββββββββββββββββ ββββββββββββββββββ β
β β Auth β β Rate Limit β β Logging β β
β ββββββββββββββ βββββββββββββββββββ ββββββββββββββββββ β
βββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββ
β SERVICIOS β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β
β β Auth β β Users β β [Core] β β Payments β β
β β Service β β Service β β Service β β Service β β
β ββββββ¬ββββββ ββββββ¬ββββββ ββββββ¬ββββββ ββββββ¬ββββββ β
βββββββββΌββββββββββββββΌββββββββββββββΌββββββββββββββΌββββββββββββββββ
β β β β
βββββββββΌββββββββββββββΌββββββββββββββΌββββββββββββββΌββββββββββββββββ
β βΌ βΌ βΌ βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β BASE DE DATOS β β
β β (PostgreSQL) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β ββββββββββββββββββββ ββββββββββββββββββββ β
β β Redis β β File Storage β β
β β (Cache/Queue) β β (AWS S3) β β
β ββββββββββββββββββββ ββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββStack TecnolΓ³gico β
Frontend β
| TecnologΓa | Uso |
|---|---|
| React/Vue/Angular | Framework principal |
| TypeScript | Tipado estΓ‘tico |
| TailwindCSS | Estilos |
| Vite | Build tool |
Backend β
| TecnologΓa | Uso |
|---|---|
| Node.js / Python | Runtime |
| Express / FastAPI | Framework |
| PostgreSQL | Base de datos |
| Redis | Cache y colas |
Infraestructura β
| TecnologΓa | Uso |
|---|---|
| Docker | ContainerizaciΓ³n |
| Kubernetes / ECS | OrquestaciΓ³n |
| AWS / GCP | Cloud provider |
| GitHub Actions | CI/CD |
Decisiones de Arquitectura (ADRs) β
ADR-001: Arquitectura de Microservicios vs Monolito β
Contexto: Necesitamos decidir la arquitectura inicial.
DecisiΓ³n: Comenzar con un monolito modular para el MVP.
Razones:
- Menor complejidad inicial
- MΓ‘s rΓ‘pido de desarrollar
- FΓ‘cil de refactorizar a microservicios despuΓ©s
Consecuencias:
- CΓ³digo bien organizado en mΓ³dulos
- Preparar interfaces para futura separaciΓ³n