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ón

  • proyectos: Lógica central de negocios (contratos, estimaciones, contrapartes)

  • api: puntos finales de la API REST

  • core: Utilidades compartidas

  • account_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:

Documentación relacionada:

Descripción general completa:

Para obtener información detallada sobre la arquitectura con ejemplos de código y diagramas, consulte Arquitectura.