Be Software Architecture Wise
Be Wise Apps

Read in English · Leer en español · Auf Deutsch lesen

Section 9.5 sur 9.8 · Intermédiaire · 24 min de lecture

SLI, SLO, SLA et budgets d’erreur

Leçon vidéo

5 min · narré en anglais, avec sous-titres
Écouter seulement (audio)
Lire la transcription

Bienvenue dans la section neuf point cinq. Quel niveau de fiabilité un service doit-il avoir ? Cette leçon transforme cette question en chiffres sur lesquels ingénieurs et product owners peuvent s’accorder.

Imaginez une compagnie de bus qui promet que presque tous les bus seront à l’heure. Pour que ce soit utile, elle doit dire ce qui compte comme à l’heure : à deux minutes près. Elle doit dire comment elle le mesure : à chaque arrêt. Et ce que signifie presque tous : quatre-vingt-dix-neuf sur cent sur un mois. Si elle n’y parvient pas, l’équipe des horaires cesse d’essayer de nouvelles lignes et corrige d’abord la ponctualité. La perfection est impossible et très coûteuse. Le bus en retard sur cent est donc une marge à dépenser pour des travaux de voirie et de nouvelles lignes. La fiabilité des logiciels fonctionne exactement ainsi.

Un indicateur de niveau de service, ou SLI, est une mesure de ce que reçoivent les utilisateurs. La meilleure forme est un ratio : les bons événements divisés par les événements valides. Par exemple, la proportion de requêtes de paiement qui réussissent en moins de huit cents millisecondes. Un objectif de niveau de service, ou SLO, est une cible pour cet indicateur sur une fenêtre donnée, comme quatre-vingt-dix-neuf virgule neuf pour cent sur vingt-huit jours glissants. Un accord de niveau de service, ou SLA, est un contrat avec les clients qui fixe des conséquences, généralement des crédits de service. Beaucoup de services ont des SLO, mais pas de SLA. L’idée qui les relie est le budget d’erreur. Avec un objectif de quatre-vingt-dix-neuf virgule neuf pour cent, un événement sur mille peut être mauvais sans que personne ait failli. C’est la marge qui permet de livrer des fonctionnalités et de prendre des risques.

Voici les trois termes sur une même échelle, pour la disponibilité du paiement. Le SLO est l’objectif interne, quatre-vingt-dix-neuf virgule neuf pour cent. Le SLA, un contrat avec les partenaires, est fixé moins strictement, à quatre-vingt-dix-neuf virgule cinq. Au-dessus du SLO, le service reste dans son budget. Le SLI de ce mois-ci est de quatre-vingt-dix-neuf virgule quatre-vingt-quatorze pour cent. En dessous du SLO, l’objectif est manqué, et la politique de budget d’erreur s’applique. Ce n’est qu’en dessous du SLA que des crédits de service sont dus. Ne fixez jamais le SLO au même niveau que le SLA. Vous n’apprendriez l’existence d’un problème qu’au moment où vous devez déjà de l’argent.

Un SLI n’est utile que dans la mesure où il est proche de ce que vivent les utilisateurs. Les services qui répondent à des requêtes ont besoin de disponibilité, de latence et parfois de qualité. Les pipelines de données ont besoin de fraîcheur, d’exactitude et de couverture. Le stockage ajoute la durabilité. Exprimez la latence en proportion, pas en moyenne : quatre-vingt-dix-neuf pour cent des requêtes sur la carte en moins de trois cents millisecondes. Et mesurez au plus près de l’utilisateur. À l’intérieur du serveur d’applications, vous manquez les requêtes qui ne l’ont jamais atteint.

Calculons un budget. L’API de commande de la livraison de repas a un SLO de quatre-vingt-dix-neuf virgule neuf pour cent sur trente jours. Le budget est donc de zéro virgule un pour cent. En temps, cela fait quarante-trois virgule deux minutes d’indisponibilité totale. En requêtes, avec environ trois millions par mois, cela fait trois mille mauvaises requêtes. Maintenant, un mauvais déploiement à trois heures de l’après-midi dure douze minutes. À huit cents requêtes par minute, avec quarante pour cent d’échecs, cela fait trois mille huit cent quarante mauvaises requêtes. C’est plus que le budget entier. Un seul incident a épuisé le mois. Le même incident à trois heures du matin, avec cinquante requêtes par minute, n’en coûte que deux cent quarante : huit pour cent du budget. Les budgets fondés sur les requêtes pondèrent les défaillances selon le nombre d’utilisateurs touchés.

