Nouvelle limitation du débit des Assemblies pour plus de stabilité
Ces derniers temps, nous avons connu des ralentissements, des temps d’attente en file plus longs et des taux d’erreur en hausse. Outre les pannes de Route 53, de RDS et du LAN que nous avons subies sur EC2, certains de ces problèmes ont aussi été causés par des utilisateurs qui envoyaient trop de requêtes à la fois, par exemple en important une vaste bibliothèque de vidéos ou d’images. Aujourd’hui, nous y remédions en introduisant une limitation de débit.
De manière générale, le comportement d’un client ne devrait pas affecter celui des autres. Comme tous nos clients partagent encore une seule file d’attente de Jobs, nous ne pouvons pas le garantir sans limites de débit. Nous avons déjà résolu la plupart des problèmes en introduisant des files d’attente prioritaires (lorsqu’un client a X Jobs en file d’attente, ses Jobs suivants sont ajoutés à la fin de la file, tandis que les Jobs des autres clients sont placés en tête) et en réduisant le temps de mise à l’échelle à 2 minutes par machine à huit cœurs, entre autres.
Mais aussi vite que nous puissions monter en charge, notre monde physique a toujours ses limites. Nous avons déjà connu d’importants imports par lots, lors desquels des utilisateurs importaient des milliers de vidéos à la fois, ou des dizaines de milliers d’images. Notre plateforme est alors montée jusqu’à 100 machines, mais l’exécution des Assemblies d’autres clients pouvait encore durer jusqu’à 90 minutes, ce qui n’est absolument pas acceptable.
Outre les imports massifs légitimes, un code d’intégration bogué peut aussi envoyer trop de requêtes en très peu de temps. Cela peut entraîner des factures élevées en fin de mois, que le client n’avait pas prévues.
Bref, nous réglons ces problèmes en limitant les requêtes que vous pouvez envoyer.
Pour l’instant, nous limitons uniquement le nombre d’Assemblies que vous pouvez créer, à 250 par minute. Nous estimons que c’est largement suffisant pour un usage raisonnable. Nous évaluerons de près l’impact de cette mesure et introduirons d’autres limites si nécessaire.
Si jamais vous atteignez la limite de débit, vous recevrez une erreur 413 RATE_LIMIT_REACHED. Le JSON
de l’erreur contient une sous-clé info.retryIn, qui indique le nombre de secondes à attendre avant de
pouvoir créer votre prochaine Assembly. En fournissant cette information, nous espérons
aider nos clients à réaliser une intégration fluide, et nous voulons nous assurer que votre import
n’est pas ralenti ne serait-ce qu’une seconde de plus que nécessaire.
N’oubliez pas que les limites de requêtes sont une fonctionnalité qui protège notre plateforme contre une utilisation excessive (le plus souvent illégitime), pour que tout se déroule plus sereinement pour tout le monde. Nous autorisons aussi des limites de débit différentes selon les clients. Si vous estimez avoir besoin d’une limite de débit plus élevée, veuillez créer un ticket de support et je l’augmenterai volontiers.
