es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cuando configuro el tiempo de espera del trabajador en Gunicorn para la aplicación de Django, los otros usuarios no pueden acceder a la aplicación.

Tengo una aplicación de Django ejecutándose en Gunicorn y Nginx. Hay una solicitud en la aplicación que tarda 10 minutos en cargar la página [hay mucho datos para procesar], he aumentado el tiempo de trabajo a 1200 segundos para Gunicorn para que tome suficiente tiempo en cargar la página. Funciona bien, pero mientras se está procesando esa solicitud, otros usuarios no pueden acceder a la aplicación y muestra:

504 Gateway Time-out
nginx/1.21.4

Este es mi DOCKER

version: '3.8'

services:
  web:
    volumes:
      - static:/static
    command: python manage.py makemigrations && python manage.py migrate && python manage.py collectstatic --noinput && python manage.py crontab add && exec gunicorn DrDNAC.wsgi:application --bind 0.0.0.0:8000 --timeout 1200"
    build:
      context: .
    ports:
      - "8000:8000"
    depends_on:
      - db
  db:
    image: postgres:13.0-alpine
  nginx:
    build: ./nginx
    volumes:
      - static:/static
    ports:
      - "80:80"
    depends_on:
      - web

volumes:
  postgres_data:
  static:

Este es nginx:

upstream app {
    server web:8000;
}

server {
    listen 80;

    location / {
        proxy_pass https://app;
        proxy_connect_timeout 75s;
        proxy_read_timeout 300s;
    }
    location /static/ {
        alias /static/;
    }

}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Análisis

    Según la información proporcionada, parece que el problema es causado por el tiempo prolongado de respuesta de un usuario, lo que provoca que otros usuarios agoten el tiempo de espera al acceder a la aplicación. Aumentar el tiempo de trabajo de Gunicorn ha solucionado el procesamiento lento de esa solicitud específica, pero ha tenido un impacto en la disponibilidad general de la aplicación.

    Solución

    Un enfoque para resolver este problema sería optimizar la solicitud que tarda 10 minutos en cargarse. Considere implementar el procesamiento asíncrono, la paginación u optimizar las consultas de la base de datos para reducir el tiempo de procesamiento. Esto ayudaría a mejorar el rendimiento y evitar que los usuarios experimenten tiempos de espera al acceder a la aplicación.

    Otro enfoque sería considerar la implementación de un balanceador de carga para distribuir la carga de trabajo entre varios servidores. Esto ayudaría a mejorar la disponibilidad y manejar eficientemente altas demandas de tráfico.

    En cuanto a la configuración de Docker proporcionada, no parece haber ningún problema con ella. Sin embargo, con fines de depuración y monitoreo, sería útil implementar registros (logging) tanto en Gunicorn como en Nginx para comprender mejor cualquier posible cuello de botella de rendimiento.

    Conclusión

    En general, optimizar el rendimiento de la aplicación e implementar un balanceador de carga son dos enfoques que se podrían considerar para mejorar la disponibilidad de la aplicación y manejar eficientemente altas demandas de tráfico. Además, la implementación de registros (logging) ayudaría a identificar cualquier problema con la aplicación y respaldaría una depuración y monitoreo efectivos.

Comments are closed.