Un objectif est une décision métier. Viser cent pour cent est une erreur pour presque tout. Cela ne laisse aucun budget pour le changement, coûte une fortune et ne peut de toute façon pas être atteint. Une politique de budget d’erreur dit ce qui se passe quand le budget est épuisé. Dans l’exemple du Site Reliability Workbook de Google, tous les changements s’arrêtent, sauf les correctifs urgents et de sécurité, jusqu’à ce que le service revienne dans son SLO. Sa valeur tient au fait qu’elle est convenue à l’avance : un gel devient ainsi une règle convenue d’avance, pas un affrontement. Et une équipe qui ne dépense jamais son budget est probablement trop prudente. Elle pourrait livrer plus vite ou mener plus d’expériences.

Comment alerter ? Surveillez le taux de consommation : la vitesse à laquelle le budget est dépensé. Un taux de consommation de un, la ligne en pointillés, épuise le budget exactement à la fin des trente jours. Une consommation rapide dépense une grande part du budget en quelques heures. Ici, trente pour cent sont partis en trois heures environ. Cela doit réveiller quelqu’un. Une consommation lente, ici un taux d’environ deux pendant cinq jours, relève d’un ticket. Le réglage par défaut du Workbook pour un SLO de quatre-vingt-dix-neuf virgule neuf pour cent alerte l’astreinte si deux pour cent du budget partent en une heure, soit un taux de consommation de quatorze virgule quatre, ou cinq pour cent en six heures. Une panne totale déclenche l’alerte en moins d’une minute.

La section complète détaille le calcul du taux de consommation et les erreurs courantes. Ensuite, dans la section neuf point six, nous verrons les journaux, les métriques et les traces. À très vite.

Ce qu’il faut savoir

Trois termes, une seule idée

Le chapitre 2 a présenté les objectifs de disponibilité et les « neuf » (section 2.5) et a montré que 99,9 % sur 30 jours laissent 43,2 minutes. Cette section transforme ce calcul en discipline d’exploitation. Le vocabulaire vient du livre de Google Site Reliability Engineering (Beyer, Jones, Petoff et Murphy, O’Reilly, 2016) et de son ouvrage compagnon, The Site Reliability Workbook (2018), et il est aujourd’hui utilisé bien au-delà de Google.

Un indicateur de niveau de service (SLI) est une mesure quantitative, soigneusement définie, d’un aspect du service que reçoivent les utilisateurs. La forme la plus utile est un ratio : les bons événements divisés par les événements valides. La proportion de requêtes de paiement qui renvoient une réponse réussie en moins de 800 ms, mesurée au niveau de l’équilibreur de charge (load balancer) est un SLI. Il va de 0 % (rien ne fonctionne) à 100 % (rien n’est cassé), et la forme de ratio permet de lire et de comparer chaque SLI, et d’alerter sur lui, de la même manière.

Un objectif de niveau de service (SLO) est une cible pour un SLI sur une fenêtre donnée : 99,9 % des requêtes de paiement sont bonnes, mesuré sur 28 jours glissants. C’est une promesse interne sur laquelle s’accordent l’équipe, le product owner et les personnes qui dépendent du service. Un accord de niveau de service (SLA) est un contrat avec les clients qui fixe des conséquences, généralement des crédits de service, si un niveau n’est pas atteint. Beaucoup de services ont des SLO mais pas de SLA ; les plateformes internes n’ont presque jamais de SLA.

L’idée qui relie les trois est le budget d’erreur. Si l’objectif est de 99,9 %, alors 0,1 % des événements peuvent être mauvais sans que personne ait failli. Ces 0,1 % ne sont pas du gaspillage ; c’est la marge dont dispose l’équipe pour prendre des risques : livrer des fonctionnalités, mener des migrations, expérimenter sur la configuration. Le budget transforme un débat sur des impressions (le service est-il assez fiable ?) en débat sur des chiffres (avons-nous dépensé notre budget ?), et donne au produit et à l’ingénierie une règle commune pour savoir quand aller vite et quand ralentir.

SLI, SLO et SLA sur une même échelle

