Las cargas compuestas paralelas pueden ayudarte a subir archivos grandes de forma mucho más rápida cuando la velocidad de la red y del disco no son factores limitantes. En una carga compuesta en paralelo, un archivo se divide en hasta 32 fragmentos, los fragmentos se suben en paralelo a objetos temporales, el objeto final se vuelve a crear con los objetos temporales y los objetos temporales se borran.
Si interactúas con Cloud Storage a través de la API de XML, considera usar
cargas multiparte de la API de XML en su lugar. Las cargas multiparte de la API de XML admiten una
mayor cantidad de partes que las operaciones de composición, tienen menos potencial de generar tarifas por eliminación
anticipada y no requieren solicitudes Delete para quitar las partes de origen
una vez que se ensambla el objeto final.
Consideraciones
El objeto final que una carga compuesta paralela almacena en tu bucket es un objeto compuesto, que solo tiene un hash crc32c y no un hash MD5. Como resultado, debes usar crcmod para realizar verificaciones de integridad cuando descargas el objeto con aplicaciones de Python. Solo debes realizar cargas compuestas paralelas si se aplica lo siguiente:
No necesitas que los objetos subidos tengan un hash MD5.
Cualquier usuario de Python, incluidos los usuarios de gsutil, que necesite descargar los objetos tiene instalado google-crc32c o crcmod.
Por ejemplo, si usas Python para subir elementos de video que solo entrega una aplicación de Java, las cargas compuestas paralelas son una buena opción porque hay implementaciones eficientes de CRC32C disponibles en Java.
Roles obligatorios
Para obtener los permisos que
necesitas para realizar cargas compuestas paralelas,
pídele a tu administrador que te otorgue el rol de IAM de
usuario de objetos de almacenamiento (roles/storage.objectUser) en el bucket.
roles/storage.admin) contiene los
permisos necesarios para subir, leer y borrar fragmentos de objetos. También contiene
el permiso necesario para que gcloud CLI realice una verificación de compatibilidad
a nivel de bucket con cargas compuestas paralelas. Si no puedes obtener el
rol de administrador de Storage (roles/storage.admin), puedes realizar cargas compuestas
en paralelo con gcloud CLI si obtienes el
rol de Usuario de objetos de almacenamiento (roles/storage.objectUser) y, luego, inhabilitas la
propiedad storage/parallel_composite_upload_compatibility_check. Para obtener más
información, consulta la pestaña Línea de comandos en la sección
Cómo las herramientas y las APIs usan las cargas compuestas paralelas.
También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.
Para obtener instrucciones sobre cómo otorgar roles a los buckets, consulta Configura y administra políticas de IAM en buckets.
Cómo las herramientas y las API usan las cargas compuestas paralelas
Según cómo interactúes con Cloud Storage, las cargas compuestas paralelas pueden administrarse de forma automática en tu nombre. En esta sección, se describe el comportamiento de carga compuesto en paralelo para diferentes herramientas y se proporciona información sobre cómo puedes modificar el comportamiento.
Console
La consola de Google Cloud no realiza cargas compuestas paralelas.
Línea de comandos
Las siguientes propiedades funcionan en conjunto para determinar cómo y cuándo la gcloud CLI realiza cargas compuestas paralelas:
storage/parallel_composite_upload_enabled: propiedad para habilitar las cargas compuestas paralelas. Si esFalse, inhabilita las cargas compuestas paralelas y omite las verificaciones de compatibilidad a nivel del bucket. Si esTrueoNone, habilita las cargas compuestas paralelas para los objetos que cumplen con los criterios definidos en las otras propiedades y habilita las verificaciones de compatibilidad. La configuración predeterminada esNone.storage/parallel_composite_upload_compatibility_check: Es la propiedad para activar o desactivar las verificaciones a nivel del bucket de compatibilidad y seguridad con las cargas compuestas paralelas. Si esTrue, gcloud CLI envía una solicitudGETpara los metadatos del bucket de destino antes de intentar una carga compuesta paralela, lo que requiere que la principal tenga el permisostorage.buckets.get. La gcloud CLI solo realiza cargas compuestas paralelas cuando se cumplen todas las condiciones siguientes:- La clase de almacenamiento para el objeto subido es
STANDARD. - El bucket de destino no tiene una política de retención.
- El bucket de destino no tiene habilitadas las conservaciones de objetos predeterminadas.
El parámetro de configuración predeterminado es
True. Si esFalse, gcloud CLI no realiza la verificación de compatibilidad.Establecer
storage/parallel_composite_upload_compatibility_checkenFalseno inhabilita las cargas compuestas paralelas. Cuandostorage/parallel_composite_upload_compatibility_checkse establece enFalseystorage/parallel_composite_upload_enabledesNoneoTrue, gcloud CLI omite la verificación del bucket y continúa directamente con una carga compuesta paralela.Para omitir esta verificación, inhabilita la propiedad
storage/parallel_composite_upload_compatibility_check:gcloud config set storage/parallel_composite_upload_compatibility_check False- La clase de almacenamiento para el objeto subido es
storage/parallel_composite_upload_threshold: Es el tamaño total mínimo del archivo para realizar una carga compuesta paralela. La configuración predeterminada es de 150 MiB.storage/parallel_composite_upload_component_size: Es el tamaño máximo de cada objeto temporal. La propiedad se ignora si el tamaño total del archivo es tan grande que requeriría más de 32 fragmentos en este tamañostorage/parallel_composite_upload_component_prefix: Es el prefijo que se usa para nombrar objetos temporales. Esta propiedad se puede establecer como una ruta de acceso absoluta o como una ruta de acceso relativa al objeto final. Consulta la descripción de la propiedad para obtener más información. El prefijo predeterminado es la ruta de acceso absoluta/gcloud/tmp/parallel_composite_uploads/see_gcloud_storage_cp_help_for_details.
Puedes modificar estas propiedades si creas una configuración con nombre y aplicas la configuración por comando usando la marca --configuration de todo el proyecto o para todos los comandos de gcloud CLI con el comando gcloud config set.
No se requiere espacio en el disco local adicional cuando se usa gcloud CLI para realizar cargas compuestas paralelas. Si una carga compuesta paralela falla antes de la composición, ejecuta el comando de gcloud CLI de nuevo para aprovechar las cargas reanudables de los objetos temporales que fallaron. Cualquier objeto temporal que se haya subido de forma correcta antes de la falla, no volverá a subirse cuando reanudes la carga.
Los objetos temporales reciben un nombre de la siguiente manera:
TEMPORARY_PREFIX/RANDOM_VALUE_HEX_DIGEST_COMPONENT_ID
Donde:
- La propiedad
storage/parallel_composite_upload_component_prefixcontrolaTEMPORARY_PREFIX. RANDOM_VALUEes un valor numérico aleatorio.HEX_DIGESTes un hash derivado del nombre del recurso de origen.COMPONENT_IDes el número secuencial del componente.
Por lo general, los objetos temporales se borran al final de una carga compuesta paralela. Sin embargo, para evitar que queden objetos temporales, debes verificar el estado de salida del comando de gcloud CLI y borrar de forma manual los objetos temporales que se subieron como parte de cualquier carga anulada.
Bibliotecas cliente
Java
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Java.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Puedes realizar cargas compuestas paralelas si configuras AllowParallelCompositeUpload como true.
Por ejemplo:
Node.js
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Node.js.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
La biblioteca cliente de Node.js no admite cargas compuestas paralelas. En su lugar, usa cargas multiparte de la API de XML.
Python
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Python.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
La biblioteca cliente de Python no admite cargas compuestas paralelas. En su lugar, usa cargas multiparte de la API de XML.
API de REST
API de JSON
La API de JSON admite que subas fragmentos de objetos
en paralelo y los vuelvas a combinar en un solo objeto con la
operación compose.
Ten en cuenta lo siguiente cuando diseñes código para cargas compuestas paralelas:
Cuando usas la operación
compose, puedes borrar de forma definitiva los objetos de origen como parte del proceso de composición. Usa esta opción para minimizar la facturación de los objetos temporales que no necesitan protección con la eliminación no definitiva ni el control de versiones de objetos.Para estar protegidos de los cambios a los objetos de origen entre las solicitudes de carga y de composición, debes proporcionar un número de generación esperado para cada origen.
API de XML
La API de XML admite que subas fragmentos de objetos
en paralelo y los vuelvas a combinar en un solo objeto con la
operación compose.
Ten en cuenta lo siguiente cuando diseñes código para cargas compuestas paralelas:
Cuando se usa la operación
compose, los objetos de origen no se ven afectados por el proceso de composición.Esto significa que, si están destinados a ser temporales, debes borrarlos de forma explícita una vez que hayas completado con éxito la composición. Si no lo haces, los objetos de origen permanecerán en el bucket y se facturarán en consecuencia.
Para estar protegidos de los cambios a los objetos de origen entre las solicitudes de carga y de composición, debes proporcionar un número de generación esperado para cada origen.
Soluciona problemas
En esta sección, se incluye información para solucionar los errores de gcloud CLI que pueden ocurrir con las cargas compuestas paralelas.
No se puede verificar si el bucket de destino es compatible con las cargas compuestas paralelas
Problema: Cuando subes un archivo de 150 MiB o más con
gcloud storage cp o gcloud storage mv, el comando registra el siguiente
mensaje una vez, pero la carga se completa correctamente con el código de salida 0:
ERROR: Cannot check if the destination bucket is compatible for running parallel composite uploads as the user does not permission to perform GET operation on the bucket. The operation will be performed without parallel composite upload feature and hence might perform relatively slower.
Solución: gcloud CLI intenta ejecutar la verificación de compatibilidad de la carga compuesta paralela. La principal no tiene el permiso
storage.buckets.get en el bucket de destino, por lo que se rechaza la solicitud de
los metadatos del bucket. gcloud CLI controla el error
de forma interna y no muestra un código de estado HTTP. En su lugar, registra el mensaje
y recurre a una carga normal.
Si quieres realizar cargas compuestas paralelas, asegúrate de que la principal tenga los permisos
storage.buckets.get, storage.objects.get y storage.objects.delete
en el bucket de destino. Estos permisos se pueden otorgar a través
del rol de Administrador de almacenamiento (roles/storage.admin). Como alternativa, si la principal
ya tiene los permisos storage.objects.get y storage.objects.delete
a través de un rol como Usuario de objetos de almacenamiento (roles/storage.objectUser), puede
establecer la propiedad storage/parallel_composite_upload_compatibility_check en
False para inhabilitar la verificación de compatibilidad.
403: does not have storage.objects.get access
Problema: Las cargas de archivos de menos de 150 MiB se realizan correctamente, pero las cargas de archivos
de 150 MiB o más fallan con el código de salida 1 y un error similar al
siguiente:
HTTPError 403: PRINCIPAL does not have storage.objects.get access to the Google Cloud Storage object.
Solución: storage/parallel_composite_upload_compatibility_check se establece en
False y storage/parallel_composite_upload_enabled se establece en None
o True. En esta configuración, gcloud CLI omite la verificación de compatibilidad del bucket
y continúa directamente con una carga compuesta paralela.
Los objetos temporales se suben correctamente porque la principal tiene el
permiso storage.objects.create. Sin embargo, para componer los objetos temporales
en el objeto final, se requiere el permiso storage.objects.get, y
para borrar los objetos temporales después, se requiere el
permiso storage.objects.delete.
Para resolver este problema, elige una de las siguientes opciones:
Si no necesitas cargas compuestas paralelas, inhabilítalas:
gcloud config set storage/parallel_composite_upload_enabled False
Todos los archivos se suben como cargas normales, y la principal solo necesita los permisos incluidos en el rol de creador de objetos de Storage (
roles/storage.objectCreator). Puedes dejarstorage/parallel_composite_upload_compatibility_checken cualquier valor.Si necesitas cargas compuestas paralelas, otorga a la principal los permisos
storage.objects.getystorage.objects.deleteen el bucket de destino. Estos permisos se pueden otorgar a través del rol de Usuario de objetos de almacenamiento (roles/storage.objectUser).
Si la carga fallida dejó objetos temporales en tu bucket, bórralos. De forma predeterminada, los objetos temporales usan el prefijo
gcloud/tmp/parallel_composite_uploads/see_gcloud_storage_cp_help_for_details.
Para borrar los objetos temporales que se generaron a partir de una carga con errores, necesitas el permiso
storage.objects.delete.
Ten en cuenta que el comando gcloud storage rsync se comporta de manera diferente que
gcloud storage cp y gcloud storage mv. Cuando el destino es una raíz de bucket, como gs://my-bucket, gcloud storage rsync siempre requiere el permiso storage.buckets.get para sincronizar con el bucket, independientemente de la configuración de carga compuesta paralela. Cuando el destino es un
subdirectorio de bucket, como gs://my-bucket/dir/,
gcloud storage rsync no requiere el permiso storage.buckets.get, siempre
y cuando la verificación de compatibilidad esté inhabilitada en la configuración de carga compuesta
paralela. En este caso, gcloud storage rsync requiere el
permiso storage.objects.get en lugar de storage.buckets.get.