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 Object
API 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"?
fuente
Respuestas:
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.
fuente