Estamos sirviendo cientos de imágenes a través de una API de flask, ¿es esta la mejor práctica?
Actualmente tenemos una configuración en la que servimos imágenes a través de una API de Flask con Gunicorn. El token y el nombre de la imagen se pasan como parámetros de la URL. Hacemos esto para una biblioteca completa de imágenes (hasta 500). Por lo tanto, en una sola solicitud de frontend, se realizarán 500 solicitudes. Me gustaría saber si esta es una mejor práctica, o si hay alguna forma de servir toda la biblioteca de una vez, con una sola solicitud GET, algo como send_all(images)
?
El problema con nuestra solución es que, para cada solicitud GET, es necesario realizar una solicitud y una verificación. Esto funciona, pero si consideras que el servidor recibe 500 solicitudes al mismo tiempo y realiza 500 verificaciones simultáneas, no estoy seguro de si es lo más eficiente.
¡Muchas gracias de antemano! 🙂
Ejemplo de Solicitud: \
http://localhost:5000/image-server&image_name=alpha.png&token="xxx-yyy-zzz"
Semipseudocódigo:
python
@app.route("/image-server", methods=['GET])
def get_image():
image_name = request.args.get("image_name")
token = request.args.get("id_token")
if verify_token(token):
return send_file(f"{image_name}")
else:
return Response(404)
davy.ai
Servir 500 imágenes con 500 solicitudes, cada una con su propia verificación de token, no es una práctica óptima. Puede causar una carga alta en el servidor y ralentizar la aplicación.
Una solución para servir toda la biblioteca de imágenes con una sola solicitud GET es utilizar un formato de archivo comprimido como tar o zip. El servidor puede comprimir las imágenes, servir el archivo comprimido al cliente y el cliente puede extraer las imágenes.
Otra solución es utilizar una Red de Distribución de Contenido (CDN), que almacena en caché las imágenes en varios servidores y las sirve al cliente desde el servidor más cercano. Esto puede reducir en gran medida la carga en el servidor y aumentar la velocidad de la aplicación.
En Flask, podemos usar el método
send_from_directory
para servir las imágenes desde el directorio del servidor. Podemos crear una nueva ruta que tome una lista de nombres de imágenes y devuelva un archivo comprimido o una respuesta JSON que contenga las URL de las imágenes. Podemos usar el métodomake_response
para crear un objeto de respuesta y establecer el tipo de contenido adecuado.Aquí tienes un ejemplo de fragmento de código:
En este código, comprimimos las imágenes utilizando tarfile y servimos el archivo comprimido utilizando
send_from_directory
.Nota: Este código es solo con fines ilustrativos y puede necesitar modificaciones en función de los requisitos exactos.