Sur une même échelle de disponibilité de 99,0 % à 100 %, le seuil du SLA à 99,5 % se situe sous le SLO à 99,9 %, et le SLI mesuré ce mois-ci, 99,94 %, se situe au-dessus du SLODisponibilité du paiement, 28 j glissants (échelle non linéaire)SLA manqué :crédits de service dusSLO manqué :politique appliquéeDans lebudget99.0%99.5%99.9%100%SLI ce mois-ci : 99,94 %SLA : 99,5 %contrat avec partenairesSLO : 99,9 %objectif interne
Le SLI est la mesure, le SLO l’objectif interne et le SLA un plancher contractuel moins strict ; l’écart entre le SLO et le SLA est la zone d’alerte.

Choisir de bons SLI

Un SLI n’est utile que dans la mesure où il est proche de ce que vivent les utilisateurs. Le Workbook propose une courte liste qui couvre la plupart des services. Les services pilotés par les requêtes (API, pages web) ont besoin de la disponibilité (la proportion de requêtes valides servies avec succès), de la latence (la proportion servie plus vite qu’un seuil) et parfois de la qualité (la proportion servie sans dégradation, par exemple une carte affichée sans recommandations personnalisées parce que cette dépendance était en panne). Les pipelines de données ont besoin de la fraîcheur (la proportion de données mises à jour plus récemment qu’un seuil), de l’exactitude (la proportion de résultats corrects) et de la couverture (la proportion des entrées traitées). Les systèmes de stockage ajoutent la durabilité (la proportion des données écrites qui peuvent encore être lues).

Les SLI de latence s’écrivent en proportions, pas en moyennes : 99 % des requêtes sur la carte servies en moins de 300 ms. Cela renvoie directement aux percentiles de la section 2.4 : dire que 99 % des requêtes doivent prendre moins de 300 ms revient à dire que le p99 doit être inférieur à 300 ms, mais la forme en proportion s’additionne proprement dans le temps et entre serveurs (on compte les bonnes requêtes et les requêtes valides), ce qui n’est pas le cas des percentiles. Il est courant de fixer deux seuils de latence, par exemple 90 % sous 200 ms et 99 % sous 800 ms, pour saisir à la fois l’expérience typique et celle de la queue.

L’endroit où vous mesurez compte autant que ce que vous mesurez. Le Workbook distingue la spécification du SLI (le résultat qui compte pour l’utilisateur, comme commandes passées avec succès) de l’implémentation du SLI (la manière de le compter : journaux du serveur, métriques de l’équilibreur de charge, sondes synthétiques ou instrumentation dans l’app mobile). Une mesure prise à l’intérieur du serveur d’applications ne voit pas les requêtes qui ne l’ont jamais atteint parce que le DNS, le réseau de diffusion de contenu ou l’équilibreur de charge a été défaillant. Une mesure prise dans le client voit tout, mais elle inclut les mauvaises connexions mobiles des utilisateurs et arrive en retard. La plupart des équipes commencent par les métriques de l’équilibreur de charge, peu coûteuses et proches de la périphérie, et ajoutent des sondes synthétiques pour les chemins à faible trafic.

Définissez précisément ce qui compte comme valide et ce qui compte comme bon, car ce sont les cas limites qui décident si le chiffre a un sens. Une 404 pour une URL mal saisie est-elle mauvaise ? En général non : c’est une réponse correcte. Une réponse 429 de limitation de débit est-elle mauvaise ? Tout dépend si le client respectait ou non son quota convenu. Les contrôles de santé (health checks) et les tests de charge sont-ils des événements valides ? Non ; excluez-les, sinon ils diluent le ratio. Consignez ces règles par écrit à côté du SLO.

Des SLI pour les exemples fil rouge

ParcoursType de SLISpécification du SLI (bons / valides)Exemple de SLO
Livraison de repas : parcourir les cartesLatenceRequêtes sur la carte servies en moins de 300 ms / toutes les requêtes valides sur la carte99 % sur 28 jours
Livraison de repas : passer commandeDisponibilitéRequêtes de commande servies avec succès ou avec un refus métier correct / toutes les requêtes de commande valides99,9 % sur 28 jours
Livraison de repas : position du livreurFraîcheurAffichages du plan de suivi où la position du livreur date de moins de 30 s / tous les affichages du plan de suivi99 % sur 28 jours
Livraison de repas : versements aux restaurantsExactitudeLots de versements rapprochés sans écart / tous les lots de versements99,99 % sur un trimestre
Billetterie : paiement à l’ouverture des ventesLatence et disponibilitéBlocages de places confirmés en moins de 2 s / toutes les tentatives de blocage des fans admis99,5 % pendant chaque ouverture des ventes
Billetterie : envoi des billets électroniquesFraîcheurBillets dans l’app du fan moins de 5 minutes après le paiement / toutes les commandes payées99,9 % sur 28 jours

