Le 17 juillet 2018, une annonce officielle d'AWS expliquait qu'il n'était plus nécessaire de randomiser les premiers caractères de chaque clé d'objet S3 pour obtenir des performances maximales: https://aws.amazon.com/about-aws/whats-new / 2018/07 / amazon-s3-annonce-une-augmentation-des-performances-de-taux /
Amazon S3 annonce une augmentation des performances du taux de demandes
Publié le: 17 juil.2018
Amazon S3 offre désormais des performances accrues pour prendre en charge au moins 3 500 demandes par seconde pour ajouter des données et 5 500 demandes par seconde pour récupérer des données, ce qui peut économiser un temps de traitement important sans frais supplémentaires. Chaque préfixe S3 peut prendre en charge ces taux de demande, ce qui simplifie considérablement les performances.
Les applications exécutées sur Amazon S3 aujourd'hui bénéficieront de cette amélioration des performances sans aucun changement, et les clients qui créent de nouvelles applications sur S3 n'ont pas à effectuer de personnalisation d'application pour atteindre ces performances. La prise en charge d'Amazon S3 pour les demandes parallèles signifie que vous pouvez faire évoluer vos performances S3 selon le facteur de votre cluster de calcul, sans apporter de personnalisation à votre application. Échelles de performances par préfixe, vous pouvez donc utiliser autant de préfixes que nécessaire en parallèle pour atteindre le débit requis. Il n'y a pas de limite au nombre de préfixes.
Cette augmentation des performances du taux de demandes S3 supprime toutes les instructions précédentes pour randomiser les préfixes d'objet pour obtenir des performances plus rapides. Cela signifie que vous pouvez désormais utiliser des modèles de dénomination logiques ou séquentiels dans la dénomination d'objet S3 sans aucune incidence sur les performances. Cette amélioration est désormais disponible dans toutes les régions AWS. Pour plus d'informations, consultez le Guide du développeur Amazon S3.
C'est super, mais c'est aussi déroutant. Il indique que chaque préfixe S3 peut prendre en charge ces taux de demande, ce qui simplifie considérablement les performances.
Mais comme les préfixes et délimiteurs ne sont que des arguments de l' GET Bucket (List Objects)
API lors de la liste du contenu des compartiments, comment peut-il être logique de parler des performances de récupération d'objet "par préfixe". Chaque appel à GET Bucket (List Objects)
peut choisir le préfixe et le délimiteur qu'il souhaite, donc les préfixes ne sont pas une entité prédéfinie.
Par exemple, si mon compartiment contient ces objets:
a1/b-2
a1/c-3
Ensuite, je peux choisir d'utiliser "/" ou "-" comme délimiteur chaque fois que j'énumère le contenu du compartiment, donc je pourrais considérer que mes préfixes sont soit
a1/
ou
a1/b-
a1/c-
Mais comme l' GET Object
API utilise la clé entière, le concept d'un préfixe ou d'un délimiteur particulier n'existe pas pour la récupération d'objet. Alors, puis-je m'attendre à 5500 req / sec a1/
ou alternativement à 5500 req / sec a1/b-
et à 5500 on a1/c-
?
Quelqu'un peut-il donc expliquer ce que l'on entend par annonce lorsqu'elle suggère un niveau particulier de performances (par exemple +5 500 demandes par seconde pour récupérer des données) pour "chaque préfixe s3"?
la source
Réponses:
Ce qui est en fait appelé ici comme un préfixe semble être une simplification excessive qui fait vraiment référence à chaque partition de l'index de compartiment. L'index est lexical, donc les divisions se produisent en fonction des premiers caractères de la clé d'objet. Par conséquent, il est appelé préfixe .
S3 gère les partitions d'index automatiquement et de manière transparente, donc la définition précise d'un "préfixe" ici est en fait quelque peu imprécise: c'est "tout ce que S3 décide est nécessaire pour prendre en charge la charge de travail de votre compartiment". S3 divise les partitions d'index en réponse à la charge de travail, de sorte que deux objets qui pourraient avoir le même "préfixe" aujourd'hui pourraient avoir des préfixes différents demain, tout cela en arrière-plan.
À l'heure actuelle, a1 / a -... et a1 / b -... et a1 / c -... peuvent être tous un seul préfixe. Mais jetez suffisamment de trafic dans le compartiment, et S3 peut décider que la partition doit être divisée, de sorte que demain, a1 / a- et a1 / b- peuvent être dans un préfixe, tandis que a1 / c- peut être dans son propre préfixe. (Autrement dit, les clés <a1 / c- sont dans une partition, tandis que les clés> = a1 / c- sont maintenant dans une partition différente).
Où et quand et spécifiquement quel seuil déclenche le comportement de fractionnement n'est pas documenté, mais il semble être lié uniquement au nombre de demandes, et non au nombre ou à la taille des objets. Auparavant, ces partitions étaient limitées à quelques centaines de requêtes par seconde chacune, et cela a été considérablement augmenté.
la source