Skip to content

Haute disponibilité et reprise après sinistre

Avant-propos

Une indisponibilité d'une minute peut représenter des centaines de milliers de pertes. La haute disponibilité (High Availability) désigne la capacité d'un système à continuer de fournir un service face aux pannes matérielles, bugs logiciels, problèmes réseau et autres situations anormales. La reprise après sinistre (Disaster Recovery) est la capacité du système à rétablir ses services lorsqu'un sinistre de grande ampleur se produit.

Que allez-vous apprendre dans cet article ?

À l'issue de ce chapitre, vous aurez acquis :

  • Mesure de la disponibilité : comprendre la signification des « nines » et des temps d'indisponibilité correspondants
  • Basculement en cas de panne : maîtriser les architectures haute disponibilité : actif-standby, actif-actif, multi-actif
  • Stratégies de reprise après sinistre : connaître les concepts de RPO et RTO ainsi que les méthodes de conception associées
  • Détection des pannes : comprendre les mécanismes de découverte de pannes : battements de cœur, sondes, disjoncteurs
  • Chaos Engineering : découvrir comment injecter activement des pannes pour vérifier la résilience du système
ChapitreContenuConcepts clés
Chapitre 1Mesure de la disponibilitéSLA, « nines », temps d'indisponibilité
Chapitre 2Architecture de basculementActif-standby, actif-actif, multi-AZ, multi-région actif-actif
Chapitre 3Conception de la reprise après sinistreRPO, RTO, stratégies de sauvegarde
Chapitre 4Détection et récupération des pannesBattements de cœur, disjoncteurs, mise à l'échelle automatique
Chapitre 5Chaos EngineeringInjection de pannes, vérification de la résilience

1. Mesure de la disponibilité : que signifient les « nines » ?

La disponibilité se mesure généralement en « nines », selon la formule :

Disponibilité = Temps de fonctionnement / Temps total x 100 %

Par exemple, sur un mois (30 jours = 43 200 minutes), si le système est indisponible pendant 43 minutes, la disponibilité est de (43 200 - 43) / 43 200 ≈ 99,9 %. Chaque « nine » supplémentaire réduit le temps d'indisponibilité autorisé d'un ordre de grandeur, et la difficulté et le coût augmentent de façon exponentielle.

Niveau de disponibilitéPourcentageIndisponibilité mensuelle autoriséeIndisponibilité annuelle autoriséeBesoins typiques
2 nines99 %7,3 heures3,65 joursOutils internes
3 nines99,9 %43 minutes8,76 heuresSystèmes métier courants
4 nines99,99 %4,3 minutes52,6 minutesE-commerce, SaaS
5 nines99,999 %26 secondes5,26 minutesFinance, paiements
Availability Level Calculator
Click to see downtime for different numbers of nines
2 nines
99%
3 nines
99.9%
4 nines
99.99%
5 nines
99.999%
3 nines(99.9%)
Yearly downtime
8.76 hours
Monthly downtime
43.8 minutes
Weekly downtime
10.1 minutes
Typical scenarios: Standard web apps, enterprise systems

Qu'est-ce qu'un SLA ?

Le SLA (Service Level Agreement, Accord de Niveau de Service) est un engagement formel entre le fournisseur de services et ses clients. Par exemple, AWS S3 garantit une disponibilité de 99,99 % ; si cet objectif n'est pas atteint, un remboursement proportionnel est effectué. Le SLA n'est pas qu'un indicateur technique, c'est aussi un contrat commercial — violer le SLA signifie perdre de l'argent.

Le fossé entre 3 nines et 4 nines

3 nines (99,9 %) signifie que le système peut être indisponible 43 minutes par mois — un déploiement problématique suivi d'un rollback et le quota est épuisé. 4 nines (99,99 %) signifie que seules 4 minutes d'indisponibilité sont autorisées par mois — cela exige un système haute disponibilité complet : basculement automatique, déploiement en continu (rolling deployment), vérifications de santé, etc.


2. Architecture de basculement en cas de panne

Le basculement (Failover) est le mécanisme central de la haute disponibilité : lorsque le nœud principal tombe en panne, le système bascule automatiquement vers un nœud de secours pour poursuivre le service.

Mode actif-standby (Active-Standby)

L'architecture haute disponibilité la plus courante. Le nœud principal traite toutes les requêtes, le nœud de secours synchronise les données en temps réel mais ne traite aucune requête. En cas de panne du nœud principal, le nœud de secours prend automatiquement le relais.

État normal :
  Client → Nœud principal (traite les requêtes)
            Nœud de secours (synchronise les données, en attente)