Fixer l’objectif

Un objectif est une décision métier, pas une décision technique. Le coût de chaque « neuf » supplémentaire augmente fortement, tandis qu’au-delà d’un certain point les utilisateurs ne remarquent plus les améliorations, parce que leur propre réseau mobile, leur Wi-Fi et leurs appareils tombent en panne plus souvent que cela. Le livre SRE de Google le dit sans détour : viser 100 % est une erreur pour presque tout, car cela ne laisse aucun budget pour le changement, coûte une fortune et ne peut de toute façon pas être atteint. Un objectif de 100 % transforme aussi chaque défaillance isolée en manquement à la politique, ce qui apprend aux gens à ignorer le SLO.

Les bons points de départ sont les performances passées (qu’a obtenu le service au dernier trimestre, et les utilisateurs étaient-ils satisfaits ?), les objectifs des services dont vous dépendez (vous ne pouvez pas promettre 99,99 % au-dessus d’une base de données à 99,9 %, comme la section 6.1 l’a montré pour les chaînes d’appels) et le coût métier du manque de fiabilité. Pour la plateforme de livraison de repas, les commandes échouées à l’heure du déjeuner coûtent du chiffre d’affaires et la confiance des clients : 99,9 % sur la prise de commande se défend donc ; les mises à jour de la position des livreurs sont moins critiques et 99 % suffisent. Commencez un peu en dessous des performances actuelles, pour que l’équipe ne soit pas immédiatement en infraction, puis resserrez l’objectif plus tard, preuves à l’appui.

Choisissez la fenêtre délibérément. Une fenêtre glissante comme les 28 derniers jours correspond à la façon dont les utilisateurs se souviennent des pannes (ils n’oublient pas le premier du mois), et 28 jours contiennent exactement quatre fois chaque jour de la semaine, ce qui garde les cycles hebdomadaires équitables. Les mois calendaires conviennent aux rapports et aux contrats. Les services organisés autour d’événements, comme une ouverture de billetterie, peuvent nécessiter un SLO par événement, car une heure de défaillance pendant l’ouverture des ventes compte bien plus qu’une semaine calme.

Les budgets d’erreur en chiffres

Le budget d’erreur peut se compter en temps ou en événements. Les budgets fondés sur le temps conviennent aux services qui sont soit en marche, soit à l’arrêt ; les budgets fondés sur les requêtes sont plus justes pour les services au trafic irrégulier, car une panne à 03:00 touche moins d’utilisateurs qu’une panne à midi.

Exemple commenté

Exemple commenté : le budget de la prise de commande

L’API de commande de la plateforme de livraison de repas a un SLO de 99,9 % de bonnes requêtes sur 30 jours. Elle traite environ 3 millions de requêtes de commande valides sur cette période, fortement concentrées au déjeuner et au dîner.

Budget en fraction1 - 0,999 = 0,001, soit 0,1 %
Budget en temps0,001 × 30 jours × 1440 minutes = 43,2 minutes d’indisponibilité totale
Budget en requêtes0,001 × 3 000 000 = 3000 mauvaises requêtes
Incident 1 : mauvais déploiement à 15:0012 minutes × 800 requêtes par minute = 9600 requêtes ; 40 % en échec = 3840 mauvaises requêtes
Résultat3840, c’est plus que tout le budget de 3000 requêtes : un seul incident épuise le mois
Le même incident à 03:0012 × 50 requêtes par minute × 0,4 = 240 mauvaises requêtes, soit 8 % du budget

Les budgets fondés sur les requêtes pondèrent les défaillances selon le nombre d’utilisateurs touchés : c’est pourquoi les mêmes 12 minutes peuvent coûter 8 % du budget ou plus de 100 %.

La vue fondée sur le temps (43,2 minutes) aurait compté les deux incidents de la même façon, à 12 × 0,4 = 4,8 minutes d’indisponibilité équivalente, soit environ 11 % du budget.

