Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Systèmes distribués, pour le meilleur et pour l...

Systèmes distribués, pour le meilleur et pour le pire - Codeurs en Seine 2024 - Conférence

Les solutions que nous concevons sont de plus en plus complexes. Elles mettent en œuvre différents systèmes que nous appelons des systèmes distribués. Sur le papier, les systèmes distribués ont plein de vertus. Mais il faut savoir que la production peut rapidement vous ramener à la triste réalité : ce n'est pas aussi magique que ça en a l'air.

Au travers d'un retour d'expérience de nombreuses années, nous explorons donc ensemble le monde des systèmes distribués afin de comprendre pourquoi mettre en place un système distribué. Découvrons également les difficultés auxquelles il faut se préparer et comment s'en prémunir ou, tout du moins, les mitiger.

Cette session sera l'occasion d'évoquer de nombreux modèles de conception à travers le prisme de "leçons apprises". Dans le but de ne pas commettre les mêmes erreurs que d'autres ont déjà faites.

Sébastien LECACHEUR

November 21, 2024
Tweet

More Decks by Sébastien LECACHEUR

Other Decks in Programming

Transcript

  1. @slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Systèmes distribués, pour le meilleur

    et pour le pire Sébastien Lecacheur 🏢 Odigo 📅 21/11/24 ⌚ 10h50 📍 Codeurs En Seine 🚪 Salle C
  2. @slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Qu’est-ce qu’un système distribué ?

    A collection of independent computers that appear to its users as one computer — Andrew Tanenbaum (CS865 – Distributed Software Development) http://csis.pace.edu/~marchese/CS865/Lectures/Chap1/Chapter1a.htm
  3. @slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Raisons principales • Performance ◦

    capacité de traitement ◦ latence selon la localisation • Scalabilité horizontale (serveur++) > verticale (CPU++ RAM++) ◦ nombre d’utilisateurs ◦ nombre de requêtes ◦ volume de données • Fiabilité ◦ temps d’indisponibilité ◦ durabilité des données
  4. @slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Raisons secondaires • Les coûts

    ◦ petits serveurs < gros serveurs 💸 • Organisation des équipes ◦ cycles de vie différents ◦ technologies différentes • Modularité & flexibilité ◦ chaque sous-partie peut être changée • Entrepôts partagés
  5. @slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Reliability vs Resiliency Fiabilité (reliability)

    “capacité à éviter les échecs” Tolérance aux pannes (resiliency) “capacité à résister aux échecs”
  6. @slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Les 8 fausses idées sur

    les systèmes distribués 1. Le réseau est fiable ❌ 2. La latence est nulle ❌ 3. La bande passante est infinie ❌ 4. Le réseau est sécurisé ❌ 5. La topologie ne change pas ❌ 6. Il y a un seul administrateur ❌ 7. Le coût de transport est nul ❌ 8. Le réseau est homogène ❌ — L. Peter Deutsch , 1994 https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing
  7. @slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Qui a dit le “cache”

    ? There are only two hard things in computer science: cache invalidation and naming things . — Phil Karlton
  8. @slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Le réseau a un coût

    Cache local Cache distant ⨯ Incohérence ⨯ Latence réseau 💡 Cache mémoire de la DB ⚠ Random jitter
  9. @slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Cache HTTP • Serveur ◦

    Server Side Rendering -> cache total ou partiel ◦ CDN local ou à 2 niveau • Client ◦ Cache-Control / Expires -> évite les requêtes ◦ ETag -> réduit le volume de données
  10. @slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Tout peut tomber en panne

    « Everything Fails All the Time. » — Werner Vogels , CTO, Amazon
  11. @slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Réplicas de lecture 💡 Facile

    sur les apps en lecture seule 💡 Un réplica peut prendre le relais du principal ⚠ performance vs durabilité
  12. @slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Distribution de la donnée •

    Sharding • Consistent hashing 💡 Choisir la bonne clé pour une distribution uniforme ⚠ Pas de requête multi-partitions
  13. @slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems SAGA / Long Running Actions

    ⚠ Compenser le service en erreur ⚠ Réessayer ⚠ Idempotence
  14. @slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Modifications concurrentes • HTTP Headers

    ◦ Last-Modified + If-Unmodified-Since ◦ ETag + If-Match • Compare And Swap (CAS) • Delta
  15. @slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Le serveur de temps •

    Messages de log • Données horodatées • Signatures d’authentification • Validité de certificats • Négociation TLS 💡 Utiliser un seul fuseau horaire 🥇 Configurer NTP !!
  16. @slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Monitoring & observabilité • Logs

    centralisés • Topologie des composants et du réseaux -> déclaration découverte • Traces distribuées, métriques et logs -> OpenTelemetry (OTel)
  17. @slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Activité des clients internes !

    • Quota, rate limiting • Message queue • Isolation des tenants
  18. @slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Aller plus loin • Thèmes

    non abordés ◦ Tests & mocks ◦ SLI, SLO & SLA • Ressources (bibliographiques) ◦ Livres 📚 ▪ Patterns of Distributed Systems ▪ Distributed Systems (4th edition) ◦ Sites 🌐 ▪ https://martinfowler.com/articles/patterns-of-distributed-systems/ ▪ https://github.com/donnemartin/system-design-primer ▪ https://medium.com/israeli-tech-radar/design-patterns-and-principles-that-support-larg e-scale-systems-f3c9adf89ad
  19. @slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Ce qu’il faut retenir Le

    cache 💔 Le réseau 👿 Un terrain de jeux 🎉 Une panne inévitable 💥 Une conception complexe 🤯 Est-ce vraiment nécessaire ? 🤔
  20. @slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Conclusion Distributed systems are never

    "up" ; they exist in a constant state of partially degraded service. Accept failure, design for resiliency, protect and shrink the critical path. — Charity Majors , CEO, Honeycomb https://opensource.com/article/17/7/state-systems-administration