---
marp: true
paginate: true
author: Clément Contet, Laurent Fainsin
---
# The Raft Consensus Algorithm
![bg right:60%](https://raft.github.io/logo/solo.svg)
---
# Consensus ?
> Consensus algorithms allow a collection of machines to work as a coherent group that can survive the failures of some of its members. – RAFT authors
- Accord sur l'état partagé (image système unique)
- Réparation autonome en cas de défaillance d'un serveur
- Une minorité de serveurs HS: pas de problème
- La majorité des serveurs HS: perte de disponibilité, maintien de la cohérence
- La clé pour construire des systèmes de stockage cohérents
---
# Architecture typique des systèmes de consensus
![bg 95%](https://ongardie.net/static/coreosfest/slides/rsm.svg)
---
# Motivation ?
Paxos domine le marché depuis ~25 ans (Leslie Lamport, 1989)
- Difficile à comprendre
- Difficile à implémenter
> The dirty little secret of the NSDI community is that at most five people really, truly understand every part of Paxos ;-). – [NSDI](https://www.usenix.org/conference/nsdi23) reviewer
> There are significant gaps between the description of the Paxos algorithm and the needs of a real-world system…the final system will be based on an unproven protocol. – [Chubby](https://research.google/pubs/pub27897/) authors
---
# Pourquoi RAFT ?
## Prendre des décisions de conception fondées sur la compréhensibilité
- Décomposition du problème
- Minimiser l'espace des états
- Traiter plusieurs problèmes avec un seul mécanisme
- Éliminer les cas particuliers
- Minimiser le non-déterminisme
- Maximiser la cohérence
---
# Décomposition du problème
1. Élection d'un leader (mandat)
- Sélectionner un serveur qui sera le leader
- Détecter les pannes, choisir un nouveau leader
2. Réplication des logs (fonctionnement normal)
- Le leader accepte les commandes des clients et les ajoute à son journal.
- Le leader réplique son journal aux autres serveurs (écrase les incohérences).
3. Sécurité
- Maintenir la cohérence des journaux
- Seuls les serveurs dont les journaux sont à jour peuvent devenir des leaders.
---
# Minimiser l'espace des états
![bg 90%](https://oracleblog.org/wp-content/uploads/2018/10/QQ%E6%88%AA%E5%9B%BE20181001142911.png)
---
# Mandats
![bg 90%](https://oracleblog.org/wp-content/uploads/2018/10/WX20181002-112612@2x.png)
---
# Leader Election
TODO
---
# Election Correctness
TODO
---
# Démo interactive
---
# Log Structure
TODO
---
# Log Inconsistencies
TODO
---
# Log Matching Property
TODO
---
# De nombreuses implémentations
| Name | Primary Authors | Language | License |
| :------------- | :------------------------------------------------ | :--------- | :--------- |
| etcd/raft | Blake Mizerany, Xiang Li and Yicheng Qin (CoreOS) | Go | Apache 2.0 |
| go-raft | Ben Johnson (Sky) and Xiang Li (CMU, CoreOS) | Go | MIT |
| hashicorp/raft | Armon Dadgar (hashicorp) | Go | MPL-2.0 |
| copycat | Jordan Halterman | Java | Apache2 |
| LogCabin | Diego Ongaro (Stanford, Scale Computing) | C++ | ISC |
| akka-raft | Konrad Malawski | Scala | Apache2 |
| kanaka/raft.js | Joel Martin | Javascript | MPL-2.0 |
---
# How much randomization is needed to avoid split votes?
![bg 90%](https://ongardie.net/static/coreosfest/slides/timeoutcdf.svg)
---
# User Study: Is Raft Simpler than Paxos?
![bg 70%](https://ongardie.net/static/coreosfest/slides/studyscatter.svg)
![bg 90%](https://ongardie.net/static/coreosfest/slides/survey.svg)