Les politiques de budget d’erreur

Un budget ne veut rien dire si rien ne se passe quand il est épuisé. Une politique de budget d’erreur est un court document, convenu à l’avance par l’ingénierie, le produit et la direction, qui dit ce que l’équipe fera. L’exemple de politique du Workbook mesure le budget sur les quatre dernières semaines ; si le service dépasse son budget, tous les changements et toutes les mises en production s’arrêtent, sauf les correctifs urgents (problèmes P0) et les correctifs de sécurité, jusqu’à ce que le service revienne dans son SLO. Elle exige aussi un post-mortem avec au moins une action de priorité maximale chaque fois qu’un seul incident consomme plus de 20 % du budget sur quatre semaines, et fait remonter les désaccords au directeur technique (CTO).

La valeur d’une politique tient au fait qu’elle est convenue avant de s’appliquer. En pleine course à la mise en production, personne ne veut geler les changements ; avec une politique signée, le gel est une règle convenue d’avance plutôt qu’un affrontement entre un SRE et un chef de produit. Les bonnes politiques précisent aussi ce qui n’est pas imputé à l’équipe : une panne réseau à l’échelle de l’entreprise, une dépendance elle-même gelée, ou du trafic hors du périmètre du SLO, comme un test de charge.

Les praticiens ne s’accordent pas sur le degré d’automatisme que doit avoir la politique. Certaines équipes l’appliquent strictement, car les exceptions érodent la confiance dans tout le système. D’autres traitent le budget comme une information qui alimente une discussion, en faisant valoir qu’un gel strict peut retarder les correctifs mêmes qui rétabliraient la fiabilité. Une voie intermédiaire est courante : geler automatiquement les mises en production de fonctionnalités risquées, continuer à livrer les correctifs de fiabilité, et permettre à un dirigeant désigné d’accorder des exceptions documentées. Le cas inverse compte aussi : une équipe qui ne dépense jamais son budget est probablement trop prudente et pourrait livrer plus vite, mener plus d’expériences ou réduire ses coûts.

Taux de consommation et alertes sur les SLO

Alerter sur les taux d’erreur bruts (alerter l’astreinte si plus de 1 % des requêtes échouent pendant 5 minutes) génère du bruit : de brefs pics réveillent des gens la nuit pour des problèmes qui ne menaceraient jamais le SLO, tandis qu’un taux d’échec constant de 0,5 % peut épuiser discrètement le mois sans jamais franchir le seuil. La réponse du Workbook consiste à alerter sur le taux de consommation (burn rate) : la vitesse à laquelle le budget est dépensé, comparée au rythme qui l’épuiserait exactement à la fin de la fenêtre.

Taux de consommation = ratio d’erreurs observé / ratio d’erreurs autorisé. Avec un SLO de 99,9 %, le ratio autorisé est de 0,1 % : un ratio d’erreurs de 0,1 % correspond donc à un taux de consommation de 1 (le budget dure exactement la fenêtre), 1 % à un taux de 10, et 100 % (une panne totale) à un taux de 1000. La fraction du budget de la fenêtre dépensée pendant une fenêtre d’alerte vaut taux de consommation x fenêtre d’alerte / fenêtre du SLO. Pour une fenêtre de 30 jours (720 heures), un taux de consommation de 14,4 maintenu pendant une heure dépense 14,4 × 1 / 720 = 0,02, soit 2 % du budget du mois ; à ce rythme, le budget entier serait épuisé en 720 / 14,4 = 50 heures.

Le Workbook recommande une alerte multifenêtre et multi-taux de consommation comme réglage par défaut raisonnable pour un SLO de 99,9 % : alerter l’astreinte si 2 % du budget sont dépensés en une heure (taux de consommation 14,4) ou 5 % en six heures (taux 6), et ouvrir un ticket si 10 % sont dépensés en trois jours (taux 1). Chaque condition doit être vérifiée sur une fenêtre longue et sur une fenêtre courte, la fenêtre courte valant un douzième de la longue (respectivement 5 minutes, 30 minutes et 6 heures). La fenêtre longue garantit que le problème est significatif ; la fenêtre courte garantit qu’il se produit encore, si bien que l’alerte cesse de se déclencher quelques minutes après un correctif au lieu de rester rouge pendant une heure.

Consommation rapide et consommation lente

