Os processos de trabalho dos aplicativos Web devem ser colocados em contêineres separados?

8

Minha configuração é baseada em um aplicativo Flask que possui um banco de dados PostgreSQL e Redis. Além disso, um processo de trabalho é iniciado para lidar com tarefas assíncronas, como o envio de emails. Eu uso o Gunicorn para criar vários processos de aplicativos. A passagem de tarefas dos processos do aplicativo para o processo do trabalhador é feita via Redis.

A questão é: o processo de trabalho deve ser iniciado em um contêiner separado, apesar de ser baseado no mesmo código? Atualmente, uso um script de início com o bit relevante:

gunicorn --bind=0.0.0.0:8000 --workers=3 manage:app &
python -u manage.py run_worker

Além disso, se eles devem ser separados, como posso garantir que eles reutilizem o contêiner do sistema de arquivos comum? Além disso, ao dimensionar o Gunicorn com o aplicativo principal ou com os processos de trabalho, instâncias adicionais do contêiner devem ser criadas ou o número de processos em um contêiner deve ser aumentado?

Relacionado: Quais são as vantagens de dockerizing nginx e php em diferentes contêineres?

Moritz
fonte

Respostas:

6

Só consigo pensar em um caso em que a sobrecarga de trabalhadores em execução em contêineres separados é justificada: se a sua instalação usa enxame de encaixe para implantação em cluster. Dessa forma, você obterá todos os benefícios da HA.

Caso contrário, não vejo motivo para complicar essas tarefas, especialmente se elas devem usar estritamente a mesma base de código (o que me leva a acreditar que eles compartilham um domínio de preocupações, por assim dizer). Pode parecer elegante, mas não vejo benefícios suficientes

ps qualquer divisão desse tipo forçará você a gerenciar a interconexão e complicar a instalação para o desenvolvimento local

Wintermute
fonte
Eu acho que a complexidade pode ser bem tratada no meu caso, já que eu uso o docker-compondo. No entanto, seu argumento é válido, já que a carga atualmente pode ser manipulada com uma única instância e não há necessidade de tornar as coisas mais complexas do que precisam.
Moritz