Slide 1

Slide 1 text

@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

Slide 2

Slide 2 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Ma première application

Slide 3

Slide 3 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Une application de nos jours

Slide 4

Slide 4 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems 💙 Les systèmes distribués 💔

Slide 5

Slide 5 text

@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

Slide 6

Slide 6 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Pourquoi ?

Slide 7

Slide 7 text

@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

Slide 8

Slide 8 text

@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

Slide 9

Slide 9 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Les bénéfices

Slide 10

Slide 10 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Avantages directs ● Répartition de charge & élasticité ● Haute disponibilité

Slide 11

Slide 11 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Avantages indirects ● Évolutivité ● Innovation

Slide 12

Slide 12 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Les difficultés

Slide 13

Slide 13 text

@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”

Slide 14

Slide 14 text

@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

Slide 15

Slide 15 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Application simple 💡 Pourquoi pas SQLite ? 💡 Connexions persistantes 💡 Pool de connexions

Slide 16

Slide 16 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Répartition de charge ⚠ Stateless, sticky session ou affinité ⚠ Healthchecks live/ready

Slide 17

Slide 17 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Le réseau a un coût

Slide 18

Slide 18 text

@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

Slide 19

Slide 19 text

@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

Slide 20

Slide 20 text

@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

Slide 21

Slide 21 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Le réseau n’est pas fiable

Slide 22

Slide 22 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Tout peut tomber en panne « Everything Fails All the Time. » — Werner Vogels , CTO, Amazon

Slide 23

Slide 23 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Communication synchrone > Timeout 💡 Tout limiter dans le temps et l’espace

Slide 24

Slide 24 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Communication synchrone > Retry ⚠ Idempotence

Slide 25

Slide 25 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Communication synchrone > Exponential Backoff 💡 Mode dégradé

Slide 26

Slide 26 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Communication synchrone > Circuit Breaker

Slide 27

Slide 27 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Communication asynchrone

Slide 28

Slide 28 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Stockage des données

Slide 29

Slide 29 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Base de données par service

Slide 30

Slide 30 text

@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é

Slide 31

Slide 31 text

@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

Slide 32

Slide 32 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Cohérence des données

Slide 33

Slide 33 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Outbox pattern ⚠ Idempotence

Slide 34

Slide 34 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Transactions ACID

Slide 35

Slide 35 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Two-Phase Commit

Slide 36

Slide 36 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems SAGA / Long Running Actions ⚠ Compenser le service en erreur ⚠ Réessayer ⚠ Idempotence

Slide 37

Slide 37 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Modifications concurrentes ● HTTP Headers ○ Last-Modified + If-Unmodified-Since ○ ETag + If-Match ● Compare And Swap (CAS) ● Delta

Slide 38

Slide 38 text

@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 !!

Slide 39

Slide 39 text

@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)

Slide 40

Slide 40 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Activité des clients ● Quota, rate limiting ● Message queue ● Isolation des tenants

Slide 41

Slide 41 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Activité des clients internes ! ● Quota, rate limiting ● Message queue ● Isolation des tenants

Slide 42

Slide 42 text

@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

Slide 43

Slide 43 text

@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 ? 🤔

Slide 44

Slide 44 text

@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

Slide 45

Slide 45 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Merci

Slide 46

Slide 46 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Questions & réponses

Slide 47

Slide 47 text

@slecache .bsky.social #Codeurs2024 #architecture #DistributedSystems Ressources ● Google font : Architects Daughter ● Flaticons: black hand drawn