Budget d’erreur restant sur une fenêtre de 30 jours : un rythme régulier atteindrait zéro au jour 30 ; la courbe réelle chute brutalement lors d’un incident au jour 9 et baisse plus vite que ce rythme entre les jours 20 et 25100%50%0%jour 0jour 10jour 20jour 30Jours écoulés (fenêtre de 30 j)budget restant réelrythme stable (taux 1)Rapide : alerte30 % dépensés en 3 h environLente : tickettaux ≈ 2 pendant 5 joursreste 13 %Budget d’erreur restant
Une consommation rapide dépense une grande part du budget en quelques heures et doit réveiller quelqu’un ; une consommation lente le dépense en plusieurs jours et relève d’un ticket.
SLO = 0.999                 # 99.9% of requests good
PERIOD_H = 30 * 24          # 720-hour SLO window

def burn_rate(bad, total, slo=SLO):
    """Observed error ratio divided by the ratio the SLO allows."""
    if total == 0:
        return 0.0
    return (bad / total) / (1 - slo)

def budget_spent(rate, window_h, period_h=PERIOD_H):
    """Fraction of the whole window's budget used in window_h hours."""
    return rate * window_h / period_h

def page(w1h, w5m, w6h, w30m):
    """Each argument is (bad, total) for that window."""
    fast = burn_rate(*w1h) >= 14.4 and burn_rate(*w5m) >= 14.4
    slow = burn_rate(*w6h) >= 6 and burn_rate(*w30m) >= 6
    return fast or slow

print(round(burn_rate(bad=288, total=20_000), 1))   # 14.4
print(budget_spent(14.4, window_h=1))               # 0.02, i.e. 2%
Taux de consommation, budget dépensé et règle d’alerte d’astreinte à deux fenêtres. En production, la même logique s’écrit sous forme de règles d’alerte dans le système de supervision (par exemple les règles d’enregistrement et d’alerte de Prometheus).

Les seuils fixent aussi le délai de détection. Si l’API de commande tombe complètement en panne (ratio d’erreurs de 100 %, taux de consommation de 1000), le ratio d’erreurs sur une heure dépasse 1,44 % au bout de 0,0144 × 60 = environ 0,9 minute : l’alerte d’astreinte part donc en moins d’une minute. Si 2 % des requêtes échouent (taux de consommation de 20), le ratio sur une heure atteint 1,44 % au bout de 0,72 × 60 = environ 43 minutes. Les problèmes graves déclenchent l’alerte vite ; les problèmes légers ne la déclenchent que s’ils persistent, ce qui est exactement le comportement souhaité à trois heures du matin.

Les services à faible trafic mettent ce calcul en défaut : avec 10 requêtes par heure, un seul échec représente un ratio d’erreurs de 10 % et un taux de consommation de 100. Les remèdes du Workbook sont le trafic synthétique pour ajouter du signal, le regroupement de services apparentés à faible trafic sous un même SLO, la réduction de l’impact des échecs isolés grâce aux nouvelles tentatives et aux solutions de repli, ou l’acceptation d’une fenêtre plus longue. Pour le système de billetterie, presque inactif entre deux ouvertures des ventes puis extrêmement sollicité, des SLO par événement avec des alertes sur le taux de consommation pendant la fenêtre de l’événement fonctionnent mieux qu’un chiffre mensuel.

Les SLA et les crédits de service

Un SLA fait passer l’objectif de l’ingénierie au droit des contrats. Il définit le service couvert, la manière de mesurer la disponibilité, les exclusions (maintenance planifiée, mauvaise utilisation par le client, force majeure), la compensation et la manière dont un client la réclame. La compensation habituelle est un crédit de service : un pourcentage de la redevance mensuelle restitué, échelonné selon l’ampleur du manquement. Les crédits sont généralement faibles par rapport à la perte réelle du client : il vaut donc mieux lire un SLA comme un signal de la confiance du fournisseur que comme une assurance ; les clients dont les pertes seraient importantes ont besoin de leur propre résilience, pas d’un crédit plus élevé.

