Eu tenho um servidor que executa um aplicativo Django servido por gunicorn e uma fila de tarefas do Celery.
Gunicórnioos documentos sugerem(2 x $num_cores) + 1 como o número padrão de trabalhadores.
Documentos de aipomostre que o número de trabalhadores do Celery é padronizado como 1 x $num_cores.
E ambos sugerem experimentar para encontrar o número adequado.
Minha pergunta é: qual seria uma boa regra para executar o Gunicorn e o Celery na mesma máquina? Em uma máquina de oito núcleos, devo começar com 17 trabalhadores Gunicorn e 8 trabalhadores Celery? Ou faria sentido começar com, digamos, 9 trabalhadores Gunicorn e 4 Celery?
O sistema está vinculado à CPU, caso isso ajude.
Responder1
Qualquer tipo de ajuste de desempenho costuma ser mais suave do que regras rígidas e rápidas. Recentemente tive que fazer algo semelhante com meu aplicativo Django que alguém decidiu abusar. Ao executar o Gunicorn e o Celery na mesma máquina, o ideal é começar com uma abordagem mais equilibrada, em vez de maximizar os trabalhadores do Gunicorn. Esta é a minha abordagem:
Trabalhadores Gunicórnio:
- Comece com um número ligeiramente menor de trabalhadores Gunicorn usando a fórmula: 2 * $num_cores + 1
- Para uma máquina de 8 núcleos, você pode começar com 8 a 12 trabalhadores Gunicorn
- O raciocínio por trás disso é que você deseja ter certeza de que ainda restam alguns recursos de CPU para os trabalhadores do Celery, pois as tarefas do Celery podem consumir muito a CPU.
Trabalhadores de aipo:
- Você pode usar o número 'recomendado' de trabalhadores do Celery
- Pode ser definido como 1 * $num_cores
- Para uma máquina de 8 núcleos, você pode começar com 8 trabalhadores Celery, por exemplo.
Portanto, em uma máquina de 8 núcleos, uma boa configuração inicial poderia ser assim:
- Gunicórnio: 8-12 trabalhadores
- Aipo: 8 trabalhadores
O objetivo é não sobrecarregar os trabalhadores do Gunicorn, deixando os recursos da CPU pelo menos para os trabalhadores do Celery.