Read in English · Leer en español · Auf Deutsch lesen
Section 9.7 sur 9.8 · Avancé · 25 min de lecture
Planification de la capacité et tests de performances
Leçon vidéo
4 min · narré en anglais, avec sous-titresÉcouter seulement (audio)
Lire la transcription
Bienvenue dans la section neuf point sept. La planification de la capacité répond à l’avance à une seule question : aurons-nous assez de tout quand la demande atteindra son pic ? Les tests de performances en apportent la preuve.
Avant un grand mariage, un traiteur estime le nombre d’invités qui viendront. Il calcule combien d’assiettes chaque cuisinier peut servir en une heure. Il prévoit quelques employés de réserve au cas où quelqu’un tomberait malade. Il commande les fours supplémentaires des semaines à l’avance, parce qu’on ne peut pas les acheter le jour même. Et il organise une répétition grandeur nature, pour vérifier que la cuisine tient vraiment le coup. Les équipes logicielles font exactement la même chose.
D’abord, prévoyez la demande : la croissance, les pics saisonniers et les événements connus. Exprimez-la au pic, dans des unités comme les requêtes par seconde, et non en moyenne journalière. Ensuite, mesurez par des tests la charge qu’une instance ou une base de données peut supporter tout en respectant son objectif de latence. La limite pratique est le coude de la courbe du temps de réponse, et non le point où tout s’effondre. Troisièmement, ajoutez de la marge pour les erreurs de prévision, les rafales et les nouvelles tentatives, et assez de redondance pour survivre à la perte d’une instance ou d’une zone entière. Quatrièmement, commandez tout ce qui a un long délai d’approvisionnement. Un prestataire de paiement peut exiger plusieurs semaines de préavis pour relever une limite.
Les tests diffèrent par la charge qu’ils appliquent et par la question à laquelle ils répondent. Un test de charge monte jusqu’au pic prévu et s’y maintient, pour vérifier la latence et les erreurs. Un test de stress va bien au-delà du pic pour voir comment le système défaille, et s’il se rétablit. Un test d’endurance dure des heures ou des jours pour révéler les fuites lentes, par exemple de mémoire ou de connexions. Un test de pic fait passer la charge de faible à très élevée en quelques secondes, pour tester le retard de l’autoscaling et les limiteurs de débit. Et un test de point de rupture augmente régulièrement la charge jusqu’à ce que quelque chose cède, pour trouver la vraie limite et le premier goulot d’étranglement.
La façon dont le générateur de charge simule les utilisateurs compte énormément. Dans un modèle fermé, un nombre fixe d’utilisateurs virtuels envoient chacun une requête, attendent la réponse, font une pause et recommencent. Donc, quand le système ralentit, chaque utilisateur attend plus longtemps, et moins de requêtes arrivent. La charge baisse d’elle-même. Dans un modèle ouvert, les requêtes arrivent à un rythme fixé, que les précédentes aient reçu une réponse ou non. C’est ainsi que se comportent les vrais visiteurs d’un site web public. Donc, quand le système ralentit, la file d’attente et les temps de réponse ne cessent de grandir. Pour le trafic public et les ouvertures de billetterie, un test en modèle fermé peut être dangereusement optimiste.
Un piège voisin s’appelle l’omission coordonnée. Un test prévoit d’envoyer une requête toutes les dix millisecondes. À cinquante secondes, le système se fige pendant dix secondes. Un testeur en boucle fermée attend chaque réponse, donc il se bloque lui aussi. Il enregistre un échantillon de dix secondes, et environ neuf mille échantillons rapides. Mais selon le calendrier prévu, environ mille requêtes seraient arrivées pendant le blocage, retardées de dix secondes au plus, cinq en moyenne. Le rapport indique donc que le quatre-vingt-dix-neuvième percentile est d’une milliseconde. Une fois corrigé, il est d’environ neuf secondes. Le remède : des générateurs en modèle ouvert, qui mesurent à partir du moment où chaque requête devait être envoyée.
Planifions l’ouverture de billetterie d’une tournée des stades : cent quatre-vingt mille billets. Environ quatre cent mille fans sont attendus dans la salle d’attente virtuelle. À deux billets et demi par commande, soixante-douze mille commandes suffisent à vendre toute la tournée. La contrainte déterminante est la limite du prestataire de paiement : cent vingt paiements par seconde. En gardant un tiers pour les nouvelles tentatives, et avec quatre-vingts pour cent des fans qui achètent, l’équipe admet cent fans par seconde. Chaque fan passe environ quatre minutes dans le parcours d’achat, donc, d’après la loi de Little, vingt-quatre mille sont actifs simultanément. Cela fait trois mille deux cent cinquante requêtes par seconde. À quatre cents par instance, il faut neuf instances, ou quinze pour survivre à la perte d’une zone, démarrées avant neuf heures et demie. La salle d’attente elle-même reçoit vingt mille requêtes par seconde, servies en périphérie du CDN, sans jamais atteindre la couche API. La tournée est entièrement vendue en environ quinze minutes. Doubler les serveurs ne vendrait pas les billets plus vite : c’est la ressource partagée la plus rare qui donne le rythme.
La section complète traite des outils de test, des données de test réalistes et des budgets de performance. Ensuite, dans la section neuf point huit, la dernière de ce chapitre, nous verrons l’ingénierie du chaos et les incidents. À très vite.
Ce qu’il faut savoir
- La planification de la capacité prévoit la demande de pointe, mesure la capacité par unité dans des conditions réalistes, ajoute de la marge et de la redondance, et commande tout ce qui a un long délai d’approvisionnement, y compris les quotas et les limites des tiers.
- Les tests de charge, de stress, d’endurance, de pic et de point de rupture répondent à des questions différentes : tenir les objectifs au pic, comportement en cas de défaillance au-delà, dégradation dans le temps, réaction aux hausses soudaines et limite réelle.
- Les modèles de charge fermés ralentissent quand le système ralentit, tandis que dans les modèles ouverts les arrivées continuent à un rythme fixé ; le trafic public et les ouvertures de billetterie sont ouverts, donc les tests en modèle fermé peuvent être dangereusement optimistes (Schroeder, Wierman et Harchol-Balter, 2006).
- L’omission coordonnée (Gil Tene) masque les réponses lentes lorsqu’un testeur attend les réponses avant d’envoyer ; mesurez à partir de l’heure d’envoi prévue, avec des générateurs en modèle ouvert et des histogrammes complets.
- k6, Gatling, JMeter et Locust sont les principaux outils open source ; des scénarios réalistes, des volumes de données réalistes, les clés très sollicitées, la latence des dépendances et un générateur non saturé comptent davantage que l’outil.
- Les budgets de performance, comme les seuils des Core Web Vitals ou une répartition de la latence par saut, sont vérifiés automatiquement dans le pipeline de livraison en tant que fonctions d’aptitude.
- La ressource partagée la plus rare, souvent un tiers, fixe le taux d’admission sûr pour un événement comme l’ouverture d’une billetterie.
La capacité est un plan, pas un espoir
La planification de la capacité répond à l’avance à une seule question : aurons-nous assez de tout quand la demande atteindra son pic ? Tout
va bien au-delà des serveurs. Cela comprend les connexions à la base de données et le débit d’écriture, la mémoire du cache, les partitions du courtier de messages (message broker), les quotas du compte cloud, les limites de débit des tiers, les licences et les personnes d’astreinte. L’élasticité du cloud permet d’ajouter rapidement une partie de la capacité, mais pas toute : on ne double pas en quelques secondes une base de données primaire, un prestataire de paiement peut exiger plusieurs semaines de préavis pour relever une limite, et l’autoscaling (mise à l’échelle automatique, traité à la section 9.1) réagit en quelques minutes à un changement brutal qui survient en quelques secondes.
La méthode comporte quatre étapes, répétées selon un cycle régulier (chaque trimestre pour une croissance régulière, à chaque événement pour les lancements et les ouvertures de billetterie) :
Le cycle de planification de la capacité
- Prévoir la demandeCombinez la croissance organique (commandes par jour en hausse de 4 % par mois), la saisonnalité (pics du déjeuner et du dîner, vendredis soir, Noël) et les événements connus (une campagne marketing, l’ouverture de la billetterie d’un stade). Exprimez la demande dans les unités selon lesquelles le système passe à l’échelle : requêtes par seconde par parcours, écritures par seconde, messages par seconde, au pic, et non en moyenne journalière.
- Mesurer la capacité par unitéDéterminez, par des tests, quelle charge une instance, une base de données ou une partition peut supporter tout en respectant son SLO de latence. Le coude de la courbe du temps de réponse, là où la mise en file d’attente commence à dominer (section 2.4), est la limite pratique, et non le point où tout s’effondre.
- Ajouter de la marge et de la redondanceDimensionnez pour le pic prévu, plus une marge pour les erreurs de prévision, les rafales et les nouvelles tentatives, et de sorte que la perte d’une instance ou d’une zone de disponibilité entière laisse encore assez de capacité (redondance N+1 ou au niveau des zones).
- Planifier les délais d’approvisionnement et faire le bilanDressez la liste de ce qui demande du temps à obtenir (augmentations de quotas, capacité réservée, mises à niveau de bases de données, limites des tiers, matériel pour les systèmes sur site) et commandez-le suffisamment tôt. Ensuite, comparez la demande réelle à la prévision et améliorez le modèle.
Le calcul de dimensionnement avec la loi de Little a été détaillé à la section 9.1 ; cette section se concentre sur la manière d’obtenir des chiffres fiables à y injecter. L’erreur la plus courante en planification de la capacité n’est pas un mauvais calcul, mais une capacité par instance mesurée dans des conditions irréalistes ; la deuxième est d’oublier une contrainte partagée, comme une limite imposée par un tiers, qu’aucune marge de capacité (headroom) sur vos propres serveurs ne peut compenser.
Les types de tests de performances
Les tests de performances sont le seul moyen de mesurer la capacité, de trouver les goulots d’étranglement avant les clients et de vérifier qu’une version n’a pas aggravé la situation. Les tests diffèrent par la forme de charge qu’ils appliquent et par la question à laquelle ils répondent. Un test de charge vérifie le pic attendu ; un test de stress va au-delà pour voir comment le système défaille ; un test d’endurance (soak test) dure des heures pour révéler les fuites lentes ; un test de pic (spike test) vérifie les réactions à des sauts soudains ; un test de point de rupture augmente la charge jusqu’à ce que quelque chose cède, pour trouver la vraie limite.
Types de tests de performances
| Test | Question à laquelle il répond | Forme de la charge | Durée typique | Points à surveiller |
|---|---|---|---|---|
| Fumée (smoke) | Le script de test et l’environnement fonctionnent-ils seulement ? | Quelques utilisateurs | Quelques minutes | Erreurs de script, mauvais environnement |
| Charge | Atteignons-nous nos objectifs de latence et d’erreurs au pic attendu ? | Montée jusqu’au pic prévu, puis maintien | 30 à 60 minutes | Latence p99, taux d’erreur, saturation des ressources |
| Stress | Comment le système défaille-t-il au-delà du pic, et se rétablit-il ? | Montée jusqu’à 1,5 à 3 fois le pic, puis redescente | 30 à 60 minutes | Dégradation gracieuse, délestage de charge, temps de rétablissement |
| Endurance (soak) | Quelque chose se dégrade-t-il avec le temps ? | Charge normale ou de pic, maintenue | Des heures à des jours | Fuites de mémoire, files qui s’allongent, fuites de connexions, disque qui se remplit |
| Spike (investigation limitée dans le temps) | Pouvons-nous absorber un afflux soudain ? | Saut d’une charge faible à très élevée en quelques secondes | Quelques minutes | Retard de l’autoscaling, débordement des files, comportement du limiteur de débit |
| Point de rupture (capacité) | Où est la limite, et quel est le premier goulot d’étranglement ? | Montée régulière jusqu’à la défaillance | Jusqu’à la rupture | Le coude de la latence, la première ressource saturée |
Modèles de charge ouverts et fermés
Les générateurs de charge simulent les utilisateurs de l’une de deux manières, et choisir la mauvaise produit des résultats non seulement inexacts, mais dangereusement optimistes. Dans un modèle de charge fermé, l’outil fait tourner un nombre fixe d’utilisateurs virtuels ; chacun envoie une requête, attend la réponse, marque une pause (le temps de réflexion) et recommence. Si le système ralentit, chaque utilisateur virtuel envoie moins de requêtes, et la charge baisse d’elle-même. Dans un modèle de charge ouvert, les requêtes arrivent à un rythme fixé, indépendamment de la vitesse à laquelle les précédentes reçoivent une réponse, comme le font les vrais visiteurs d’un site web public : des milliers de fans qui appuient sur Acheter à 10:00 ne s’attendent pas les uns les autres.
Bianca Schroeder, Adam Wierman et Mor Harchol-Balter ont montré (Open Versus Closed: A Cautionary Tale
, NSDI 2006) que les deux modèles peuvent donner des temps de réponse très différents pour le même système et la même charge moyenne, et que des décisions d’ordonnancement ou de capacité réglées avec l’un peuvent être fausses avec l’autre. Les systèmes internes dont la population de clients est fixe, comme une application de centre d’appels utilisée par 300 agents, sont raisonnablement fermés. Le trafic internet public, les consommateurs pilotés par les événements alimentés par une file et les ouvertures de billetterie sont ouverts, ou presque. Pour de tels systèmes, c’est un test en modèle ouvert qui est réaliste ; les exécuteurs constant-arrival-rate et ramping-arrival-rate de k6, par exemple, le mettent en œuvre, tandis que son exécuteur constant-vus est fermé.
Fermé ou ouvert
Omission coordonnée (coordinated omission)
Gil Tene, d’Azul Systems, auteur de la bibliothèque HdrHistogram, a nommé une erreur de mesure qui touche de nombreux tests de latence et outils de supervision : l’omission coordonnée (coordinated omission). Un générateur de charge en boucle fermée attend chaque réponse avant d’envoyer la requête suivante. Quand le système se bloque, le générateur se bloque avec lui, si bien que les requêtes que de vrais utilisateurs auraient envoyées pendant le blocage, et qui auraient toutes été lentes, ne sont jamais envoyées ni mesurées. Le testeur se coordonne
avec le système qu’il teste et omet précisément les mauvais échantillons.
Prenons un test qui prévoit d’envoyer une requête toutes les 10 ms pendant 100 secondes à un service qui répond normalement en 1 ms. À 50 secondes, le service se fige pendant 10 secondes (une longue pause du ramasse-miettes, par exemple). Le testeur en boucle fermée enregistre environ 9000 échantillons rapides et un échantillon de 10 secondes : il indique donc un p99 de 1 ms, et même un p99,9 de 1 ms. Selon le calendrier prévu, pourtant, environ 1000 requêtes seraient arrivées pendant le blocage, et auraient attendu entre 10 secondes et 10 ms, soit environ 5 secondes en moyenne. Dix pour cent de toutes les requêtes ont été fortement retardées : le vrai p95 est d’environ 5 secondes, et le vrai p99 d’environ 9 secondes.
Ce que le testeur ne voit pas
Les remèdes consistent à utiliser des générateurs en modèle ouvert (à taux d’arrivée) pour les systèmes ouverts, à mesurer la latence à partir du moment où une requête devait être envoyée plutôt que du moment où elle l’a réellement été, à enregistrer des histogrammes complets plutôt que des moyennes, et à se méfier de tout rapport de latence dont le maximum est très au-dessus du p99,9 avec peu d’échantillons entre les deux. L’outil de benchmark HTTP modifié par Tene, wrk2, et les options de correction de HdrHistogram existent précisément pour cela. La même erreur apparaît dans la supervision en production lorsqu’une bibliothèque cliente ne mesure que les requêtes qu’elle a réussi à envoyer.
Les outils
Quatre outils open source couvrent la plupart des besoins. Apache JMeter est le vétéran : basé sur Java, avec un éditeur graphique de plans de test, de nombreux plug-ins de protocoles et des groupes de threads fermés par défaut. Gatling écrit les tests sous forme de code (Scala, Java et Kotlin, avec JavaScript et TypeScript ajoutés plus récemment), est efficace à forte charge et propose des profils d’injection ouverts et fermés. k6, maintenu par Grafana Labs, exécute des scripts de test en JavaScript sur un moteur écrit en Go, possède des exécuteurs explicites en modèle ouvert et fermé, et des seuils de réussite ou d’échec adaptés à l’intégration continue. Locust décrit le comportement des utilisateurs en Python et répartit la charge entre des processus de travail ; ses utilisateurs fonctionnent en boucle fermée. Des services commerciaux et hébergés dans le cloud ajoutent la génération de charge distribuée à grande échelle et les rapports.
L’outil compte moins que le scénario. Un bon script reproduit le mélange réel des parcours (d’après les statistiques de production : par exemple 70 % de navigation, 20 % de modifications du panier, 10 % de paiement), des temps de réflexion réalistes, des données réalistes (des utilisateurs, des restaurants et des places différents, et non le même 10 000 fois) et le bon modèle de charge ; il vérifie aussi que les réponses sont correctes, car une page d’erreur rapide n’est pas une requête réussie.
import http from 'k6/http';
import { check } from 'k6';
export const options = {
scenarios: {
onsale: {
executor: 'ramping-arrival-rate', // open model: arrivals per second
startRate: 100, timeUnit: '1s',
preAllocatedVUs: 2000, maxVUs: 20000,
stages: [
{ target: 4900, duration: '2m' }, // ramp to 1.5x design load
{ target: 4900, duration: '20m' }, // hold
],
},
},
thresholds: { // fail the run if missed
http_req_failed: ['rate<0.005'],
http_req_duration: ['p(99)<500'],
},
};
export default function () {
const res = http.get('https://perf.tickets.example/api/events/42/seats');
check(res, { 'status is 200': (r) => r.status === 200 });
}Des environnements et des données réalistes
Un test de performances ne vaut que ce que vaut son environnement. Une base de données de test de 10 000 lignes dont les index tiennent en mémoire ne dit rien de la production avec 200 millions de lignes dont les index n’y tiennent pas. La liste de contrôle ci-dessous repère les différences habituelles.
Taille et forme des données : des volumes à l’échelle de la production et des distributions réalistes, y compris les clés très sollicitées, comme les restaurants les plus populaires ou les meilleures places, qui créent une contention qu’un test uniforme ne voit jamais. Mêmes briques : les mêmes types d’instances, limites de conteneurs, configuration de base de données, tailles de pools de connexions et topologie réseau (y compris les sauts entre zones). État du cache : testez à la fois avec un cache chaud et un cache froid, car un déploiement ou un failover les vide (section 7.6). Dépendances : des services tiers remplacés par des bouchons qui reproduisent leur vraie distribution de latence et leurs limites de débit, pas des réponses instantanées. Isolement : aucun test d’une autre équipe partageant l’environnement, sinon les résultats ne sont que du bruit. Le générateur lui-même : une capacité de génération de charge suffisante, aux bons emplacements ; un générateur qui tourne à 100 % de CPU se mesure lui-même.
Certaines organisations testent en production, avec prudence, parce qu’aucune copie ne lui ressemble tout à fait : utilisateurs synthétiques et événements de test exclus des rapports métier, duplication du trafic (traffic shadowing : copie de vraies requêtes vers une nouvelle version dont les réponses sont jetées) et montées progressives avec conditions d’arrêt automatique. Cela exige les mêmes garde-fous que les expériences de chaos : un faible rayon d’impact (blast radius), un interrupteur d’arrêt d’urgence et une surveillance étroite des SLO.
Les budgets de performance
Un budget de performance est une limite qu’une modification ne doit pas dépasser, convenue à l’avance et vérifiée automatiquement, afin que les performances ne s’érodent pas une petite régression après l’autre. Pour les frontends web, les budgets portent sur le poids des pages, la taille des scripts et les Core Web Vitals, pour lesquels les seuils de Google pour une bonne expérience, mesurés au 75e percentile des chargements de pages, sont un Largest Contentful Paint de 2,5 secondes au maximum, un Interaction to Next Paint de 200 ms au maximum et un Cumulative Layout Shift de 0,1 au maximum.
Pour les backends, un budget de latence répartit un SLO de bout en bout entre les sauts d’un parcours. L’étape de paiement de la plateforme de livraison de repas a un objectif de p99 de 800 ms ; l’équipe attribue 20 ms à la passerelle, 60 ms au service de commandes, 80 ms à la tarification, 450 ms au paiement (dont l’essentiel pour le prestataire de cartes externe), 40 ms à la base de données, 100 ms au réseau et à la sérialisation, et garde 50 ms en réserve. Chaque équipe connaît désormais son propre objectif, et une modification qui pousse la tarification à 150 ms apparaît comme un dépassement de budget avant de devenir un non-respect du SLO. En toute rigueur, les percentiles des parties ne s’additionnent pas pour donner le percentile de l’ensemble : traitez donc cette répartition comme une allocation d’ingénierie, et vérifiez séparément le chiffre de bout en bout.
On fait respecter les budgets en exécutant un test de performances court et stable dans le pipeline de livraison et en faisant échouer le build lorsqu’un seuil est franchi, comme le font les seuils k6 ci-dessus. C’est une fonction d’aptitude pour les performances. Les tests du pipeline doivent être reproductibles plus que réalistes : même environnement, mêmes données, même charge, pour qu’une variation de 10 % signale une vraie régression et non du bruit.
Exemple commenté
Exemple commenté : un plan de capacité pour l’ouverture d’une billetterie
Il s’agit d’un événement différent, et plus important, que l’ouverture de billetterie de la section 9.3, avec ses propres chiffres. Une tournée dans des stades compte trois soirs de 60 000 places, soit 180 000 billets au total, mis en vente un vendredi à 10:00. Les fans entrent dans une salle d’attente virtuelle et sont admis dans le parcours d’achat à un rythme contrôlé. Les tests de charge ont mesuré le coude de chaque instance d’API à 520 requêtes par seconde ; l’équipe planifie sur la base de 400 pour garder le p99 sous 500 ms.
| Prévision de la demande | 520 000 inscriptions en prévente, dont environ 75 % devraient se présenter : prévoir 400 000 fans dans la salle d’attente. À 2,5 billets par commande en moyenne, 72 000 commandes suffisent à vendre toute la tournée. |
|---|---|
| Contrainte déterminante | La limite convenue avec le prestataire de paiement est de 120 paiements par seconde. Avec 80 % des fans admis qui achètent et un tiers de la limite réservé aux nouvelles tentatives et aux erreurs, admettre 100 fans par seconde (6000 par minute) : 80 paiements par seconde. |
| Fans actifs (loi de Little) | 100 fans/s × 240 s dans le parcours d’achat = 24 000 fans actifs simultanément |
| Charge de l’API | 100 fans/s × 25 requêtes par parcours = 2500 requêtes/s ; × 1,3 pour la concentration des appels au plan de salle = 3250 requêtes/s de charge de conception |
| Instances | 3250 / 400 = 8,1, donc 9 instances ; pour survivre à la perte d’une zone sur trois, les 9 doivent tenir dans deux zones : 5 par zone × 3 = 15 instances, démarrées avant 09:30 |
| Base de données des places bloquées | 1,5 tentative de blocage par fan = 150 écritures/s, pour une capacité mesurée de 600 écritures/s avec un p99 sous 50 ms : 25 % d’utilisation, mais tester la contention sur les places les plus demandées |
| Salle d’attente | 400 000 fans qui interrogent le serveur toutes les 20 s = 20 000 requêtes/s, servies en périphérie du CDN, sans jamais atteindre la couche API |
| Résultat | 72 000 commandes / 80 par seconde = 900 s : tout est vendu en 15 minutes environ, après l’admission d’environ 90 000 fans ; la salle d’attente doit prévenir rapidement tous les autres |
| Délais d’approvisionnement | Limite de paiement confirmée 3 semaines avant ; quota cloud relevé 1 semaine avant ; test de charge à 1,5x (environ 4900 requêtes/s), test de pic et test d’endurance de 2 heures 2 semaines avant, dans un environnement de taille production |
Le taux d’admission est fixé par la ressource partagée la plus rare, ici le prestataire de paiement, et non par le nombre de serveurs que l’équipe peut s’offrir ; doubler les serveurs ne vendrait pas les billets plus vite.
L’autoscaling est ici un filet de sécurité, pas le plan : un saut de zéro à 3250 requêtes par seconde à 10:00:00 arrive plus vite que les instances ne peuvent démarrer.
Vérifiez votre compréhension
Pourquoi un test de charge en modèle fermé tend-il à sous-estimer les temps de réponse d’un site web public ?
Parce que ses utilisateurs virtuels attendent chaque réponse avant d’en envoyer d’autres : quand le système ralentit, la charge offerte baisse, alors que les vrais visiteurs continuent d’arriver et que les files s’allongent.
Un testeur affiche un p99 de 2 ms et un maximum de 8 s, presque sans échantillons entre les deux. Que devez-vous soupçonner ?
Une omission coordonnée : le testeur s’est probablement bloqué avec le système et n’a pas enregistré les nombreuses requêtes qui auraient été retardées pendant la pause.
Dans l’exemple de l’ouverture de billetterie, pourquoi l’ajout d’instances d’API ne permet-il pas de tout vendre plus vite ?
Parce que c’est la limite de 120 paiements par seconde du prestataire de paiement, et non la couche API, qui plafonne le nombre de fans pouvant acheter chaque seconde.
Qu’est-ce qu’un test d’endurance est conçu pour trouver ?
Les problèmes qui n’apparaissent qu’avec le temps sous une charge constante, comme les fuites de mémoire ou de connexions, les files qui s’allongent et les disques qui se remplissent.
Sources et lectures complémentaires
Une question sur cette section ? ArchitectBot, l’assistant d’étude IA du cours, répond d’abord à partir du cours.
Demander : « Nous préparons une grosse ouverture de billetterie. Comment calculer le nombre d’instances nécessaires, et quels tests de charge exécuter au préalable ? »