Curso odoo (Módulos)

11.1. Optimización de módulos

Cuando tu aplicación crece y se manejan grandes volúmenes de datos o muchos usuarios simultáneos, es importante cuidar el rendimiento. A continuación, algunos consejos y prácticas recomendadas:

  1. Indexación de campos en la base de datos

    • Si realizas búsquedas frecuentes sobre un campo (por ejemplo, un campo barcode o serial_number), puedes considerar crear un índice en la base de datos.
    • Esto se logra usando la propiedad index=True en la definición del campo o mediante la creación de índices a nivel SQL.
    1name = fields.Char(string='Name', index=True)
  2. Uso de métodos de lectura eficientes

    • Si solo necesitas unos cuantos campos de cada registro, utiliza search_read en lugar de realizar search() y luego un read(). Con search_read, todo ocurre en una única operación.
    • Para grandes listados, considera paginación (limit, offset) o usar read_group cuando requieras agregaciones.
  3. Campos calculados y decoradores

    • Si un campo se calcula muy frecuentemente, revisa si puedes almacenar el resultado (con store=True) para evitar recálculos innecesarios.
    • Verifica que los decoradores @api.depends incluyan solo los campos que realmente impactan el cálculo, de lo contrario se recalculará más de la cuenta.
  4. Prefetch y cache

    • Odoo hace un prefetch de campos para optimizar lecturas. Evita romper ese flujo haciendo lecturas campo por campo de manera aislada.
    • Si necesitas datos relativamente estables, considera usar mecanismos de cache propios, aunque con cautela para no mostrar datos obsoletos.
  5. Evitar bucles costosos

    • Cuando proceses muchos registros, intenta agrupar operaciones en lugar de iterar registro por registro con llamados repetidos a la base de datos.
    • Utiliza métodos en “bulk”. Por ejemplo, si necesitas actualizar un campo en miles de registros, busca un enfoque vectorizado (un solo write en un recordset grande) o un SQL directo si es estrictamente necesario.

11.2. Migración de módulos entre versiones

Odoo avanza con nuevas versiones cada año, introduciendo cambios en la API, en la estructura de modelos y en la interfaz. Para migrar tus módulos, ten en cuenta:

  1. Revisar los cambios en la API

    • Cada release mayor (por ejemplo, de Odoo 14 a Odoo 15) puede traer cambios en decoradores, modelos o parámetros de funciones.
    • Consulta la documentación oficial y las notas de release para ver qué métodos han sido deprecated o modificados.
  2. Scripts de actualización

    • Si necesitas transformar datos existentes (por ejemplo, un campo state que cambió a status), puedes preparar un script en tu módulo que, al actualizar, ejecute el reajuste en la base de datos.
    • Usa la función de post-instalación (post_init_hook) o un método Python que se ejecute justo después de la instalación o actualización del módulo.
  3. Pruebas exhaustivas

    • Antes de llevar la migración a producción, haz pruebas en una copia de la base de datos real.
    • Ejecuta todos los tests que tengas definidos y revisa los registros críticos para confirmar que la información se ha migrado correctamente.
  4. Uso de OpenUpgrade

    • La comunidad OCA mantiene la herramienta OpenUpgrade, que facilita las migraciones entre versiones grandes, aplicando parches y scripts ya preparados para módulos estándar.
    • Para módulos personalizados, igual se requiere trabajo manual adaptando tu código, pero OpenUpgrade puede ayudar con la conversión de datos “core”.

11.3. Despliegue en producción

El despliegue consiste en configurar todo el entorno para que tu aplicación de Odoo sea accesible y estable para los usuarios. Entre los puntos principales:

  1. Configuración de base de datos en PostgreSQL

    • Asigna recursos adecuados (memoria, conexiones, etc.).
    • Crea un usuario y base de datos dedicados para Odoo con privilegios específicos.
    • Ajusta parámetros en postgresql.conf (por ejemplo, shared_buffers, work_mem) si tu servidor tiene muchas conexiones concurrentes.
  2. Archivo de configuración odoo.conf

    • Define el puerto, la ruta de los módulos, y los parámetros de la base de datos.
    • Ajusta workers y limit_* según la carga esperada.
      • workers: número de procesos que manejarán peticiones concurrentes.
      • limit_memory_hard, limit_memory_soft: control de uso de memoria.
      • limit_request: límite de requests por worker para prevenir fugas de memoria.
  3. Servidores web y balanceadores

    • Normalmente se coloca Nginx o Apache como proxy inverso frente a Odoo:
      • Permite usar HTTPS (certificados SSL) y manejar la compresión, cacheo, etc.
      • Facilita la administración de múltiples servicios en el mismo servidor.
    • En entornos con alta demanda, se usa un balanceador (como HAProxy) para distribuir el tráfico a varios servidores Odoo (scalabilidad horizontal).
  4. Mantenimiento y actualización de módulos

    • Prepara un flujo de CI/CD (Integración Continua / Despliegue Continuo) si es viable, para testear y desplegar automáticamente los cambios.
    • Mantén una política de backups frecuentes de la base de datos.
    • En caso de actualizaciones, programa ventanas de mantenimiento y comunica a los usuarios los posibles tiempos de inactividad.
  5. Monitoreo y logging

    • Implementa herramientas de monitoreo como Grafana, Prometheus o similares para rastrear métricas (CPU, RAM, solicitudes por segundo, tiempos de respuesta, etc.).
    • Configura logs de errores y logs de acceso para detectar incidencias.
    • Analiza periódicamente los cuellos de botella y planifica mejoras.

Conclusión de la Parte 11

  1. Optimización de módulos: Aprovecha índices, uso eficiente de métodos (bulk operations, read_group, etc.), campos calculados almacenados y evita bucles costosos.
  2. Migración de versiones: Consulta los cambios de la API en cada release, prepara scripts de actualización para transformar datos y ejecuta pruebas en un entorno de staging.
  3. Despliegue en producción: Ajusta PostgreSQL y odoo.conf, configura Nginx o Apache como proxy inverso, define un flujo de actualización y backups, y mantén un sistema de monitoreo y logs para detectar problemas temprano.

Con estos conceptos, estarás en condiciones de gestionar de manera profesional tanto el rendimiento como la estabilidad de tus módulos en entornos de producción. En la siguiente parte (y última, la Parte 12), presentaremos ejemplos de proyectos prácticos para consolidar todo lo aprendido hasta ahora. ¡Continuemos!

  • Loading...