¿Deberían colocarse los procesos de trabajo de las aplicaciones web en contenedores separados?

8

Mi configuración se basa en una aplicación Flask que tiene una base de datos PostgreSQL y Redis. Además, se inicia un proceso de trabajo para manejar tareas asincrónicas como el envío de correos electrónicos. Yo uso Gunicorn para crear múltiples procesos de aplicación. La transferencia de trabajos desde los procesos de la aplicación al proceso de trabajo se realiza a través de Redis.

La pregunta es, ¿debería iniciarse el proceso de trabajo en un contenedor separado a pesar de estar basado en el mismo código? Actualmente uso un script de inicio con el bit relevante:

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

Además, si se van a separar, ¿cómo puedo asegurarme de que reutilicen el contenedor del sistema de archivos común? Además, al escalar Gunicorn con la aplicación principal o los procesos de trabajo, ¿deberían crearse instancias adicionales del contenedor o aumentarse el número de procesos dentro de un contenedor?

Relacionado: ¿Cuáles son las ventajas de dockerizar nginx y php en diferentes contenedores?

Moritz
fuente

Respuestas:

6

Solo se me ocurre un caso en el que se justifica la sobrecarga de los trabajadores en ejecución en contenedores separados: si su configuración utiliza el enjambre Docker para la implementación en clúster. De esta manera obtendrá todos los beneficios de HA.

De lo contrario, no veo una razón para complicar tales tareas, especialmente si deben usar estrictamente la misma base de código (lo que me lleva a creer que comparten un dominio de preocupaciones, por así decirlo). Puede parecer elegante, pero simplemente no veo suficientes beneficios

ps cualquier división de este tipo lo obligará a administrar la interconexión y complicará la configuración para el desarrollo local

Wintermute
fuente
Supongo que la complejidad se puede manejar bien en mi caso, ya que ya uso docker-compose. Sin embargo, su punto es válido ya que la carga actualmente se puede manejar con una sola instancia y no hay necesidad de hacer más cosas complejas de lo que tienen que ser
Moritz