Que signifie la nouvelle annonce «S3 Augmentation des performances des taux de demande»

12

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 ObjectAPI 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"?

John Rees
la source
Je pense avoir une explication à cela, mais je cherche à voir si je peux trouver une confirmation. Je soupçonne que cela a à voir avec l'algorithme de partage de partition d'index, qui est automatique et basé sur la charge de trafic ... et lexical plutôt que sur le hachage.
Michael - sqlbot

Réponses:

9

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

Michael - sqlbot
la source
1
Très intéressant et crédible. Cependant, étant donné que les préfixes sont dynamiques en fonction de la charge, cela ne rend sûrement aucun sens d'attribuer une mesure de performance spécifique «par préfixe». Si les préfixes de votre compartiment changent de manière dynamique, il n'existe aucune mesure de performance fiable. Ou peut-être pourrais-je en déduire que les préfixes devraient en théorie changer dynamiquement jusqu'à ce que je puisse m'attendre à 5500 req / sec par objet S3?
John Rees
1
La mesure des performances est toujours utile car la mise à l'échelle du bucket a tendance à n'aller que dans une seule direction - vers le haut, pas vers le bas. L'absurdité apparente de la mise à l'échelle vers un seul objet par partition semble en grande partie disparaître lorsque vous réalisez combien d'argent AWS gagnerait si vous payiez 5k + req / s par objet.
Michael - sqlbot
1
Oui, j'étais un peu pédant avec le seul objet par partition. :-) Cependant, plus sérieusement, je suppose que cela signifie que je pourrais m'attendre à ce que si mon compartiment d'objets 10000 ne contienne que 10 objets populaires, alors j'espère que S3 se répartirait finalement jusqu'à ce que chacun des 10 puisse obtenir 5 000 requêtes / s chacun tandis que les autres languissent dans quelques grandes partitions. Plausible?
John Rees
2
Je suis convaincu que S3 s'adapterait à la charge de travail, oui. Les conseils officiels pour le trafic élevé du côté des demandes consistent, comme précédemment, à utiliser CloudFront en conjonction avec S3, car CloudFront est distribué globalement et mettra en cache les objets dans les bords les plus proches des téléspectateurs qui les demandent. La tarification est telle que l'ajout de CloudFront à S3 n'a souvent pratiquement aucun impact sur le coût global (car S3 ne facture aucune bande passante lorsque la demande arrive de CloudFront pour traiter un cache manquant).
Michael - sqlbot
Merci Michael. Vraiment de bonnes réponses très appréciées.
John Rees