Prácticas recomendadas para Cloud Storage

En esta página, se incluye un índice de prácticas recomendadas para Cloud Storage. Puedes usar la información recopilada aquí como referencia rápida de lo que debes tener en cuenta cuando compiles una aplicación que use Cloud Storage.

Si recién empiezas a usar Cloud Storage, es posible que esta página no sea el mejor sitio para comenzar, ya que no incluye los conceptos básicos sobre cómo usar Cloud Storage. Si eres un usuario nuevo, te sugerimos que comiences con Descubre el almacenamiento de objetos con la consola de Google Cloud o Descubre el almacenamiento de objetos con la herramienta de gcloud.

Asignación de nombres

Consulta Asignación de nombres de buckets y Asignación de nombres de objetos para conocer los requisitos y las consideraciones relacionadas con los nombres.

Tráfico

  • Realiza una estimación aproximada de la cantidad de tráfico que se enviará a Cloud Storage. En particular, ten en cuenta esta información:

    • Las operaciones por segundo. ¿Cuántas operaciones por segundo esperas que realicen los depósitos y los objetos? ¿y para las operaciones de creación, actualización y eliminación?

    • El ancho de banda. ¿Cuántos datos se enviarán y durante cuánto tiempo? Considera usar una herramienta como Wolfram Alpha para evitar errores en tus cálculos.

    • El control de caché. Especificar los metadatos Cache-Control en objetos de acceso público beneficiará la latencia de lectura en los objetos activos o de acceso frecuente. Consulta Visualiza y edita metadatos para obtener instrucciones sobre la configuración de metadatos de objetos como Cache-Control.

  • Diseña tu aplicación para minimizar los picos de tráfico. Si hay clientes de tu aplicación que realizan actualizaciones, distribúyelos a lo largo del día.

  • Cuando diseñes aplicaciones para tasas de solicitudes altas, ten en cuenta los límites de frecuencia de ciertas operaciones. Conoce los límites de ancho de banda para ciertos tipos de salida y sigue los Lineamientos de distribución de acceso y porcentaje de solicitudes. Ten en cuenta en particular el ajuste de escala automático y la necesidad de aumentar las tasas de solicitudes de forma gradual para obtener el mejor rendimiento.

  • Cuando se manejan errores, ocurre lo siguiente:

    • Asegúrate de que tu aplicación use una estrategia de reintento para evitar problemas debido a los picos de actividad de tráfico.

    • Vuelve a intentarlo con una conexión nueva y, quizás, una resolución nueva del nombre de dominio. Esto ayuda a evitar la "persistencia del servidor", en la que un reintento trata de pasar por la misma ruta y llega al mismo componente en mal estado que la solicitud inicial.

  • Si tu aplicación es sensible a la latencia, usa solicitudes encubiertas. Las solicitudes encubiertas te permiten volver a intentarlo más rápido y reducir la latencia final. Lo hacen sin reducir el plazo de solicitud, lo que podría provocar que las solicitudes agoten el tiempo de espera de manera prematura. Para obtener más información, consulta The Tail at Scale.

  • Comprende el nivel de rendimiento que los clientes esperan de tu aplicación. Esta información te ayudará a elegir una opción de almacenamiento y una región cuando crees nuevos depósitos. Por ejemplo, considera colocar tus recursos de procesamiento con los buckets de Cloud Storage para aplicaciones de estadísticas.

Opciones de almacenamiento de datos y ubicaciones

Consulta los temas Clase de almacenamiento y Ubicación del bucket para obtener información sobre cómo almacenar mejor tus datos.

