Esta página contiene un índice de prácticas recomendadas para Cloud Storage. Puedes usar la información recogida aquí como referencia rápida de lo que debes tener en cuenta al crear una aplicación que use Cloud Storage.
Si acabas de empezar a usar Cloud Storage, puede que esta página no sea el mejor lugar para empezar, ya que no te enseña los conceptos básicos de cómo usar Cloud Storage. Si eres un usuario nuevo, te recomendamos que empieces con Descubrir el almacenamiento de objetos con la consola Google Cloud o Descubrir el almacenamiento de objetos con la herramienta gcloud.
Para consultar las prácticas recomendadas para cargas de trabajo multimedia, consulta Prácticas recomendadas para cargas de trabajo multimedia.
Nomenclatura
Consulta las secciones Asignación de nombres a segmentos y Asignación de nombres a objetos para ver los requisitos y las consideraciones sobre los nombres.
Tráfico
Haz una estimación aproximada de la cantidad de tráfico que se enviará a Cloud Storage. En concreto, piensa en lo siguiente:
Operaciones por segundo. ¿Cuántas operaciones por segundo esperas para los contenedores y los objetos, así como para las operaciones de creación, actualización y eliminación?
Ancho de banda. ¿Cuántos datos se enviarán y durante cuánto tiempo? Te recomendamos que utilices una herramienta como Wolfram Alpha para evitar errores en tus cálculos.
Control de caché. Si especificas los
Cache-Control
metadatos en objetos de acceso público, se reducirá la latencia de lectura en objetos activos o a los que se acceda con frecuencia. Consulta Ver y editar metadatos para obtener instrucciones sobre cómo definir metadatos de objetos, comoCache-Control
.
Diseña tu aplicación para minimizar los picos de tráfico. Si hay clientes de tu aplicación que están haciendo actualizaciones, distribúyelas a lo largo del día.
Cuando diseñes aplicaciones para altas tasas de solicitudes, ten en cuenta los límites de frecuencia de determinadas operaciones. Consulta los límites de ancho de banda de determinados tipos de salida y sigue las directrices sobre porcentaje de solicitudes y distribución de acceso. Presta especial atención al autoescalado y a la necesidad de aumentar gradualmente las tasas de solicitudes para obtener el mejor rendimiento.
Al gestionar errores:
Asegúrate de que tu aplicación use una estrategia de reintento para evitar problemas debido a grandes picos de tráfico.
Vuelve a intentarlo con una conexión nueva y, posiblemente, vuelve a resolver el nombre de dominio. De esta forma, se evita la "persistencia del servidor", que se produce cuando un intento de reenvío sigue la misma ruta y llega al mismo componente incorrecto que la solicitud inicial.
Si tu aplicación es sensible a la latencia, usa solicitudes protegidas. Las solicitudes protegidas te permiten volver a intentar la operación más rápido y reducir la latencia de cola. Lo hacen sin reducir el plazo de tu solicitud, lo que podría provocar que las solicitudes se agoten antes de tiempo. Para obtener más información, consulta The Tail at Scale.
Conocer el nivel de rendimiento que esperan los clientes de tu aplicación. Esta información le ayudará a elegir una opción de almacenamiento y una región al crear nuevos contenedores. Por ejemplo, puedes colocar tus recursos de computación junto con tus segmentos de Cloud Storage para aplicaciones de analíticas.
Ubicaciones y opciones de almacenamiento de datos
Consulta los temas Clase de almacenamiento y Ubicación del segmento para obtener información sobre cómo almacenar tus datos de la mejor forma posible.
Listas de control de acceso y control de acceso
Las solicitudes de Cloud Storage hacen referencia a los segmentos y objetos por sus nombres. Por lo tanto, aunque las listas de control de acceso impiden que terceros no autorizados realicen operaciones en los contenedores o los objetos, un tercero puede intentar enviar solicitudes con nombres de contenedores u objetos y determinar si existen observando las respuestas de error. De esta forma, se puede filtrar información de los nombres de los objetos o de los contenedores. Si le preocupa la privacidad de los nombres de sus cubos u objetos, debe tomar las precauciones adecuadas, como las siguientes:
Elegir nombres de segmento y de objeto que sean difíciles de adivinar. Por ejemplo, el nombre de un contenedor
mybucket-gtbytul3
es lo suficientemente aleatorio como para que terceros no autorizados no puedan adivinarlo ni enumerar otros nombres de contenedores a partir de él.No usar información sensible en los nombres de los contenedores o los objetos. Por ejemplo, en lugar de asignar el nombre
mysecretproject-prodbucket
al bucket, asígnale el nombresomemeaninglesscodename-prod
. En algunas aplicaciones, puede que quieras mantener los metadatos sensibles en encabezados personalizados de Cloud Storage, comox-goog-meta
, en lugar de codificarlos en nombres de objetos.
Es preferible usar grupos que enumerar explícitamente un gran número de usuarios. No solo se adapta mejor, sino que también ofrece una forma muy eficiente de actualizar el control de acceso de un gran número de objetos a la vez. Por último, es más barato, ya que no tienes que hacer una solicitud por objeto para cambiar las ACLs.
Consulta y sigue las prácticas recomendadas sobre control de acceso.
El sistema de control de acceso de Cloud Storage incluye la posibilidad de especificar que los objetos se puedan leer públicamente. Asegúrate de que quieres que sean públicos los objetos que escribas con este permiso. Una vez que se publican, los datos de Internet se pueden copiar en muchos sitios, por lo que es prácticamente imposible recuperar el control de lectura de un objeto escrito con este permiso.
El sistema de control de acceso de Cloud Storage incluye la posibilidad de especificar que los segmentos se puedan escribir públicamente. Aunque configurar un contenedor de esta forma puede ser útil para varios fines, no recomendamos usar este permiso, ya que se puede usar de forma inadecuada para distribuir contenido ilegal, virus y otro malware. Además, el propietario del contenedor es responsable legal y económicamente del contenido almacenado en sus contenedores.
Si necesitas que el contenido esté disponible de forma segura para los usuarios que no tienen cuentas de usuario, te recomendamos que utilices URLs firmadas. Por ejemplo, con las URLs firmadas puedes proporcionar un enlace a un objeto y los clientes de tu aplicación no necesitan autenticarse con Cloud Storage para acceder al objeto. Cuando creas una URL firmada, controlas el tipo (lectura, escritura o eliminación) y la duración del acceso.
Subidas de datos
Si usas retrollamadas de XMLHttpRequest (XHR) para obtener actualizaciones del progreso, no cierres y vuelvas a abrir la conexión si detectas que el progreso se ha detenido. Si lo haces, se creará un bucle de retroalimentación positiva incorrecto en momentos de congestión de la red. Cuando la red está congestionada, las retrollamadas de XHR pueden acumularse detrás de la actividad de confirmación (ACK/NACK) del flujo de subida. Si se cierra y se vuelve a abrir la conexión cuando esto ocurre, se utiliza más capacidad de red justo en el momento en que menos puedes permitirte hacerlo.
En el caso del tráfico de subida, recomendamos definir tiempos de espera razonablemente largos. Para ofrecer una buena experiencia al usuario final, puedes definir un temporizador del lado del cliente que actualice la ventana de estado del cliente con un mensaje (por ejemplo, "congestión de la red") cuando tu aplicación no ha recibido una retrollamada XHR durante mucho tiempo. No cierres la conexión y vuelvas a intentarlo cuando esto ocurra.
Una forma sencilla y cómoda de reducir el ancho de banda que se necesita en cada solicitud consiste en habilitar la compresión gzip. Aunque este método requiere tiempo de CPU adicional para descomprimir los resultados, la compensación con la reducción de los costes de red normalmente hace que merezca la pena.
Un objeto que se ha subido en formato gzip generalmente se puede servir también en formato gzip. Sin embargo, no subas contenido que tenga ambos
content-encoding: gzip
y uncontent-type
comprimido, ya que esto puede provocar un comportamiento inesperado.Te recomendamos que utilices subidas reanudables, que te permiten reanudar la transferencia de datos aunque se haya interrumpido el flujo de datos debido a un error de comunicación. También puedes usar las subidas multiparte de la API XML para subir partes de un archivo en paralelo, lo que puede reducir el tiempo necesario para completar la subida.
Eliminación de datos
Consulta las directrices y consideraciones sobre la eliminación de datos en Eliminar objetos. También puedes usar funciones para controlar los ciclos de vida de los datos y protegerlos de que se eliminen por error con el software de tu aplicación o por los usuarios.