Lineamientos de distribución de acceso y porcentaje de solicitudes

Cloud Storage es un servicio con alta escalabilidad que usa tecnología de ajuste de escala automático para lograr tasas de solicitudes muy altas. En esta página, se presentan los lineamientos que proporciona Cloud Storage para optimizar el escalamiento y el rendimiento.

Ajuste de escala automático

Cloud Storage es un servicio de instancia múltiple, lo que significa que los usuarios comparten el mismo conjunto de recursos subyacentes. Para optimizar el uso de estos recursos compartidos, los depósitos tienen una capacidad de E/S inicial de unas 1,000 solicitudes de escritura por segundo y 5,000 solicitudes de lectura por segundo, que promedian 2.5 PB escritos y 13 PB leídos por mes para objetos de 1 MB. A medida que crece la tasa de solicitudes en un depósito determinado, Cloud Storage aumenta de forma automática la capacidad de E/S para ese depósito mediante la distribución de la carga de solicitudes entre varios servidores.

Tiempo de redistribución de cargas

A medida que un depósito se acerca a su límite de capacidad de E/S, Cloud Storage, por lo general, tarda unos minutos en detectar y redistribuir la carga entre un número mayor de servidores según corresponda. Por lo tanto, si la tasa de solicitudes en tu depósito aumenta más rápido de lo que Cloud Storage puede realizar esta redistribución, es posible que te encuentres con límites temporales, en particular mayor latencia y mayores tasas de error. El aumento gradual de la tasa de solicitudes de tus depósitos, como se describe a continuación, evita esa latencia y esos errores.

Indexación de claves de objeto

Cloud Storage admite la enumeración de objetos coherente, lo que permite a los usuarios ejecutar flujos de trabajo de procesamiento de datos con facilidad en Cloud Storage. Para proporcionar una enumeración de objetos coherente, Cloud Storage mantiene un índice de claves de objetos para cada depósito. Este índice se almacena en orden lexicográfico y se actualiza cuando se escriben o borran objetos de un depósito. Agregar y borrar objetos cuyas claves existen en un rango pequeño del índice aumenta de forma natural las posibilidades de contención.

Cloud Storage detecta esa contención y redistribuye de forma automática las cargas en el rango del índice afectado entre servidores múltiples. De forma similar al escalamiento de la capacidad de E/S de un depósito, cuando se accede a un nuevo rango del índice, por ejemplo, cuando se escriben objetos con un nuevo prefijo, debes aumentar de forma gradual la tasa de solicitudes, como se describe a continuación. No hacerlo puede causar mayor latencia y mayores tasas de errores de forma temporal.

Recomendaciones

Las siguientes secciones proporcionan recomendaciones sobre cómo aumentar la tasa de solicitudes, elegir claves de objeto y distribuir solicitudes para evitar límites temporales en tu depósito.

Aumenta la tasa de solicitudes de forma gradual

Para asegurarte de que el ajuste de escala automático de Cloud Storage siempre ofrezca el mejor rendimiento, debes aumentar de forma gradual tu tasa de solicitudes para cualquier depósito que no tuvo una tasa de solicitudes alta durante varias semanas o que tiene un nuevo rango de claves de objeto. Si tu tasa de solicitudes es inferior a 1,000 solicitudes de escritura por segundo o 5,000 solicitudes de lectura por segundo, no se necesita ningún aumento. Si se espera que tu tasa de solicitudes supere estos umbrales, debes comenzar con una tasa de solicitudes inferior o cercana a los umbrales y luego duplicar la tasa de solicitudes cada 20 minutos o más.

Si te encuentras con algún problema, como un aumento de la latencia o las tasas de errores, pausa o reduce la tasa de solicitudes de forma temporal a fin de que Cloud Storage tenga más tiempo para escalar tu depósito. Debes usar la retirada exponencial para reintentar tus solicitudes cuando recibes errores con códigos de respuesta 5xx o 429 desde Cloud Storage.

Usa una convención de nombres que distribuya las cargas de manera uniforme entre los rangos de claves

El ajuste de escala automático de un rango de índice se puede hacer más lento cuando se usan nombres secuenciales, como las claves de objeto basadas en una secuencia de números o una marca de tiempo. Esto ocurre porque las solicitudes cambian todo el tiempo a un nuevo rango de índice, lo que hace que la redistribución de las cargas sea más difícil y menos efectiva.

Para mantener una alta tasa de solicitudes, evita usar nombres secuenciales. Usar nombres de objetos aleatorios brinda la mejor distribución de cargas. Si deseas usar números secuenciales o marcas de tiempo como parte de los nombres de tus objetos, haz aleatorios los nombres de los objetos mediante un valor de hash antes del número de secuencia o la marca de tiempo.

Por ejemplo, si los nombres de los objetos originales que deseas usar son los siguientes:

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
...

Puedes calcular el hash MD5 del nombre del objeto original y agregar los primeros 6 caracteres del hash como un prefijo al nombre del objeto. Los nuevos nombres de los objetos se convierten en los siguientes:

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
...

La aleatoriedad después de un prefijo en común es efectiva bajo el prefijo

Ten en cuenta que no es necesario que la string aleatoria esté al principio del nombre del objeto. Agregar una string aleatoria después de un prefijo común también permite que el ajuste de escala automático funcione, pero el efecto se limita a ese prefijo, sin tener en cuenta el resto del depósito.

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 convención de nombres anterior permite el ajuste de escala automático eficiente de los objetos en images/animals e images/landscape,, pero no en images/clouds.

La aleatoriedad después de prefijos secuenciales no es tan efectiva

Como se mencionó antes, usar una string aleatoria después de un prefijo común solo ayuda en el ajuste de escala automático bajo ese prefijo. Una vez que las solicitudes cambian a un nuevo prefijo, es posible que ya no te beneficies de los efectos de ajuste de escala automático anteriores. Esto es problemático en particular cuando los prefijos siguen un patrón secuencial.

Por ejemplo, si escribes archivos con un nuevo prefijo basado en 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 ajuste de escala automático ayuda a aumentar la tasa de escritura bajo un prefijo a lo largo del tiempo, la tasa de escritura se reinicia al comienzo de cada hora. Esto da como resultado una tasa de escritura deficiente y aumentos periódicos en la latencia y la tasa de errores. Si necesitas escribir en diferentes prefijos a lo largo del tiempo, asegúrate de que los nuevos prefijos se distribuyan de forma uniforme en todo el rango de claves para evitar este problema.

Reordena las operaciones masivas para distribuir las cargas de manera uniforme entre los rangos de claves

En ocasiones, necesitarás realizar una carga o eliminación masiva de datos en Cloud Storage. En ambos casos, es posible que no tengas control sobre los nombres de los objetos. Sin embargo, puedes controlar el orden en que se suben o borran los objetos para lograr la mayor tasa de escritura o eliminación posible.

Para hacerlo, debes distribuir las cargas o eliminaciones entre múltiples prefijos. Por ejemplo, si tienes que subir muchas carpetas y muchos archivos dentro de cada carpeta, una buena estrategia es subir desde varias carpetas en paralelo y elegir de forma aleatoria qué carpetas y archivos se suben. Si haces esto, el sistema puede distribuir las cargas de manera más uniforme en todo el rango de claves, lo que te permite lograr una alta tasa de solicitudes después del aumento inicial.

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.