Des mises en production qui s'annulent toutes seules
Cette page passe par le chemin de mise en production dessiné plus bas. Chaque nouvelle version sert d'abord 10 % du trafic réel, un contrôle compte ses erreurs, puis la version est promue ou annulée sans personne au clavier.
- Opérationnel
- Dernier contrôle : be453573 promue, 47 réussies sur 47 à 10 % en 10 s
- Dernier exercice : near_miss, laissé passer, rétabli en 7 s, il y a 33 min
- Cette page a été servie par la version be453573.
- Prouvé
- Annulée
Comment ça marche
- 01
Commit
Un commit sur main est testé, puis envoyé comme nouvelle version du Worker à côté de celle qui sert maintenant.
- 02
Contrôle à 10 %
La nouvelle version reçoit 10 % du trafic réel. Le contrôle envoie 50 requêtes et ne compte que les réponses qui portent son en-tête de version.
- 03
Promouvoir ou annuler
À 0,95 ou plus, la version passe à 100 %. En dessous, tout le trafic revient à la version précédente, et le résultat est écrit dans D1 pour cette page.
Une version défaillante touche une requête sur dix, quelques secondes, puis plus personne.
Le service face à son objectif
En ce moment
- 1.000Taux de succès
- 24/24Contrôles réussis
- 0.950SLO
Contrôles synthétiques de la démo publique, jugés sur un objectif de 95 % de succès sur 60 minutes.
24 réussis sur 24 contrôles. Aucun signal du watchdog pour l'instant.
Dernier contrôle 2026-10-24T18:00:55.547Z (il y a 4 min).
Budget d'erreur
- 97 %Budget d'erreur restant, 7 jours
- 0.0Taux de consommation, dernière 1 h · sous 14,4
- 0.0Taux de consommation, dernières 6 h · sous 6
L'objectif de 0,95 tolère l'échec d'un contrôle sur vingt. Sur les 7 derniers jours, cela fait 153 contrôles sur 3068, et 4 ont échoué. Les contrôles en échec pendant un exercice comptent comme les autres.
Un taux de consommation de 1 épuise le budget en exactement 7 jours. Les deux seuils sont les alertes de consommation rapide du Google SRE workbook : 14,4 sur une heure et 6 sur six heures. Ils sont affichés, pas appliqués : rien ne bloque une mise en production sur ce budget, le contrôle décide de chaque version sur ses propres 50 requêtes.
Les contrôles commencent le 2026-10-19 11:00 UTC, la fenêtre de 7 jours n'est donc pas encore pleine.
Voir les données
| Fenêtre | Réussis sur total | Échecs | Valeur |
|---|---|---|---|
| 7 jours | 3064/3068 | 4 | 97 % |
| 1 h | 24/24 | 0 | 0.0 |
| 6 h | 148/148 | 0 | 0.0 |
Taux de succès par heure
- Taux de succès par heure
- Objectif 0,95
- promue
- annulée
- Exercice détecté
- Exercice passé
Voir les données
| Heure (UTC) | Taux | Réussis sur total |
|---|---|---|
| 2026-10-24 18:00 | 1.000 | 2/2 |
| 2026-10-24 17:00 | 1.000 | 24/24 |
| 2026-10-24 16:00 | 1.000 | 24/24 |
| 2026-10-24 15:00 | 1.000 | 24/24 |
| 2026-10-24 14:00 | 1.000 | 24/24 |
| 2026-10-24 13:00 | 1.000 | 24/24 |
| 2026-10-24 12:00 | 1.000 | 28/28 |
| 2026-10-24 11:00 | 1.000 | 24/24 |
| 2026-10-24 10:00 | 1.000 | 24/24 |
| 2026-10-24 09:00 | 1.000 | 24/24 |
| 2026-10-24 08:00 | 1.000 | 24/24 |
| 2026-10-24 07:00 | 1.000 | 24/24 |
| 2026-10-24 06:00 | 1.000 | 24/24 |
| 2026-10-24 05:00 | 1.000 | 24/24 |
| 2026-10-24 04:00 | 1.000 | 24/24 |
| 2026-10-24 03:00 | 1.000 | 24/24 |
| 2026-10-24 02:00 | 1.000 | 24/24 |
| 2026-10-24 01:00 | 1.000 | 24/24 |
| 2026-10-24 00:00 | 1.000 | 24/24 |
| 2026-10-23 23:00 | 1.000 | 24/24 |
| 2026-10-23 22:00 | 1.000 | 24/24 |
| 2026-10-23 21:00 | 1.000 | 22/22 |
| 2026-10-23 20:00 | 1.000 | 26/26 |
| 2026-10-23 19:00 | 1.000 | 24/24 |
| 2026-10-23 18:00 | 1.000 | 22/22 |
| 2026-10-23 17:00 | 1.000 | 26/26 |
| 2026-10-23 16:00 | 1.000 | 16/16 |
| 2026-10-23 15:00 | 1.000 | 28/28 |
| 2026-10-23 14:00 | 1.000 | 22/22 |
| 2026-10-23 13:00 | 1.000 | 26/26 |
| 2026-10-23 12:00 | 1.000 | 30/30 |
| 2026-10-23 11:00 | 1.000 | 22/22 |
| 2026-10-23 10:00 | 1.000 | 28/28 |
| 2026-10-23 09:00 | 1.000 | 26/26 |
| 2026-10-23 08:00 | 1.000 | 28/28 |
| 2026-10-23 07:00 | 1.000 | 18/18 |
| 2026-10-23 06:00 | 1.000 | 32/32 |
| 2026-10-23 05:00 | 1.000 | 22/22 |
| 2026-10-23 04:00 | 1.000 | 24/24 |
| 2026-10-23 03:00 | 1.000 | 22/22 |
| 2026-10-23 02:00 | 1.000 | 24/24 |
| 2026-10-23 01:00 | 1.000 | 24/24 |
| 2026-10-23 00:00 | 1.000 | 24/24 |
| 2026-10-22 23:00 | 1.000 | 24/24 |
| 2026-10-22 22:00 | 1.000 | 24/24 |
| 2026-10-22 21:00 | 1.000 | 24/24 |
| 2026-10-22 20:00 | 1.000 | 24/24 |
| 2026-10-22 19:00 | 1.000 | 24/24 |
| 2026-10-22 18:00 | 1.000 | 24/24 |
| 2026-10-22 17:00 | 1.000 | 24/24 |
| 2026-10-22 16:00 | 1.000 | 24/24 |
| 2026-10-22 15:00 | 1.000 | 24/24 |
| 2026-10-22 14:00 | 1.000 | 24/24 |
| 2026-10-22 13:00 | 1.000 | 26/26 |
| 2026-10-22 12:00 | 1.000 | 24/24 |
| 2026-10-22 11:00 | 1.000 | 24/24 |
| 2026-10-22 10:00 | 1.000 | 26/26 |
| 2026-10-22 09:00 | 1.000 | 24/24 |
| 2026-10-22 08:00 | 1.000 | 24/24 |
| 2026-10-22 07:00 | 1.000 | 24/24 |
| 2026-10-22 06:00 | 1.000 | 24/24 |
| 2026-10-22 05:00 | 1.000 | 24/24 |
| 2026-10-22 04:00 | 1.000 | 24/24 |
| 2026-10-22 03:00 | 1.000 | 24/24 |
| 2026-10-22 02:00 | 1.000 | 24/24 |
| 2026-10-22 01:00 | 1.000 | 24/24 |
| 2026-10-22 00:00 | 1.000 | 24/24 |
| 2026-10-21 23:00 | 1.000 | 24/24 |
| 2026-10-21 22:00 | 1.000 | 24/24 |
| 2026-10-21 21:00 | 1.000 | 26/26 |
| 2026-10-21 20:00 | 1.000 | 24/24 |
| 2026-10-21 19:00 | 1.000 | 24/24 |
| 2026-10-21 18:00 | 1.000 | 24/24 |
| 2026-10-21 17:00 | 1.000 | 24/24 |
| 2026-10-21 16:00 | 1.000 | 24/24 |
| 2026-10-21 15:00 | 1.000 | 24/24 |
| 2026-10-21 14:00 | 1.000 | 24/24 |
| 2026-10-21 13:00 | 1.000 | 24/24 |
| 2026-10-21 12:00 | 1.000 | 24/24 |
| 2026-10-21 11:00 | 1.000 | 24/24 |
| 2026-10-21 10:00 | 1.000 | 24/24 |
| 2026-10-21 09:00 | 1.000 | 24/24 |
| 2026-10-21 08:00 | 1.000 | 24/24 |
| 2026-10-21 07:00 | 1.000 | 24/24 |
| 2026-10-21 06:00 | 1.000 | 24/24 |
| 2026-10-21 05:00 | 1.000 | 24/24 |
| 2026-10-21 04:00 | 1.000 | 26/26 |
| 2026-10-21 03:00 | 1.000 | 26/26 |
| 2026-10-21 02:00 | 1.000 | 24/24 |
| 2026-10-21 01:00 | 1.000 | 24/24 |
| 2026-10-21 00:00 | 1.000 | 26/26 |
| 2026-10-20 23:00 | 1.000 | 24/24 |
| 2026-10-20 22:00 | 1.000 | 24/24 |
| 2026-10-20 21:00 | 1.000 | 24/24 |
| 2026-10-20 20:00 | 1.000 | 24/24 |
| 2026-10-20 19:00 | 1.000 | 24/24 |
| 2026-10-20 18:00 | 1.000 | 24/24 |
| 2026-10-20 17:00 | 1.000 | 24/24 |
| 2026-10-20 16:00 | 1.000 | 24/24 |
| 2026-10-20 15:00 | 1.000 | 24/24 |
| 2026-10-20 14:00 | 1.000 | 24/24 |
| 2026-10-20 13:00 | 1.000 | 24/24 |
| 2026-10-20 12:00 | 1.000 | 24/24 |
| 2026-10-20 11:00 | 1.000 | 24/24 |
| 2026-10-20 10:00 | 1.000 | 24/24 |
| 2026-10-20 09:00 | 1.000 | 24/24 |
| 2026-10-20 08:00 | 1.000 | 24/24 |
| 2026-10-20 07:00 | 1.000 | 24/24 |
| 2026-10-20 06:00 | 1.000 | 24/24 |
| 2026-10-20 05:00 | 1.000 | 24/24 |
| 2026-10-20 04:00 | 1.000 | 24/24 |
| 2026-10-20 03:00 | 1.000 | 24/24 |
| 2026-10-20 02:00 | 1.000 | 24/24 |
| 2026-10-20 01:00 | 1.000 | 24/24 |
| 2026-10-20 00:00 | 1.000 | 24/24 |
| 2026-10-19 23:00 | 1.000 | 24/24 |
| 2026-10-19 22:00 | 1.000 | 24/24 |
| 2026-10-19 21:00 | 1.000 | 24/24 |
| 2026-10-19 20:00 | 1.000 | 24/24 |
| 2026-10-19 19:00 | 1.000 | 24/24 |
| 2026-10-19 18:00 | 1.000 | 24/24 |
| 2026-10-19 17:00 | 1.000 | 24/24 |
| 2026-10-19 16:00 | 1.000 | 24/24 |
| 2026-10-19 15:00 | 1.000 | 24/24 |
| 2026-10-19 14:00 | 1.000 | 24/24 |
| 2026-10-19 13:00 | 1.000 | 24/24 |
| 2026-10-19 12:00 | 1.000 | 24/24 |
| 2026-10-19 11:00 | 0.778 | 14/18 |
Chaque mise en production contrôlée
- promue
- annulée
- déployée sans contrôle
- Exercice détecté
- Exercice passé
Voir les données
| Quand (UTC) | Version | Résultat | Exposition | Contrôle |
|---|---|---|---|---|
| 2026-10-24 17:31 | 7f17adf2 | exercice near_miss : laissé passer | 10 %, 7 s | 0.980 (49/50) |
| 2026-10-24 15:52 | be453573 | promue | 10 %, 10 s | 1.000 (47/47) |
| 2026-10-24 15:46 | 88cccc2b | promue | 10 %, 19 s | 1.000 (46/46) |
| 2026-10-24 15:34 | e78542b9 | promue | 10 %, 30 s | 1.000 (44/44) |
| 2026-10-24 14:38 | 4c6f60c8 | promue | 10 %, 8 s | 1.000 (50/50) |
| 2026-10-24 14:37 | 7b5813f7 | promue | 10 %, 7 s | 1.000 (50/50) |
| 2026-10-24 13:02 | 3ecd8955 | promue | 10 %, 11 s | 1.000 (50/50) |
| 2026-10-22 21:53 | 1021c32c | promue | 10 %, 10 s | 1.000 (46/46) |
| 2026-10-22 11:22 | 4c35ccf5 | promue | 10 %, 7 s | 1.000 (50/50) |
| 2026-10-20 17:54 | cf150a90 | promue | 10 %, 9 s | 1.000 (50/50) |
| 2026-10-20 16:35 | 5fe33423 | promue | 10 %, 8 s | 1.000 (50/50) |
| 2026-10-20 15:45 | 5026d116 | annulée | 10 %, 9 s | 0.000 (0/50) |
| 2026-10-20 15:43 | 29b16c6f | promue | 10 %, 10 s | 1.000 (49/49) |
be453573 promue à 100 %. Contrôle de passage : 1.000 sur 47 requêtes réussies sur 47 à 10 %, décidé en 10 s. Enregistré 2026-10-24T15:52:05Z.
L'exercice hebdomadaire
Une fois par semaine, à une heure tirée au hasard parmi douze créneaux par jour (toutes les deux heures, à la 23e minute, UTC), une version avec une panne sur son point de santé passe par le même contrôle qu'une mise en production. Quelle que soit la décision du contrôle, la version qui servait avant reprend 100 %.
Le contrôle compte les erreurs, pas la latence. Une version lente passe, et une version qui échoue 3 % du temps passe le plus souvent aussi, car 0,95 tolère deux échecs sur 50. Ces exercices montrent où passe la limite.
Pour tester tout le chemin rapidement, une série peut lancer un exercice toutes les deux heures pendant trois jours au plus. Les dix derniers sont dessinés et listés ici ; chaque exercice reste dans le tableau des mises en production.
Voir les données
| Secondes | Événement | Part défaillante |
|---|---|---|
| 0 | partage | 10 % |
| 7 | rétabli | 0 % |
near_miss: environ 3 % des contrôles de santé échouent. laissé passer
2026-10-24 17:31 UTC · 10 % pendant 7 s · 49/50
État du lab
- 76 %Mémoire du lab utilisée, 8,8 sur 11,7 Gio
- aucunDernier make verify
- échouéDernier canary de staging · 2026-10-24 13:07 UTC
Le lab est le cluster kind sur un ordinateur portable qui fait tourner les étapes dev et staging du chemin de mise en production. Quand il tourne, un CronJob du lab envoie cet état toutes les 15 minutes avec un jeton de ce Worker, pas un identifiant Cloudflare.
La mémoire est le total du nœud moins ce qui est disponible, lu dans Prometheus ; la barre passe au rouge à 90 %. Un canary de staging en échec, c'est le contrôle qui arrête une mauvaise version, pas une panne du lab.
État reçu le 2026-10-24 18:00 UTC, il y a 5 min.
Voir les données
| Élément | Valeur | Mesuré |
|---|---|---|
| Mémoire utilisée | 8.8 / 11.7 GiB (76 %) | 2026-10-24 18:00 UTC |
| Dernier make verify | aucun | aucun |
| Dernier canary de staging | échoué | 2026-10-24 13:07 UTC |
Contrôles récents
| Quand | Cible | Résultat | Statut | Durée |
|---|---|---|---|---|
| 2026-10-24T18:00:55.547Z | santé externe | réussi | 2xx | 81 ms |
| 2026-10-24T18:00:55.156Z | santé interne | réussi | 2xx | 0 ms |
| 2026-10-24T17:56:00.878Z | santé externe | réussi | 2xx | 327 ms |
| 2026-10-24T17:55:59.116Z | santé interne | réussi | 2xx | 0 ms |
| 2026-10-24T17:50:54.739Z | santé externe | réussi | 2xx | 94 ms |
| 2026-10-24T17:50:54.537Z | santé interne | réussi | 2xx | 0 ms |
| 2026-10-24T17:45:54.607Z | santé externe | réussi | 2xx | 83 ms |
| 2026-10-24T17:45:54.250Z | santé interne | réussi | 2xx | 0 ms |
| 2026-10-24T17:41:14.802Z | santé externe | réussi | 2xx | 217 ms |
| 2026-10-24T17:41:14.149Z | santé interne | réussi | 2xx | 0 ms |
| 2026-10-24T17:35:54.305Z | santé externe | réussi | 2xx | 57 ms |
| 2026-10-24T17:35:54.000Z | santé interne | réussi | 2xx | 0 ms |
| 2026-10-24T17:31:02.421Z | santé externe | réussi | 2xx | 146 ms |
| 2026-10-24T17:31:02.142Z | santé interne | réussi | 2xx | 0 ms |
| 2026-10-24T17:25:54.522Z | santé externe | réussi | 2xx | 70 ms |
| 2026-10-24T17:25:54.191Z | santé interne | réussi | 2xx | 0 ms |
| 2026-10-24T17:20:54.601Z | santé externe | réussi | 2xx | 111 ms |
| 2026-10-24T17:20:54.220Z | santé interne | réussi | 2xx | 0 ms |
| 2026-10-24T17:15:55.468Z | santé externe | réussi | 2xx | 256 ms |
| 2026-10-24T17:15:55.122Z | santé interne | réussi | 2xx | 0 ms |
Cette page est la démo
- Chemin normal
- D1 tombe : copie ancienne
Copie ancienne quand D1 tombe
L'état est mis en cache dans KV. Si D1 ne répond pas, la dernière copie est servie et marquée comme ancienne, et son état est jugé à nouveau selon son âge : une vieille copie ne dit jamais opérationnel.
Access sur /admin
La vue d'administration exige une assertion Cloudflare Access. Le Worker vérifie sa signature avec les clés de l'équipe à chaque requête.
Une CSP stricte
default-src 'none'. Les seuls ajouts sont le script de cette page, autorisé par son empreinte, et les polices servies par le Worker lui-même. Chaque figure est dessinée sur le serveur en SVG.
OpenTofu
La base D1, l'espace KV et l'application Access sont déclarés en OpenTofu et validés en CI à chaque changement.
Questions
Ces données sont-elles réelles ?
Oui. Chaque chiffre est lu dans D1 quand la page est construite, au plus 180 s avant, et chaque valeur datée indique quand elle a été mesurée. Il n'y a aucune donnée d'exemple en production.
Que se passe-t-il quand le lab est éteint ?
Le réseau Cloudflare continue de servir. Le lab construit et promeut ; quand il est éteint, un lancement manuel depuis main passe par le même contrôle.
Est-ce de la production ?
C'est une démo de lab personnel, avec du trafic réel et aucune donnée client. Le chemin de mise en production, le contrôle et l'annulation sont ceux que j'utiliserais pour un service en production.
Les pannes sur cette page sont-elles réelles ?
Les exercices hebdomadaires sont de vrais passages par le vrai contrôle, avec une panne activée exprès. Chacun est marqué comme exercice, dessiné en contour sur les graphiques, et la version qui servait avant reprend toujours tout le trafic.
Pourquoi un objectif de 0,95 ?
Deux contrôles toutes les cinq minutes, c'est un petit échantillon. À 0,95, un contrôle raté dans l'heure ne réveille personne ; un vrai service fixerait son objectif selon les besoins de ses utilisateurs.
Est-ce que ça marcherait sur une autre plateforme ?
Le principe demande un partage du trafic, une étiquette de version sur chaque réponse et un contrôle capable d'annuler le partage. La voie du lab fait la même chose sur Kubernetes avec Argo Rollouts et Linkerd.
Puis-je voir le code ?
Le dépôt est privé. Pendant un appel, je le parcours avec vous, avec les runbooks et le tableau des preuves derrière chaque chiffre de cette page.
Ce chemin de mise en production sur votre plateforme ?
Réservez un appel : nous parcourons le dépôt, les runbooks et la façon dont le contrôle s'intégrerait à votre stack.
Réserver un appel