Tengo un servidor que ejecuta una aplicación Django servida por gunicorn y una cola de tareas de Celery.
gunicorniolos documentos sugieren(2 x $num_cores) + 1 como número predeterminado de trabajadores.
Docs de apiomuestre que el número de trabajadores de Apio por defecto es 1 x $num_cores.
Y ambos sugieren experimentar para encontrar el número adecuado.
Mi pregunta es, ¿cuál sería una buena regla general para ejecutar Gunicorn y Celery en la misma máquina? En una máquina de ocho núcleos, ¿debería comenzar con 17 trabajadores Gunicorn y 8 Celery? ¿O tendría sentido comenzar con, digamos, 9 trabajadores Gunicorn y 4 Celery?
El sistema está vinculado a la CPU, en caso de que eso ayude.
Respuesta1
Cualquier tipo de ajuste del rendimiento suele ser más sencillo que las reglas estrictas y rápidas. Recientemente tuve que hacer algo similar con mi aplicación Django y alguien decidió abusar de ella. Cuando ejecuta Gunicorn y Celery en la misma máquina, lo ideal sería comenzar con un enfoque más equilibrado en lugar de maximizar los trabajadores de Gunicorn. Este es mi enfoque:
Trabajadores Gunicornio:
- Comience con un número ligeramente menor de trabajadores Gunicorn usando la fórmula: 2 * $num_cores + 1
- Para una máquina de 8 núcleos, puedes comenzar con entre 8 y 12 trabajadores Gunicorn.
- El razonamiento detrás de esto es que desea asegurarse de que todavía queden algunos recursos de CPU para los trabajadores de Celery, ya que las tareas de Celery pueden consumir mucha CPU.
Trabajadores del apio:
- Puedes utilizar el número 'recomendado' de trabajadores de Apio
- Se puede definir como 1 * $num_cores
- Para una máquina de 8 núcleos, puedes comenzar con 8 trabajadores de Apio, por ejemplo.
Por lo tanto, en una máquina de 8 núcleos, una buena configuración inicial podría ser la siguiente:
- Gunicorn: 8-12 trabajadores
- Apio: 8 trabajadores
El objetivo es no abrumar a los trabajadores de Gunicorn, dejar los recursos de la CPU al menos para los trabajadores de Celery.