Prenons, à titre d’illustration, un SLA que la plateforme de livraison de repas pourrait proposer à ses restaurants partenaires pour son API de prise de commandes : 99,5 % de disponibilité mensuelle, avec un crédit de 10 % sur la commission de plateforme du mois en dessous de 99,5 % et de 25 % en dessous de 99,0 %. Le SLO interne est de 99,9 %. L’écart entre les deux est délibéré : l’équipe doit épuiser son budget de SLO, appliquer sa politique et se rétablir bien avant que le contrat soit menacé. Ne fixez jamais le SLO au même niveau que le SLA : vous n’apprendriez l’existence d’un problème qu’au moment où vous devez déjà de l’argent.

Deux conséquences architecturales en découlent. D’abord, un SLA ne peut être honnête que si vous connaissez les SLA de vos propres dépendances (fournisseur cloud, prestataire de paiement, fournisseur de cartographie) et la façon dont ils se combinent. Ensuite, les SLA exigent des preuves : la méthode de mesure inscrite au contrat doit pouvoir être appliquée à partir de votre propre télémétrie, ce qui constitue une exigence pour la conception de l’observabilité.

Erreurs courantes

Trop de SLO. Un service doté de trente SLO n’en a aucun, car personne ne peut raisonner sur eux ni agir en conséquence. Commencez par deux ou trois par parcours utilisateur critique : en général un SLO de disponibilité et un ou deux SLO de latence. Mesurer la mauvaise chose. Le taux d’utilisation du CPU, la profondeur des files d’attente et le retard de réplication sont des causes utiles à surveiller, mais ce ne sont pas des SLI, car les utilisateurs ne les vivent pas directement. Mesurer au mauvais endroit. Les taux de réussite côté serveur paraissent parfaits alors que le CDN renvoie des erreurs. Faire des moyennes. Un SLO sur la latence moyenne masque la queue lente dont se plaignent les utilisateurs.

Des objectifs sans conséquences. Un SLO sans politique de budget ni alertes sur le taux de consommation n’est qu’une décoration de tableau de bord. Des objectifs fixés par les seuls ingénieurs. Le product owner doit donner son accord, car le SLO arbitre entre fonctionnalités et fiabilité. Ne jamais réviser. Réexaminez les SLO tous les trimestres ou tous les deux trimestres : si les utilisateurs se plaignent alors que le SLO est au vert, c’est le SLI ou l’objectif qui est faux ; si le budget n’est jamais entamé, l’objectif est peut-être trop lâche ou l’équipe trop prudente. Un seul SLO pour des parcours très différents. Regrouper la consultation de la carte et le paiement dans un même ratio permet aux nombreuses requêtes bon marché de masquer les échecs des requêtes rares et précieuses.

Les SLO se rattachent au reste de ce chapitre. Les alertes sur le taux de consommation sont les alertes fondées sur les symptômes que recommande la partie consacrée à l’observabilité ; les incidents qui consomment le budget alimentent les revues post-incident ; et la mesure de la réponse d’un SLO est une fonction d’aptitude naturelle pour l’architecture.

Vérifiez votre compréhension

Pourquoi un SLI s’écrit-il généralement sous la forme bons événements divisés par événements valides ?

Parce que le ratio est toujours compris entre 0 % et 100 %, s’additionne proprement entre serveurs et dans le temps par simple comptage, et permet de lire, de comparer et de transformer chaque SLI en budget d’erreur de la même manière.

Un SLO de 99,9 % sur 30 jours subit un taux de consommation de 6 pendant six heures. Quelle fraction du budget est dépensée ?

6 × 6 / 720 = 0,05, soit 5 % du budget sur 30 jours.

Pourquoi un SLA devrait-il être moins strict que le SLO interne ?

Pour que l’équipe détecte un budget d’erreur épuisé et y réagisse bien avant que le contrat soit enfreint et que des crédits de service deviennent exigibles.

Qu’apporte la fenêtre courte dans une alerte multifenêtre ?

Elle confirme que le problème se produit toujours, si bien que l’alerte se réinitialise quelques minutes après un correctif au lieu de rester active pendant toute la fenêtre longue.

Suivant · 9.6ObservabilitéComment voir à l’intérieur d’un système distribué en fonctionnement : journaux structurés, types de métriques et histogrammes, RED, USE et les signaux d’or, traçage distribué avec W3C Trace Context et OpenTelemetry, cardinalité et alertes fondées sur les symptômes.Continuer →

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 : « Notre API de livraison de repas n’a pas encore de SLO. Par quels deux ou trois SLI devrions-nous commencer, et comment choisir un objectif que l’équipe produit acceptera ? »