Cloud Storage es un servicio altamente escalable que usa la tecnología de autoescalado para alcanzar tasas de solicitudes muy altas. Esta página establece las directrices para optimizar la escalabilidad y el rendimiento que proporciona Cloud Storage.
Autoescalado
Cloud Storage es un servicio multiinquilino, lo que significa que los usuarios comparten el mismo conjunto de recursos subyacentes. Para aprovechar al máximo estos recursos compartidos, los contenedores tienen una capacidad de E/ inicial de:
- Aproximadamente 1000 solicitudes de escritura de objetos por segundo, lo que incluye la subida, la actualización y la eliminación de objetos. Ten en cuenta que Cloud Storage también tiene un límite inferior para las escrituras repetidas en el mismo nombre de objeto.
- Aproximadamente 5000 solicitudes de lectura de objetos por segundo, lo que incluye la representación de objetos, la lectura de datos de objetos y la lectura de metadatos de objetos.
Estas tasas iniciales de lectura y escritura dan una media de 2,5 PB escritos y 13 PB leídos al mes para objetos de 1 MB. A medida que aumenta la tasa de solicitudes de un determinado contenedor, Cloud Storage se ajusta automáticamente y aumenta la capacidad de E/ de ese contenedor distribuyendo la carga de solicitudes entre varios servidores.
Tiempo de redistribución de la carga
Cuando un segmento se acerca a su límite de capacidad de E/S, Cloud Storage suele tardar unos minutos en detectar la situación y redistribuir la carga en más servidores. Por lo tanto, si la tasa de solicitudes de tu segmento aumenta más rápido de lo que Cloud Storage puede realizar esta redistribución, es posible que alcances límites temporales, concretamente, una latencia y una tasa de errores más altas. Aumentar gradualmente el porcentaje de peticiones para los segmentos, tal y como se describe a continuación, evita dicha latencia y errores.
Indexación de claves de objetos
Cloud Storage admite el listado de objetos coherente, lo que permite a los usuarios ejecutar flujos de trabajo de procesamiento de datos fácilmente en Cloud Storage. Para ofrecer un listado de objetos coherente, Cloud Storage mantiene un índice de claves de objeto para cada segmento. Este índice se almacena en orden lexicográfico y se actualiza cada vez que se escriben o eliminan objetos de un segmento. Si se añaden y eliminan objetos cuyas claves se encuentran en un intervalo pequeño del índice, aumentan las probabilidades de que se produzca una contención.
Cloud Storage detecta este tipo de contención, también conocido como hotspotting, y redistribuye automáticamente la carga en el intervalo de índice afectado entre varios servidores. De manera similar a escalar la capacidad de PI de un segmento, cuando se accede a un nuevo intervalo del índice, como al escribir objetos con un prefijo nuevo, se debe incrementar gradualmente el porcentaje de peticiones, como se describe a continuación. De no hacerlo, pueden aumentar temporalmente las tasas de latencia y de error.
Prácticas recomendadas
En las siguientes secciones, se proporcionan las prácticas recomendadas sobre cómo incrementar el porcentaje de peticiones, elegir claves de objetos y distribuir peticiones para evitar los límites temporales en el segmento. Ten en cuenta que, además de estas consideraciones por cada contenedor, también hay límites de ancho de banda combinados que se aplican a los contenedores ubicados en la misma ubicación y proyecto.
Aumentar el porcentaje de peticiones gradualmente
Para asegurarte de que el autoescalado de Cloud Storage siempre proporcione el mejor rendimiento, debes aumentar gradualmente la frecuencia de solicitudes de cualquier contenedor que no haya tenido una frecuencia de solicitudes alta en varios días o que tenga un nuevo intervalo de claves de objeto. Si el porcentaje de peticiones es inferior a 1000 peticiones de escritura por segundo o 5000 peticiones de lectura por segundo, no se necesita ningún incremento. Si prevés que tu tasa de solicitudes superará estos umbrales, debes empezar con una tasa de solicitudes inferior o cercana a los umbrales y, a continuación, aumentar la tasa gradualmente, sin duplicarla en un periodo de 20 minutos.
Si tienes algún problema, como un aumento de la latencia o de las tasas de errores, pausa el aumento o reduce la tasa de solicitudes temporalmente para dar a Cloud Storage más tiempo para escalar tu segmento. Debes volver a enviar tus solicitudes con un tiempo de espera exponencial en los siguientes casos:
- Recibir errores con los códigos de respuesta
408
y429
. - Recibir errores con códigos de respuesta
5xx
.
Los segmentos con el espacio de nombres jerárquico habilitado ofrecen límites iniciales de consultas por segundo (QPS) hasta 8 veces superiores para leer y escribir objetos en comparación con los segmentos que no tienen habilitado el espacio de nombres jerárquico. El mayor número de consultas por segundo inicial facilita el escalado de las cargas de trabajo que requieren un uso intensivo de datos y proporciona un mayor rendimiento. Para obtener más información sobre cómo habilitar el espacio de nombres jerárquico en un segmento, consulta Crear un segmento con el espacio de nombres jerárquico habilitado.
Usar una convención de nomenclatura que distribuya la carga de manera uniforme en los intervalos de claves
El autoescalado de un intervalo del índice se puede ralentizar cuando se usan nombres secuenciales, como las claves de objetos basadas en una secuencia de números o marca de tiempo. Esto ocurre porque las peticiones cambian constantemente a un nuevo intervalo del índice, lo que hace que la redistribución de la carga sea más difícil y menos efectiva.
Si quieres mantener un porcentaje de peticiones alto, evita usar nombres secuenciales. Si usas nombres de objetos completamente aleatorios, conseguirás la mejor distribución de la carga. Si quieres utilizar números secuenciales o marcas de tiempo en los nombres de los objetos, aleatoriza estos últimos agregando un valor de hash antes de los números secuenciales o las marcas de tiempo.
Por ejemplo, si los nombres originales de los objetos que deseas usar son estos:
my-bucket/2016-05-10-12-00-00/file1 my-bucket/2016-05-10-12-00-00/file2 my-bucket/2016-05-10-12-00-01/file3 ...
Se puede calcular el hash MD5 del nombre original del objeto y agregar los primeros 6 caracteres del hash como un prefijo al nombre del objeto. De esta manera, los nuevos nombres aparecerán así:
my-bucket/2fa764-2016-05-10-12-00-00/file1 my-bucket/5ca42c-2016-05-10-12-00-00/file2 my-bucket/6e9b84-2016-05-10-12-00-01/file3 ...
Un prefijo aleatorio más largo proporciona un escalado automático más eficaz cuando se alcanzan tasas de lectura y escritura muy altas. Por ejemplo, un prefijo de 1 carácter que use un valor hexadecimal aleatorio proporciona un escalado automático eficaz desde las 5000/1000 lecturas/escrituras por segundo iniciales hasta aproximadamente 80.000/16.000 lecturas/escrituras por segundo, ya que el prefijo tiene 16 valores posibles. Si tu caso práctico no necesita tasas más altas, un prefijo aleatorio de 1 carácter es igual de eficaz para aumentar las tasas de solicitudes que un prefijo aleatorio de 2 caracteres o más.
La aleatoriedad después de un prefijo común es eficaz en el prefijo
La cadena aleatoria no necesariamente debe estar al principio del nombre del objeto. Agregar una cadena aleatoria después de un prefijo común sigue posibilitando el funcionamiento del autoescalado, pero el efecto está limitado a ese prefijo, sin que se tenga en cuenta el resto del segmento.
Por ejemplo:
my-bucket/images/animals/4ce4c6af-6d27-4fa3-8a91-5701a8552705/1.jpg my-bucket/images/animals/9a495e72-1d85-4637-a243-cbf3e4a90ae7/2.jpg ... my-bucket/images/landscape/585356ac-ce89-47a8-bdd2-78a86b58fee6/1.jpg my-bucket/images/landscape/2550ae5b-395e-4243-a29b-bbf5aece60ef/2.jpg ... my-bucket/images/clouds/1.jpg my-bucket/images/clouds/2.jpg ...
La nomenclatura anterior permite el autoescalado eficiente de objetos en images/animals
y images/landscape,
, pero no en images/clouds
.
La aleatoriedad después de prefijos secuenciales no es tan eficaz
Como se ha mencionado anteriormente, usar una cadena aleatoria después de un prefijo común solo ayuda a escalar automáticamente con ese prefijo. Una vez que las solicitudes cambien a un nuevo prefijo, es posible que ya no te beneficies de los efectos de escalado automático anteriores. Esto supone un problema, sobre todo cuando los prefijos siguen un patrón secuencial.
Por ejemplo, si escribes archivos con un nuevo prefijo basado en la marca de tiempo cada hora:
my-bucket/2016-05-10-00/cf9a7b95-0d2e-4466-9596-840ff388ddbd my-bucket/2016-05-10-00/f1e16a88-16b8-4c66-ba66-a225c87be80c my-bucket/2016-05-10-00/646d8272-4a88-4dc2-b2d4-d537c778df41 ... my-bucket/2016-05-10-01/bdcba6de-ac25-4c27-8550-0d08f249e69d my-bucket/2016-05-10-01/a32c867c-09a9-4d65-9668-ddd4ebe4138b my-bucket/2016-05-10-01/d619485c-5243-4a4e-8ef3-0f7e1d26ce1d ...
Aunque el autoescalado ayuda a aumentar la tasa de escritura en un prefijo a lo largo del tiempo, la tasa de escritura se restablece al principio de cada hora. Esto provoca una tasa de escritura no óptima y aumentos periódicos de la latencia y la tasa de errores. Si necesitas escribir en prefijos diferentes a lo largo del tiempo, para evitar este problema, asegúrate de que los nuevos prefijos estén distribuidos de forma uniforme en todo el intervalo de claves.
Reordenar las operaciones en bloque para distribuir la carga de manera uniforme en los intervalos de claves
En ocasiones, querrás subir o eliminar en bloque algunos datos de Cloud Storage. En ambos casos, es posible que no tengas control sobre los nombres de los objetos. Sin embargo, puedes controlar el orden en el que se suben o eliminan los objetos para conseguir la mayor velocidad de escritura o eliminación posible.
Para ello, debe distribuir las subidas o eliminaciones en varios prefijos. Por ejemplo, si tienes muchas carpetas y muchos archivos en cada carpeta para subir, una buena estrategia es subir archivos de varias carpetas en paralelo y elegir aleatoriamente qué carpetas y archivos se suben. De esta forma, el sistema puede distribuir la carga de forma más uniforme en todo el intervalo de claves, lo que le permite alcanzar una tasa de solicitudes alta después del aumento inicial.
Siguientes pasos
- Consulta las cuotas y los límites de Cloud Storage.
- Consulta la estrategia de reintentos recomendada para las solicitudes a Cloud Storage.