Basculement :
  Client → Nœud de secours (prend le relais comme nouveau nœud principal)
            Ancien nœud principal (en panne, en attente de réparation)

Le problème critique est le split-brain : lors d'une partition réseau, les nœuds principal et de secours croient chacun que l'autre est en panne et se mettent tous les deux à servir les requêtes, entraînant une incohérence des données. La solution consiste à introduire un nœud arbitre (Quorum) — au moins 3 nœuds votent pour déterminer qui est le nœud principal.

Multi-AZ (Multi-Zone de Disponibilité)

Déployer les services dans plusieurs centres de données (zones de disponibilité) d'une même région. La coupure de courant ou de réseau d'un seul centre de données n'affecte pas le service global. Les zones de disponibilité des fournisseurs cloud sont généralement reliées par des liaisons dédiées à faible latence (< 2 ms).

Multi-région actif-actif

Déployer des réplicas complets du service dans des villes voire des pays différents, chaque site étant capable de traiter indépendamment les requêtes. C'est le plus haut niveau d'architecture haute disponibilité, mais aussi le plus complexe — le défi principal est la synchronisation des données inter-régions en termes de latence et de cohérence.

Failover Strategy Comparison
Click to inspect how each high-availability architecture works
Active-standby
Active-active
Multi-AZ
Multi-region active-active
Active-standby
One primary node handles all requests while a standby waits. If the primary fails, the standby takes over.
Primary node
Serving requests
Standby node
Syncing standby
Pros
Simple architecture
Data consistency is easier to guarantee
Cons
Standby resources are underused
Failover has a brief interruption
ArchitectureNiveau de disponibilitéCoûtComplexitéCas d'usage
Serveur unique99 % à 99,9 %FaibleFaibleDéveloppement/test, outils internes
Actif-standby99,9 % à 99,99 %MoyenMoyenSystèmes métier de taille petite à moyenne
Multi-AZ99,99 %ÉlevéÉlevéE-commerce, plateformes SaaS
Multi-région actif-actif99,999 %Très élevéTrès élevéFinance, grands groupes Internet

3. Conception de la reprise après sinistre : RPO et RTO

La conception de la reprise après sinistre s'articule autour de deux indicateurs clés :

IndicateurNom completSignificationExemple
RPORecovery Point ObjectiveCombien de données peut-on tolérer de perdreRPO = 0 signifie qu'aucune donnée ne peut être perdue
RTORecovery Time ObjectiveCombien de temps d'indisponibilité peut-on tolérerRTO = 5 min signifie qu'il faut récupérer en 5 minutes

Relation entre stratégie de sauvegarde et RPO

Méthode de sauvegardeRPOCoûtDescription
Sauvegarde complète quotidienne24 heuresFaiblePerte maximale d'une journée de données
Sauvegarde incrémentale en temps réelDe l'ordre de la minuteMoyenSynchronisation continue via binlog/WAL
Réplication synchrone0ÉlevéL'écriture doit attendre la confirmation du réplica

Toutes les données n'ont pas besoin d'un RPO de 0

Un avatar utilisateur perdu peut être rechargé (un RPO de 24 h suffit), mais un enregistrement de paiement ne peut en aucun cas être perdu (RPO = 0). Déterminez la stratégie de sauvegarde en fonction de la valeur métier des données, plutôt que d'appliquer une règle uniforme.


4. Détection et récupération des pannes

4.1 Mécanismes de détection des pannes

MécanismePrincipeVitesse de détectionCas d'usage
Battement de cœurEnvoi régulier de paquets de battement de cœur, déclaration de panne en cas de dépassement du délaiDe l'ordre de la secondeDétection de survie des nœuds
Vérification de santéSondes HTTP/TCP vérifiant l'état du serviceDe l'ordre de la secondeDétection des backends par les load balancers
Sonde métierSimulation de requêtes réelles vérifiant la logique métierDe la seconde à la minuteSurveillance de disponibilité de bout en bout

Principe de fonctionnement du battement de cœur : le nœud A envoie périodiquement (par exemple toutes les 5 secondes) un signal « je suis toujours vivant » au superviseur. Si le superviseur ne reçoit pas le battement de cœur pendant N essais consécutifs (par exemple 3), il déclare le nœud A en panne. Les paramètres clés sont l'intervalle de battement et le seuil d'expiration — un intervalle trop court augmente la charge réseau, un intervalle trop long retarde la détection de la panne.

