Fiabilité
La fiabilité est la discipline qui consiste à rester opérationnel quand les choses autour de vous échouent — car elles échoueront. Concevez d'abord pour les pannes partielles ; les chemins heureux se gèrent d'eux-mêmes.
Règles
- Des timeouts sur chaque appel sortant. Aucune exception. Un timeout manquant est un incident d'épuisement de pool de threads en devenir.
- Ne réessayez que les opérations idempotentes. Avec backoff exponentiel et jitter. Réessayer un POST non idempotent crée des doublons, facture deux fois la carte, envoie deux e-mails.
- Des clés d'idempotence sur les API publiques mutantes. Permet aux clients de réessayer en toute sécurité lors de problèmes réseau sans que vous ayez à deviner.
- Coupez le circuit aux dépendances externes. Quand un aval est malade, échouer rapidement protège à la fois vous et lui. Les réessais aveugles transforment une panne en deux.
- Cloisonnez les chemins critiques. Isolez les pools de threads/pools de connexions par aval pour qu'un lent ne puisse pas noyer l'ensemble du service.
- La dégradation gracieuse est préférable à une panne dure. Servez un cache périmé, une réponse partielle ou un ensemble de fonctionnalités réduit plutôt qu'une 500.
- Aucun point de défaillance unique. Multi-AZ pour chaque composant avec état, plusieurs répliques pour chaque composant sans état, vérifications de santé LB qui détectent réellement les pannes.
- L'arrêt doit être gracieux. Drainez les requêtes en cours, fermez les pools, videz les tampons. SIGTERM → arrêter d'accepter → terminer ou annuler → quitter.
- Facilitez le redémarrage à tout moment. N'importe quel pod individuel doit pouvoir être tué à tout moment sans impact utilisateur visible. Si ce n'est pas le cas, c'est le bug à corriger.
- Les sauvegardes ne sont pas testées jusqu'à ce que vous les restauriez. Effectuez un exercice de restauration réel selon un planning.
Signaux d'alerte
restTemplate.exchange(...)sans timeout configuré.- Une boucle de réessai sans limite et sans backoff.
- "Ça marche si tu redéploies." (État caché en mémoire.)
- Des déploiements sans temps d'arrêt qui ne sont en réalité pas sans temps d'arrêt car les requêtes sont abandonnées lors du SIGTERM.
- Un manuel de reprise après sinistre qui n'a jamais été exécuté.