LCA y control de acceso

  • Las solicitudes de Cloud Storage se refieren a los depósitos y los objetos por sus nombres. Como resultado, a pesar de que las LCA evitarán que terceros no autorizados operen en objetos o depósitos, un tercero puede intentar ejecutar solicitudes con nombres de objetos o depósitos y determinar su existencia, si observa las respuestas de error. Debido a esto, puede que se filtre la información en los nombres de objetos o depósitos. Si te preocupa la privacidad de los nombres de tu bucket o de tu objeto, debes tomar las siguientes precauciones adecuadas:

    • Elegir nombres de depósitos y de objetos que sean difíciles de adivinar. Por ejemplo, un bucket llamado mybucket-gtbytul3 es lo bastante aleatorio como para evitar que terceros no autorizados puedan adivinarlo o enumerar otros nombres de bucket s a partir de él.

    • Evitar el uso de información sensible como parte de los nombres de objetos o depósitos. Por ejemplo, en lugar de nombrar tu bucket mysecretproject-prodbucket, asígnale el nombre somemeaninglesscodename-prod. En algunas aplicaciones, es posible que desees mantener los metadatos sensibles en encabezados personalizados de Cloud Storage , como x-goog-meta, en lugar de codificar los metadatos en los nombres de los objetos.

  • Es preferible usar grupos que enumerar de forma explícita grandes cantidades de usuarios. Esto escala mejor y proporciona una forma muy eficiente de actualizar el control de acceso para una gran cantidad de objetos a la vez. Por último, es más barato, ya que no necesitas realizar una solicitud por objeto para cambiar las LCA.

  • Revisa y sigue las prácticas recomendadas de control de acceso.

  • El sistema de control de acceso de Cloud Storage incluye la capacidad de especificar que los objetos se puedan leer de forma pública. Asegúrate de que deseas que todos los objetos que escribas con este permiso sean públicos. Una vez que se “publican”, los datos en Internet se pueden copiar en muchos lugares, por lo que es imposible recuperar el control de lectura sobre un objeto escrito con este permiso.

  • El sistema de control de acceso de Cloud Storage incluye la capacidad de especificar que los depósitos se puedan escribir de forma pública. Si bien configurar un bucket de esta manera puede ser conveniente para varios objetivos, recomendamos no usar este permiso, ya que se puede abusar de él con el fin de distribuir contenido ilegal, virus y otros tipos de software malicioso. El propietario del bucket es responsable a nivel legal y financiero del contenido almacenado en él.

    Si necesitas que el contenido esté disponible de forma segura para los usuarios que no tienen cuentas de usuario, recomendamos que uses URLs firmadas. Por ejemplo, con las URLs firmadas, puedes proporcionar un vínculo a un objeto y los clientes de tu aplicación no necesitarán autenticarse con Cloud Storage para acceder al objeto. Cuando creas una URL firmada, controlas el tipo (de lectura, escritura y borrado) y la duración del acceso.

Cargas de datos

  • Si usas devoluciones de llamadas XMLHttpRequest (XHR) para obtener actualizaciones de progreso, no cierres y vuelvas a abrir la conexión si detectas que el progreso se detuvo. Si lo haces, se creará un bucle de reacción positivo indeseado cuando haya congestión en la red. Cuando la red está congestionada, las devoluciones de llamada XHR se pueden atrasar detrás de la actividad de confirmación (ACK y NACK) de la transmisión de la carga. Si se cierra y se vuelve a abrir la conexión cuando esto sucede, se usa más capacidad de la red en el preciso momento en el que menos lo puedes permitir.

  • Para subir tráfico, recomendamos configurar tiempos de espera de una duración razonable. Para asegurar una experiencia óptima del usuario final, puedes establecer un cronómetro del lado del cliente que actualice la ventana del estado del cliente con un mensaje (p. ej., “congestión de la red”) cuando tu aplicación no haya recibido una devolución de llamada XHR durante mucho tiempo. No cierres la conexión y vuelvas a intentarlo cuando esto suceda.

  • Una forma fácil y conveniente de reducir el ancho de banda necesario para cada solicitud es habilitar la compresión gzip. Aunque esto requiere un tiempo de CPU adicional para descomprimir los resultados, la compensación con los costos de la red suele hacer que valga la pena.

    Por lo general, un objeto que se subió en formato gzip se puede también entregar en formato gzip. Sin embargo, evita subir contenido que tenga un content-encoding: gzip o un content-type comprimido, ya que esto puede provocar un comportamiento inesperado.

  • Te recomendamos usar cargas reanudables, que te permiten reanudar la transferencia de datos incluso cuando una falla de comunicación haya interrumpido el flujo de datos. También puedes usar cargas multiparte de la API de XML para subir partes de un archivo en paralelo, lo que puede reducir el tiempo de completar la carga general.

Eliminación de datos

Consulta Borra objetos para obtener lineamientos y consideraciones sobre cómo borrar datos. También puedes usar las funciones para controlar los ciclos de vida de los datos a fin de evitar que el software o los usuarios de la aplicación borren los datos de forma errónea.