L’ouverture de la billetterie
Un festival de musique en Bretagne ouvre sa billetterie un mardi à 10 h. En dix minutes, 30 000 personnes achètent un billet.
Chaque billet est un PDF envoyé par courriel. Le service qui les fabrique en produit 500 par minute.
Si le site attend chaque PDF avant de valider l’achat, il plante. Le festival perd ses ventes.
À la fin de cette leçon
Remarque
Je peux expliquer pourquoi une file d’attente laisse deux services travailler chacun à son rythme.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| File d’attente | une liste de messages qui attendent leur tour | |
| Message | une tâche à faire | billet de la commande 501 |
| Producteur | le service qui ajoute les messages | |
| Consommateur | le service qui prend les messages et fait le travail | |
| En attente | les messages pas encore traités | |
| Instance | une copie du consommateur qui tourne |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une file se place entre deux services
Une file d’attente garde le travail à faire. Le site de la billetterie est le producteur. Pour chaque achat, il ajoute un message dans la file. Puis il passe tout de suite au client suivant.
Le service des billets est le consommateur. Il prend le message le plus ancien, fabrique le PDF, puis prend le suivant. Aucun des deux n’attend l’autre.
Essayez : une file en Python
# Une liste utilisée comme file : on ajoute à la fin, on prend au début.
file = []
# La billetterie ajoute un message par achat, puis passe au client suivant.
file.append("billet de la commande 501")
file.append("billet de la commande 502")
file.append("billet de la commande 503")
print("En attente :", len(file))
# Le service des billets prend toujours le message le plus ancien.
message = file.pop(0)
print("Envoi du", message)
print("En attente :", len(file))
# Ajoutez la commande 504, puis prenez encore deux messages.
# Quel message reste à la fin ?
Les messages s’accumulent, puis la file se vide
Chaque service garde son propre rythme. Quand les achats arrivent plus vite que les PDF sortent, les messages en attente s’accumulent.
Après le rush, le consommateur rattrape son retard. La file se vide.
Rien ne se perd pendant l’attente. Le client reçoit son billet quelques minutes plus tard. C’est bien mieux qu’une erreur au moment de payer.
Exemple travaillé : quatre minutes d’ouverture
| Minute | Achats reçus | Billets envoyés | En attente ensuite |
|---|---|---|---|
| 1 | 800 | 500 | 300 |
| 2 | 700 | 500 | 500 |
| 3 | 300 | 500 | 300 |
| 4 | 100 | 500 | 0 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une erreur fréquente
Attention
Beaucoup pensent qu’une file d’attente accélère le travail. C’est faux : le service fabrique toujours 500 billets par minute. La file absorbe le rush et évite que le site attende. Si les messages arrivent trop vite tous les jours, il faut plus d’instances.
Plusieurs instances vident la file plus vite
Le consommateur peut tourner en plusieurs instances. Chacune prend un message différent. Deux instances à 20 messages par minute en traitent 40 ensemble.
La file aide aussi en cas de panne. Si le service des billets s’arrête dix minutes, les messages attendent. Au redémarrage, il reprend au plus ancien. Aucune commande n’est oubliée.
Exemple travaillé : vider 600 messages
| Instances | Messages par minute | Minutes pour vider |
|---|---|---|
| 1 | 20 | 30 |
| 2 | 40 | 15 |
| 3 | 60 | 10 |
| 5 | 100 | 6 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.