Sam Newman a mis en avant trois concepts clés à absolument comprendre dans les systèmes distribués : les timeouts, les retries et l’idempotence.
Il explique qu’avant de s’attaquer à des algorithmes distribués complexes comme Paxos ou Raft, il est plus important de bien maîtriser ces notions de base.
Les trois postulats de base des systèmes distribués
- L’information n’est pas transmise instantanément.
- Le système en face peut ne pas répondre.
- Les ressources sont finies.
Ces trois éléments sont la cause fondamentale de toute la complexité des systèmes distribués.
Timeouts
Si une requête n’est pas terminée dans un certain délai, il faut l’interrompre.
Si elle monopolise des ressources trop longtemps, cela peut provoquer une surcharge du système et une mauvaise expérience utilisateur.
Newman explique que « les timeouts consistent à faire passer la santé globale du système avant le succès d’une requête individuelle ».
Points importants
- Comprendre le temps d’exécution moyen et les attentes des utilisateurs
- Les paramètres doivent pouvoir être modifiés de façon souple, sans changement de code
Retries
Des retries excessifs peuvent devenir une attaque DoS auto-infligée contre le système.
Les retries sont nécessaires, mais il faut aussi prendre en compte les limites côté client et côté serveur, ainsi que le jitter réseau.
Newman avertit que l’ajout de jitter est une bonne chose, mais que l’exponential backoff peut au contraire alourdir la charge du système.
Idempotence
Le résultat doit rester le même même si la requête est envoyée plusieurs fois.
C’est principalement une responsabilité côté serveur, et une condition préalable pour que les retries soient sûrs.
Scénarios concrets
- Si la requête n’atteint pas le serveur : il ne se passe rien
- Si le serveur l’a traitée mais que la réponse a été interrompue : la modification a bien eu lieu mais le client ne le sait pas → l’idempotence est nécessaire
Méthodes d’implémentation
- Utiliser un ID de requête : attribuer un identifiant pour que le client puisse signaler qu’il s’agit d’une requête répétée
- Méthode par fingerprint : déterminer si une requête est un doublon à partir du hash du corps de la requête, par exemple (éviter les informations temporelles)
Conclusion
L’article s’ouvre sur la citation selon laquelle « répéter le même comportement en espérant un résultat différent relève de la folie »,
mais Newman explique que, dans les systèmes distribués, les retries peuvent au contraire être rationnels.
Il souligne toutefois que les retries doivent impérativement être sûrs, et qu’ils doivent pour cela être conçus avec les timeouts et l’idempotence.
1 commentaires
Circuit breaker~