Descripción general#
Arquitectura del sistema de alto nivel de Construbot.
Nota
Esta página proporciona una descripción general rápida. Para obtener documentación completa sobre la arquitectura con diagramas y ejemplos de código, consulte el Arquitectura.
Arquitectura del sistema#
Construbot sigue una arquitectura estándar Django MTV (Modelo-Plantilla-Vista) con capas adicionales para API, tareas en segundo plano y almacenamiento en caché.
Componentes principales#
Capa web:
Nginx: proxy inverso, terminación SSL, servicio de archivos estáticos
Gunicorn: servidor WSGI que ejecuta Django
Capa de aplicación:
Django 3.2.19: marco web
Marco REST de Django: capa API
Lógica empresarial personalizada en aplicaciones
Capa de datos:
PostgreSQL: base de datos primaria
Redis: almacenamiento en caché y intermediario de mensajes
S3: Almacenamiento de archivos multimedia (producción)
Procesamiento en segundo plano:
Apio: cola de tareas asincrónicas
Redis: intermediario de mensajes
Patrones de diseño clave#
Multi-inquilino:
Jerarquía de tres niveles (Cliente → Empresa → Usuario) con aislamiento de datos en el ámbito de la empresa.
Datos Jerárquicos:
Estructuras de árbol que utilizan django-treebeard para contratos con relaciones padre/hijo.
Autenticación por correo electrónico:
Backend de autenticación personalizado mediante correo electrónico en lugar de nombre de usuario.
Niveles de permiso:
Sistema de permisos de seis niveles (Auxiliar a Superusuario) para un control de acceso detallado.
Pila de tecnología#
Servidor:
Django 3.2.19 (Python 3.9.17+)
├── PostgreSQL 12+ (Database)
├── Redis 6+ (Cache/Queue)
├── Celery 5.2.7 (Tasks)
└── DRF 3.13.1 (API)
Bibliotecas clave:
django-treebeard: modelos jerárquicos
django-allauth: autenticación
reportlab: generación de PDF
openpyxl: importación/exportación de Excel
SimpleJWT: autenticación API
Estructura de la aplicación#
Aplicaciones principales:
usuarios: Gestión de usuarios, empresas, autenticaciónproyectos: Lógica central de negocios (contratos, estimaciones, contrapartes)api: puntos finales de la API RESTcore: Utilidades compartidasaccount_config: Configuración de la empresa
Configuración:
Configuraciones divididas por entorno (base, local, prueba, producción) en construbot/config/settings/.
Consulte Estructura de configuración para obtener más detalles.
Flujo de datos#
Solicitud web:
User → Nginx → Gunicorn → Django → PostgreSQL
↓
Redis (Cache)
Solicitud de API:
Client → Nginx → Gunicorn → DRF (JWT Auth) → PostgreSQL
Tarea en segundo plano:
Django → Celery (via Redis) → Worker → Execute Task
Modelo multiinquilino#
Jerarquía:
class Customer(models.Model):
# Top-level account
nombre = models.CharField(max_length=200)
class Company(models.Model):
# Business entity under customer
customer = models.ForeignKey(Customer)
nombre = models.CharField(max_length=200)
class User(AbstractUser):
# Individual user
companies = models.ManyToManyField(Company)
active_company = models.ForeignKey(Company)
Todos los datos comerciales (contratos, estimaciones, etc.) están dirigidos a la Empresa:
class Contrato(models.Model):
company = models.ForeignKey(Company) # Required
# ... other fields
Consulte Multi-inquilino para obtener detalles completos.
Arquitectura de seguridad#
Autenticación:
Inicio de sesión basado en correo electrónico (sin nombres de usuario)
Basado en sesiones para web
Tokens JWT para API
Autorización:
Es necesario iniciar sesión para todas las vistas
Comprobaciones de nivel de permiso
Acceso a datos del ámbito de la empresa
Protección de datos:
HTTPS/SSL en producción
protección CSRF
Cookies seguras (HttpOnly, banderas seguras)
Validación y desinfección de entradas
Consulte autenticación para obtener más detalles.
Estrategia de desempeño#
Base de datos:
Agrupación de conexiones
Optimización de consultas (select_relacionada, prefetch_relacionada)
Transacciones atómicas
Almacenamiento en caché:
back-end de caché de Redis
Almacenamiento en caché por vista
Almacenamiento en caché de fragmentos de plantilla
Almacenamiento en caché de resultados de consultas
Archivos estáticos:
WhiteRuido para servir
Compresión Gzip/Brotli
CDN para mucho tráfico
Tareas en segundo plano:
Apio para operaciones asíncronas
Envío de correo electrónico
generación de PDF
Tareas programadas
Escalabilidad#
Escala vertical:
Incrementar los recursos del servidor (CPU, RAM, almacenamiento).
Escala horizontal:
Equilibrador de carga (ALB/Nginx)
Múltiples servidores de aplicaciones
Base de datos administrada con réplicas de lectura (RDS)
Caché externo (ElastiCache)
S3 para archivos multimedia
El diseño sin estado permite un fácil escalado horizontal.
Desarrollo vs Producción#
Desarrollo:
SQLite o PostgreSQL local
Redis locales
DEPURACIÓN = Verdadero
Django sirve archivos estáticos
Backend de correo electrónico de consola
Producción:
PostgreSQL (se recomienda RDS)
Redis (se recomienda ElastiCache)
DEPURACIÓN = Falso
WhiteNoise/CDN para archivos estáticos
Servicio de correo electrónico de producción (Mailgun/SES)
Sentry para seguimiento de errores
Consulte Instalación y Despliegue.
Lectura adicional#
Detalles de arquitectura:
Estructura de configuración - Settings organization
Multi-inquilino - Multi-tenant design
Autenticación - Auth system
Niveles de permiso - Permission system
Esquema de base de datos - Database design
Estructura de URL - URL routing
Documentación relacionada:
Instalación - Development setup
Despliegue - Production deployment
API - API documentation
Modelos - Data models
Descripción general completa:
Para obtener información detallada sobre la arquitectura con ejemplos de código y diagramas, consulte Arquitectura.