¿Qué significa el nuevo anuncio "Rendimiento de la tasa de solicitud aumentada S3"?

12

El 17 de julio de 2018 hubo un anuncio oficial de AWS que explicaba que ya no es necesario aleatorizar los primeros caracteres de cada clave de objeto S3 para lograr el máximo rendimiento: https://aws.amazon.com/about-aws/whats-new / 2018/07 / amazon-s3-anuncia-aumento-rendimiento-tasa-solicitud /

Amazon S3 anuncia un mayor rendimiento de la tasa de solicitud

Publicado en: 17 de julio de 2018

Amazon S3 ahora proporciona un mayor rendimiento para admitir al menos 3.500 solicitudes por segundo para agregar datos y 5.500 solicitudes por segundo para recuperar datos, lo que puede ahorrar un tiempo de procesamiento significativo sin cargo adicional. Cada prefijo S3 puede admitir estas tasas de solicitud, lo que facilita el aumento significativo del rendimiento.

Las aplicaciones que se ejecutan en Amazon S3 hoy disfrutarán de esta mejora de rendimiento sin cambios, y los clientes que crean nuevas aplicaciones en S3 no tienen que realizar ninguna personalización de aplicaciones para lograr este rendimiento. El soporte de Amazon S3 para solicitudes paralelas significa que puede escalar el rendimiento de su S3 por el factor de su clúster de cómputo, sin realizar ninguna personalización en su aplicación. El rendimiento se escala por prefijo, por lo que puede usar tantos prefijos como necesite en paralelo para lograr el rendimiento requerido. No hay límites para la cantidad de prefijos.

Este aumento del rendimiento de la tasa de solicitud S3 elimina cualquier guía previa para aleatorizar los prefijos de objetos para lograr un rendimiento más rápido. Eso significa que ahora puede usar patrones de nombres lógicos o secuenciales en nombres de objetos S3 sin ninguna implicación de rendimiento. Esta mejora ahora está disponible en todas las regiones de AWS. Para obtener más información, visite la Guía del desarrollador de Amazon S3.

Eso es genial, pero también es confuso. Dice que cada prefijo S3 puede admitir estas tasas de solicitud, lo que facilita el aumento significativo del rendimiento

Pero dado que los prefijos y delimitadores son solo argumentos para la GET Bucket (List Objects)API cuando se enumera el contenido de los depósitos, ¿cómo puede tener sentido hablar sobre el rendimiento de recuperación de objetos "por prefijo". Cada llamada a GET Bucket (List Objects)puede elegir el prefijo y delimitador que desee, por lo que los prefijos no son una entidad predefinida.

Por ejemplo, si mi cubo tiene estos objetos:

a1/b-2
a1/c-3

Entonces puedo elegir usar "/" o "-" como mi delimitador cada vez que enumero el contenido del depósito, por lo que podría considerar que mis prefijos son

a1/ 

o

a1/b-
a1/c-

Pero como la GET ObjectAPI usa la clave completa, el concepto de un prefijo o delimitador particular no existe para la recuperación de objetos. Entonces, ¿puedo esperar 5,500 requerimientos / segundo a1/o, alternativamente, 5,500 requerimientos / segundo a1/b-y 5,500 encendido a1/c-?

Entonces, ¿alguien puede explicar qué significa el anuncio cuando sugiere un nivel particular de rendimiento (por ejemplo, +5,500 solicitudes por segundo para recuperar datos) para "cada prefijo s3"?

John Rees
fuente
Creo que tengo una explicación para esto, pero estoy buscando ver si puedo encontrar alguna confirmación. Sospecho que tiene que ver con el algoritmo de división de partición de índice, que es automático y se basa en la carga de tráfico ... y léxico en lugar de hash.
Michael - sqlbot

Respuestas:

9

Lo que en realidad se denomina aquí como prefijo parece ser una simplificación excesiva que realmente se refiere a cada partición del índice de depósito. El índice es léxico, por lo que las divisiones se producen en función de los caracteres iniciales de la clave del objeto. Por lo tanto, se conoce como el prefijo .

S3 gestiona las particiones de índice de forma automática y transparente, por lo que la definición precisa de un "prefijo" aquí es en realidad algo imprecisa: es "lo que S3 decida que es necesario para soportar la carga de trabajo de su depósito". S3 divide las particiones de índice en respuesta a la carga de trabajo, por lo que dos objetos que podrían tener el mismo "prefijo" hoy podrían tener prefijos diferentes mañana, todo hecho en segundo plano.

En este momento, a1 / a -... y a1 / b -... y a1 / c -... pueden ser un solo prefijo. Pero arroje suficiente tráfico al depósito, y S3 puede decidir que la partición debe dividirse, de modo que mañana, a1 / a- y a1 / b- pueden estar en un prefijo, mientras que a1 / c- puede estar en su propio prefijo. (Es decir, las claves <a1 / c- están en una partición, mientras que las claves> = a1 / c- ahora están en una partición diferente).

Dónde y cuándo y específicamente qué umbral desencadena el comportamiento de división no está documentado, pero parece estar relacionado solo con el número de solicitudes, y no con el número o el tamaño de los objetos. Anteriormente, estas particiones se limitaban a unos cientos de solicitudes por segundo cada una, y eso se ha incrementado significativamente.

Michael - sqlbot
fuente
1
Muy interesante y creíble. Sin embargo, dado que los prefijos son dinámicos en función de la carga, seguramente eso no tiene sentido asignar ninguna medida de rendimiento específica "por prefijo". Si los prefijos de su depósito cambian dinámicamente, entonces no hay una medida de rendimiento confiable. ¿O tal vez podría deducir que los prefijos deberían, en teoría, cambiar dinámicamente hasta que pueda esperar 5.500 requisitos / segundo por objeto S3?
John Rees
1
La medida del rendimiento sigue siendo útil porque la escala del cubo solo tiende a ir en una dirección: hacia arriba, no hacia abajo. El aparente absurdo de escalar a un solo objeto por partición parece desaparecer en gran medida cuando te das cuenta de cuánto dinero ganaría AWS si pagaras 5k + req / s por objeto.
Michael - sqlbot
1
Sí, estaba siendo un poco pedante con el único objeto por partición. :-) Sin embargo, más en serio, supongo que esto significa que podría esperar que si mi depósito de 10000 objetos contiene solo 10 objetos populares, entonces con suerte S3 eventualmente se repartirá hasta que cada uno de los 10 pueda obtener 5k requisitos / segundo cada uno mientras los otros languidecen en un par de particiones grandes ¿Plausible?
John Rees
2
Tengo toda la confianza de que S3 se adaptaría a la carga de trabajo, sí. La orientación oficial para el alto tráfico en el lado de la solicitud es, como antes, usar CloudFront junto con S3, ya que CloudFront está distribuido globalmente y almacenará en caché los objetos en los bordes más cercanos a los espectadores que los soliciten. El precio es tal que agregar CloudFront a S3 a menudo no tiene esencialmente ningún impacto en el costo total (porque S3 no factura ningún ancho de banda cuando llega la solicitud de CloudFront para atender una falta de caché).
Michael - sqlbot
Gracias michael Muy buenas respuestas cuidadosas muy apreciadas.
John Rees