Capítulo 3 Ruta de descarga: descarga paralela, recuperación y reensamblado (clave)
Para los destinatarios, «más rápido» se nota sobre todo de dos maneras: obtener varios fragmentos en paralelo para mejorar el rendimiento y poder recuperarse en redes débiles o al cambiar de red sin tener que empezar de nuevo. Desde el punto de vista de la ingeniería, la ruta de descarga es simétrica a la ruta de subida.
3.1 Objetos de descarga y manifiesto
- Antes de descargar, el cliente DEBERÍA obtener el manifiesto para conocer el número total de fragmentos, su orden y cómo localizar cada objeto.
- El manifiesto DEBE localizar de forma unívoca cada fragmento (mediante reglas de clave de objeto o un índice equivalente).
3.2 Descarga paralela
- El cliente DEBERÍA descargar varios fragmentos a la vez para acercarse al límite del ancho de banda.
- El cliente DEBERÍA usar una concurrencia limitada y reducirla cuando aumente la tasa de errores.
- El beneficio de la concurrencia suele ser mayor cuando el RTT entre regiones es alto, porque una sola conexión se ve limitada con más facilidad por el RTT y la fluctuación.
3.3 Descarga reanudable
- El cliente DEBE poder registrar el conjunto de fragmentos completados (por ejemplo, un mapa de bits o un conjunto de índices).
- Tras una interrupción, el cliente DEBERÍA obtener solo los fragmentos que faltan, sin volver a descargar el archivo completo.
- Si el servidor impone límites al número de descargas, el cliente DEBERÍA minimizar las descargas redundantes durante la recuperación para no malgastar el contador de descargas.
3.4 Reensamblado
- El cliente DEBE reensamblar el archivo de salida en el orden de chunkIndex.
- El cliente DEBERÍA usar escritura en streaming o reensamblado progresivo para reducir los picos de memoria (sobre todo en archivos muy grandes).
- Si se empaquetan varios archivos, el cliente PUEDE entregar cada archivo por separado o usar un formato contenedor (según el diseño del producto).
3.5 Comprobaciones de integridad (resumen)
- Tras la descarga, el cliente DEBERÍA verificar los fragmentos (por ejemplo, la coherencia del hash y de la longitud).
- Si la verificación falla, DEBE cerrarse ante el fallo y reintentar el fragmento correspondiente.
- Para los límites relativos a los fallos de cifrado o de autenticación, consulta las secciones correspondientes del documento técnico sobre seguridad y privacidad.