Les trois niveaux de vérification de santé :

  • Sonde de vivacité (Liveness) : le processus fonctionne-t-il encore ? Si non, le redémarrer
  • Sonde de disponibilité (Readiness) : le service peut-il accepter des requêtes ? Si non, le retirer de l'équilibreur de charge
  • Sonde de démarrage (Startup) : le service a-t-il fini de démarrer ? Si non, attendre, ne pas le déclarer en panne à tort

4.2 Mécanismes de récupération automatique

MécanismeDescriptionOutils typiques
Redémarrage automatiqueRelance automatique du processus après un crashsystemd, PM2, K8s
Mise à l'échelle automatiqueAugmentation automatique des instances lors d'une montée en chargeK8s HPA, Auto Scaling des fournisseurs cloud
Disjoncteur et dégradationÉchec rapide en cas de panne en aval, prévention des pannes en cascadeHystrix, Sentinel, Resilience4j
Limitation de débitRejet direct des requêtes au-delà de la capacitéNginx limit_req, limitation au niveau de la passerelle

Le pattern Disjoncteur (Circuit Breaker) en détail :

Le disjoncteur s'inspire des fusibles électriques — lorsque le courant est trop fort, il se coupe automatiquement pour protéger l'ensemble du circuit. Dans les microservices, lorsqu'un service en aval est en panne, le disjoncteur « s'ouvre », permettant aux requêtes d'échouer rapidement au lieu d'attendre stupidement un dépassement de délai.

Trois états du disjoncteur :

  Fermé (正常) ──→ Taux d'échec dépasse le seuil ──→ Ouvert (disjonction)
       ↑                                    │
       │                              Attente de la période de refroidissement
       │                                    ↓
       └── Requête de sondage réussie ←── Semi-ouvert (sondage)
  • État fermé : transfert normal des requêtes, tout en calculant le taux d'échec
  • État ouvert : toutes les requêtes renvoient directement une erreur (échec rapide), plus d'appel au service en aval
  • État semi-ouvert : après la période de refroidissement, quelques requêtes de sondage sont laissées passer. Si elles réussissent, retour à l'état fermé ; si elles échouent, retour à l'état ouvert

La dégradation (Fallback) est la stratégie complémentaire du disjoncteur : lorsque le disjoncteur se déclenche, au lieu de renvoyer une erreur, on retourne un résultat « de secours ». Par exemple, si le service de recommandation est en panne, on renvoie la liste des produits populaires ; si le chargement de l'avatar utilisateur échoue, on affiche un avatar par défaut.


5. Chaos Engineering : chercher activement les problèmes

L'idée fondamentale du Chaos Engineering est la suivante : plutôt que d'attendre qu'une panne se produise, mieux vaut la provoquer activement, dans un environnement contrôlé, pour vérifier la résilience du système.

OutilCréateurCapacité principale
Chaos MonkeyNetflixArrêt aléatoire d'instances en environnement de production
Chaos MeshPingCAPInjection de pannes dans les environnements K8s
LitmusCNCFCadre de Chaos Engineering natif cloud
ChaosBladeAlibabaOutil d'injection de pannes multi-scénarios

Étapes de mise en œuvre du Chaos Engineering

  1. Définir l'état stable : préciser les indicateurs de fonctionnement normal du système (ex. latence P99 < 200 ms)
  2. Formuler une hypothèse : si un nœud tombe en panne, le système doit se rétablir automatiquement en 30 secondes
  3. Injecter la panne : provoquer des pannes de manière contrôlée (d'abord en environnement de test, puis en production)
  4. Observer les résultats : le système se rétablit-il comme prévu ? Y a-t-il des pannes en cascade ?
  5. Corriger les faiblesses : améliorer l'architecture et les processus après la découverte de problèmes

Résumé

La haute disponibilité n'est pas une fonctionnalité, c'est une capacité architecturale. Elle doit être garantie à chaque étape : conception, développement, déploiement et exploitation.

Rappel des points clés de ce chapitre :

  1. Les « nines » : chaque « nine » supplémentaire réduit le temps d'indisponibilité d'un ordre de grandeur, avec un coût et une complexité qui croissent de manière exponentielle
  2. Basculement en cas de panne : de l'actif-standby au multi-région actif-actif, choisir l'architecture adaptée aux besoins métier
  3. RPO et RTO : concevoir les stratégies de sauvegarde et de récupération en fonction de la valeur des données et de la tolérance métier
  4. Automatisation : détection des pannes, redémarrage automatique, disjoncteur et dégradation constituent l'infrastructure de la haute disponibilité
  5. Chaos Engineering : injecter activement des pannes pour vérifier la résilience du système dans un environnement contrôlé

Pour aller plus loin