Cargas reanudables

Ir a ejemplos

En esta página, se analizan las cargas reanudables en Cloud Storage. Las cargas reanudables son el método recomendado para subir archivos grandes, ya que no tienes que reiniciarlas desde el principio si hay una falla de red mientras se realiza la carga.

Introducción

Una carga reanudable te permite reanudar las operaciones de transferencia de datos a Cloud Storage después de que una falla de comunicación haya interrumpido el flujo de datos. Las cargas reanudables funcionan mediante el envío de varias solicitudes, cada una de ellas con una parte del objeto que estás subiendo. Esto es diferente a una carga simple, que contiene todos los datos del objeto en una sola solicitud y se debe reiniciar desde el principio si se genera una falla durante el proceso.

  • Usa una carga reanudable si subes archivos grandes o si subes archivos con una conexión lenta. Por ejemplo, si deseas ver los límites de tamaño que deben tener los archivos para usar cargas reanudables, consulta las consideraciones sobre el tamaño de carga.

  • Una carga reanudable completa se considera una operación de clase A.

Cómo las herramientas y las API usan las cargas reanudables

Según cómo interactúes con Cloud Storage, las cargas reanudables se pueden administrar de forma automática en tu nombre. Haz clic en una pestaña de la tabla incluida a continuación para obtener más información:

Console

Cloud Console administra las cargas reanudables de forma automática en tu nombre. Sin embargo, si actualizas o sales de Cloud Console mientras se realiza una carga, esta se cancela.

gsutil

La herramienta de línea de comandos de gsutil te permite establecer un tamaño mínimo para realizar cargas reanudables con el parámetro resumable_threshold en el archivo de configuración boto. El valor predeterminado para resumable_threshold es 8 MiB.

Bibliotecas cliente

C++

Puedes activar o desactivar el uso de las cargas reanudables como parte del método WriteObject.

C#

Puedes iniciar una carga reanudable con CreateObjectUploader.

Go

Puedes controlar el tamaño mínimo para realizar cargas reanudables con Writer.ChunkSize. Go siempre realiza cargas reanudables fragmentadas.

Java

Las cargas reanudables se controlan a través del método writer.

Node.js

Las cargas reanudables se administran de forma automática cuando se usa el método createWriteStream.

PHP

Las cargas reanudables se administran de forma automática por ti, pero se pueden controlar directamente mediante la opción resumable.

Python

Las cargas reanudables se producen de forma automática cuando el archivo supera los 8 MiB. De manera alternativa, puedes usar Resumable Media para administrar las cargas reanudables por tu cuenta.

Ruby

Todas las cargas se tratan como cargas reanudables.

API de REST

API de JSON

La API de JSON de Cloud Storage usa una solicitud POST Object que incluye el parámetro de búsqueda uploadType=resumable para iniciar la carga reanudable. Esta solicitud se muestra como un URI de sesión que puedes usar en una o más solicitudes PUT Object para subir los datos del objeto. Si deseas obtener una guía paso a paso a fin de compilar tu propia lógica para la carga reanudable, consulta la sección sobre cómo realizar cargas reanudables.

API de XML

La API de JSON de Cloud Storage usa una solicitud POST Object que incluye el parámetro de búsqueda uploadType=resumable para iniciar la carga reanudable. Esta solicitud se muestra como un URI de sesión que puedes usar en una o más solicitudes PUT Object para subir los datos del objeto. Si deseas obtener una guía paso a paso a fin de compilar tu propia lógica para la carga reanudable, consulta la sección sobre cómo realizar cargas reanudables.

Cargas reanudables de tamaño desconocido

El mecanismo de carga reanudable admite transferencias en las que el tamaño del archivo no se conoce de antemano. Esto puede ser útil para casos como la compresión de un objeto sobre la marcha durante la carga, ya que es difícil predecir el tamaño exacto del archivo comprimido al inicio de una transferencia. El mecanismo es útil si deseas transmitir una transferencia que se pueda reanudar después de su interrupción o si la codificación de transferencia fragmentada no funciona para tu aplicación.

Para obtener más información, consulta Transferencias de transmisión.

Consideraciones

Esta sección es útil si compilas tu propio cliente que envía solicitudes de carga reanudables directamente a la API de JSON o XML.

URI de sesión

Cuando inicias una carga reanudable, Cloud Storage muestra un URI de sesión, que se usa en solicitudes posteriores para subir los datos reales. Este es un ejemplo de un URI de sesión en la API de JSON:

https://storage.googleapis.com/upload/storage/v1/b/my-bucket/o?uploadType=resumable&name=my-file.jpg&upload_id=ABg5-UxlRQU75tqTINorGYDgM69mX06CzKO1NRFIMOiuTsu_mVsl3E-3uSVz65l65GYuyBuTPWWICWkinL1FWcbvvOA

Este es un ejemplo de un URI de sesión en la API de XML:

 https://storage.googleapis.com/my-bucket/my-file.jpg?upload_id=ABg5-UxlRQU75tqTINorGYDgM69mX06CzKO1NRFIMOiuTsu_mVsl3E-3uSVz65l65GYuyBuTPWWICWkinL1FWcbvvOA

Este URI de sesión actúa como un token de autenticación, por lo que no es necesario firmar las solicitudes que lo usan y cualquier persona puede subir datos al depósito de destino sin ninguna autenticación adicional. Debido a esto, sé prudente cuando compartas el URI de sesión y compártelo solo a través de HTTPS.

Los URI de sesión vencen después de una semana. Si usas un URI de sesión vencido en una solicitud, recibirás un código de estado 404 Not Found. En este caso, debes iniciar una nueva carga reanudable, obtener un nuevo URI de sesión y comenzar la carga desde el principio con el nuevo URI de sesión.

Rendimiento de la carga

Las cargas reanudables se fijan en la región en la que las inicias. Por ejemplo, si inicias una carga reanudable en EE.UU. y le asignas el URI de sesión a un cliente en Asia, la carga se realizará en EE.UU. Si se mantiene una carga reanudable en una región donde no se inició, es posible que se suban videos de forma lenta.

Si usas una instancia de Compute Engine para iniciar una carga reanudable, la instancia debe estar en la misma ubicación que el depósito de Cloud Storage en el que realizas la carga. Puedes usar un servicio de IP geográfico para seleccionar la región de Compute Engine a la que enrutarás las solicitudes de los clientes, lo que te ayuda a tener el tráfico ubicado en una región geográfica.

Lineamientos de reintento

  • Debes reintentar las solicitudes que muestran los siguientes códigos de estado:

    • 408 Request Timeout
    • 500 Internal Server Error
    • 502 Bad Gateway
    • 503 Service Unavailable
    • 504 Gateway Timeout
  • Soluciona los errores 404 Not Found mediante el inicio de una nueva carga reanudable.

  • Cuando realices solicitudes de reintento, usa la retirada exponencial truncada.

Verificaciones de integridad

Recomendamos que solicites una verificación de integridad del objeto final subido para asegurarte de que coincida con el archivo de origen. Para ello, calcula el resumen MD5 del archivo de origen y agrégalo al encabezado de la solicitud Content-MD5.

Verificar la integridad del archivo subido es importante, en especial, si subes un archivo grande durante un período prolongado, ya que hay una mayor probabilidad de que el archivo de origen se modifique en el transcurso de la operación de carga.

¿Qué sigue?