2017-10-17 2 views
0

J'ai un service qui envoie 10k demandes PUT à S3 pour chaque seconde. Le S3 était capable de gérer ces charges pendant plusieurs minutes, mais a commencé à lancer une exception SlowDown après cela. Il ralentit mon service à un rythme inacceptable.S3 SlowDown: Veuillez réduire votre taux de demande d'exception

J'ai lu this et mis en œuvre la meilleure pratique suggérée. Voici le format du préfixe: bucket-name/[First four of UUID]-[YYYYmmddhhiiss]/[random UUID]/[random UUID].json. La méthode n'a pas fonctionné cependant.

Une idée de comment surmonter cette erreur? Je vous remercie! P.S: J'ai demandé l'augmentation de la limite PUT au centre de support AWS. Ils ont suggéré les étapes ci-dessus qui n'ont pas fonctionné.

+0

10K demandes PUT chaque seconde, de façon continue, coûterait ~ 129,600.00 $/mois ... Alors, quel est votre cas d'utilisation pour une si grande quantité de trafic? –

+0

@ michael-sqlbot Le flux de travail est simple. Chaque requête va créer une requête PUT à S3. Le nombre de requêtes par seconde sera d'environ 10k. Nous allons passer au système batch pour pouvoir diminuer les demandes PUT. –

+0

Combien de demandes avez-vous réussi à faire, par seconde? Combien de temps dure ce processus? Il ne fonctionne évidemment pas 24 × 7 × 365, ce que signifie "* chaque * seconde". –

Répondre

0

S3 est distribué, et vous devez vous assurer que vous ne créez pas de hotspots. Vous pouvez éviter cela en vous assurant que vos clés d'objet sont vraiment aléatoires. Déplacez donc le [randome UUID] vers la première partie de votre clé d'objet. Et si vous ne générez pas d'UUID vraiment aléatoires (c'est-à-dire que les 4 premiers caractères sont peut-être similaires pour chaque objet), essayez d'inverser l'UUID.

Plus de conseils peuvent être trouvés here

+0

Cela ne fonctionne toujours pas. Je vais diminuer la demande de Put S3 en utilisant le système batch. Merci pour le lien cependant, c'est très utile. –

+0

Si vous faites une rafale de 10k requêtes/s, essayez de placer cette charge dans une file d'attente (SQS), puis distribuez la charge via les noeuds de traitement. – chris

+0

Cela va résoudre le problème! Mais malheureusement, l'ajout d'un autre composant dans le flux de travail n'est pas une option. –