es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo calcular de forma incremental `sha256` para un archivo que se carga en varias instancias de servidor?

Quiero proporcionar una API de carga de archivos que admita la carga de un archivo grande mediante múltiples solicitudes HTTP. Las solicitudes pueden ir a diferentes servidores, pero no quiero que todo el archivo se copie en todos esos servidores: deben aceptar el fragmento del archivo y enviarlo a otro servicio, pero de alguna manera necesito obtener el checksum SHA256 de las partes individuales antes de eso.

En Python, sé que hashlib puede llamar a update para calcular la firma sha256 paso a paso, pero eso obviamente requiere que los pasos se ejecuten en el mismo proceso de Python.

¿Alguien podría ayudarme a descubrir cómo continuar calculando sha256 durante las solicitudes HTTP para un archivo grande cuando las partes no están todas disponibles para la misma instancia de Python al mismo tiempo?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una aproximación para resolver este problema es utilizar una técnica llamada “carga en streaming”. En esta aproximación, el cliente divide el archivo en partes más pequeñas (por ejemplo, 10 MB) y envía cada parte al servidor por separado. El servidor calcula el hash SHA256 de cada parte utilizando hashlib y envía la parte a otro servicio. El otro servicio puede ensamblar las partes en el archivo original y calcular el hash SHA256 del archivo completo.

    Para calcular el hash SHA256 de cada parte, puedes crear un objeto hashlib.sha256() en el servidor, actualizarlo con los datos de la parte utilizando el método update() y luego utilizar el método hexdigest() para obtener el valor del hash. Luego puedes enviar este valor junto con los datos de la parte al otro servicio.

    Un problema potencial con esta aproximación es que si un servidor falla o se desconecta, el cliente tendría que reenviar las partes de las que el servidor era responsable. Para evitar este problema, puedes utilizar una tabla hash distribuida (DHT) para almacenar los hashes SHA256 de cada parte junto con el servidor que es responsable de ella. De esta manera, si un servidor falla, el cliente puede recuperar la lista de partes faltantes de la DHT y reenviarlas a un servidor diferente.

    En general, implementar una API de carga de archivos que admita la carga de archivos grandes mediante múltiples solicitudes HTTP es una tarea compleja que requiere considerar cuidadosamente numerosos factores, como seguridad, confiabilidad, escalabilidad y rendimiento. El uso de las técnicas descritas anteriormente puede ayudarte a lograr una solución robusta y eficiente.

Comments are closed.