Buenas, en primer lugar no soy desarrollador profesional, así que es probable que alguna de las suposiciones que hago sean erroneas
Quiero escalar una aplicación web que he desarrollado, pero no tengo ni idea de cómo hacerlo. Digamos que la aplicación es un front al que el usuario accede, introduce unos datos, y eso envía una task a un worker, que la ejecuta. Esta task puede durar poco (5min) o mucho (10h+).
La web en sí consume muy pocos recursos, lo que consume son los workers, ya que ejecutan tareas de ffmpeg (codificar vídeo). Si los workers están idle, consumen poco, si están activos, consumen mucha cpu. Ejecuto 6 porque sé que es todo lo que soporta mi hardware.
Ahora mismo la tengo deployeada con docker en una máquina mía. Tengo varios servicios (servidor web con flask, BBDD, redis, 6 workers).
El caso es que me gustaría poder convertir esto de un proyecto personal a algo más serio, que pudiera utilizar más gente. El problema es que no sé cómo afrontar la variabilidad de demanda que podría tener.
Una situación ideal, creo, sería que el número de workers escalase de forma variable según los usuarios vayan demandando, y que también escalase hacia abajo cuando hubiera workers idle para que los costes no se disparen, obviamente.
Creo que para esto podría utilizarse algo como k8s, pero no sé si es matar moscas a cañonazos y si será tremendamente complicado. Lo que no acabo de entender es si se puede conectar estos tres niveles para que se comuniquen entre ellos: nivel app (cuando un usuario entra y manda una nueva task), nivel contenedor (que la app pueda "pedir" que se cree un contenedor nuevo) y nivel infraestructura (que el contenedor se genere automáticamente en una instancia nueva de EC2 y que se destruya al terminar la tarea).
Nombres de servicios que he mirado:
AWS ECS
AWS Fargate
k8s
Docker Swarm (he leído que el escalado es manual, no se puede automatizar)
Creo que con una combinación de ECS + Fargate podría poner los contenedores de los workers, pero sigo sin saber cómo sabe la aplicación que necesita provisionar más workers.
También he estado mirando Auto Scaling de EC2, pero no sé bien si es lo que busco.
Necesitaría que toda esa infraestructura que se genera cuando hay necesidad de workers, desapareciera si no la hay, para ahorrar costes. Puede que en ocasiones tuviera necesidad de 50 workers a la vez, y en otras ocasiones que necesitase 0.
Muchas gracias