diff --git a/2025-04-03-stack/.gitignore b/2025-04-03-stack/.gitignore index 4bfdf16..7fda26e 100644 --- a/2025-04-03-stack/.gitignore +++ b/2025-04-03-stack/.gitignore @@ -6,5 +6,6 @@ *.log *.fls *.fdb_latexmk +*.vrb .auctex-auto -*~ \ No newline at end of file +*~ diff --git a/2025-04-03-stack/Makefile b/2025-04-03-stack/Makefile index 48fef8c..61928d2 100644 --- a/2025-04-03-stack/Makefile +++ b/2025-04-03-stack/Makefile @@ -9,13 +9,18 @@ ASSETS=assets/lattice/lattice1.pdf_tex \ assets/logos/deuxfleurs.pdf \ assets/timeline-22-24.pdf -talk.pdf: talk.tex $(ASSETS) +.PHONY: main +main: talk.tex $(ASSETS) latexmk -pdf talk.tex .PHONY: loop -loop: +loop: $(ASSETS) latexmk -pdf -pvc talk.tex +.PHONY: clean +clean: + latexmk -c + %.pdf: %.svg inkscape -D -z --file=$^ --export-pdf=$@ diff --git a/2025-04-03-stack/aerogramme-general.png b/2025-04-03-stack/aerogramme-general.png new file mode 100644 index 0000000..3aabe3a Binary files /dev/null and b/2025-04-03-stack/aerogramme-general.png differ diff --git a/2025-04-03-stack/aerogramme.png b/2025-04-03-stack/aerogramme.png new file mode 100644 index 0000000..c7df431 Binary files /dev/null and b/2025-04-03-stack/aerogramme.png differ diff --git a/2025-04-03-stack/aerogramme_datatype.drawio.pdf b/2025-04-03-stack/aerogramme_datatype.drawio.pdf new file mode 100644 index 0000000..0606e05 Binary files /dev/null and b/2025-04-03-stack/aerogramme_datatype.drawio.pdf differ diff --git a/2025-04-03-stack/services-bdd-modifies.png b/2025-04-03-stack/services-bdd-modifies.png new file mode 100644 index 0000000..f40ff9b Binary files /dev/null and b/2025-04-03-stack/services-bdd-modifies.png differ diff --git a/2025-04-03-stack/services-bdd.png b/2025-04-03-stack/services-bdd.png new file mode 100644 index 0000000..f999ce7 Binary files /dev/null and b/2025-04-03-stack/services-bdd.png differ diff --git a/2025-04-03-stack/services-garage.png b/2025-04-03-stack/services-garage.png new file mode 100644 index 0000000..a003b01 Binary files /dev/null and b/2025-04-03-stack/services-garage.png differ diff --git a/2025-04-03-stack/services-oldschool.png b/2025-04-03-stack/services-oldschool.png new file mode 100644 index 0000000..babd8a0 Binary files /dev/null and b/2025-04-03-stack/services-oldschool.png differ diff --git a/2025-04-03-stack/talk.tex b/2025-04-03-stack/talk.tex index 0174c40..dd65129 100644 --- a/2025-04-03-stack/talk.tex +++ b/2025-04-03-stack/talk.tex @@ -359,10 +359,146 @@ Le design priorise une \textbf{faible empreinte en ressources}, une \textbf{tol \end{frame} +\begin{frame} + \frametitle{Architecture de Garage} + \begin{center} + \includegraphics[width=.45\linewidth]{assets/garage.drawio.pdf} + \end{center} +\end{frame} + \end{document} \begin{frame} problèmes de recherche \end{frame} +\begin{frame}{Auto-hébergement traditionnel : pas de haute disponibilité} + \begin{center} + \includegraphics[width=0.8\textwidth]{services-oldschool.png} + \end{center} +\end{frame} + +\begin{frame}{Deuxfleurs aujourd'hui : haute disponibilité pour le stockage objet} + \begin{center} + \includegraphics[width=0.8\textwidth]{services-garage.png} + \end{center} +\end{frame} + +\begin{frame}{Objectif : haute disponibilité pour les données applicatives} + \begin{center} + \only<1>{\includegraphics[width=0.8\textwidth]{services-bdd.png}}% + \only<2>{\includegraphics[width=0.8\textwidth]{services-bdd-modifies.png}} + \end{center} +\end{frame} + +\begin{frame} + \textbf{Question : quel modèle de ``base de données distribuée'' veut-on dans ce contexte ?} + + \vfill + + Contraintes : + \begin{itemize} + \item tolérance aux fautes $\Rightarrow$ réplication et donc questions de cohérence + \item géo-distribution avec latence $\Rightarrow$ cohérence plus faible pour avoir des performances acceptables + \item ressources matérielles limitées $\Rightarrow$ contexte plus ``Edge'' que ``Cloud'' + \end{itemize} +\end{frame} + +\begin{frame}{} + + {\large \textbf{Question plus précise :} quel est le bon compromis entre la facilité + d'implémentation et d'opération de la base de données, et la facilité + d'utilisation par les applications ?} + + \bigskip + + \begin{itemize} + \item quel modèle de données ? quelles garanties de cohérence ? + \item solutions plutôt à chercher du côté des bases NoSQL (Cassandra, Riak, Scylla, ...) + \end{itemize} + +\end{frame} + +\begin{frame}{Une étude de cas encore expérimentale} + + \vfill + + \begin{itemize} + \setlength\itemsep{1em} + \item \textbf{Aerogramme} : service d'hébergement e-mail distribué + %\qquad \includegraphics[width=3em]{assets/logos/aerogramme.pdf} + + \item[] \hspace{-1em} implémenté par dessus : + \item \textbf{Garage K2V} : BDD clé-valeur, extension expérimentale de Garage + \end{itemize} + + \vfill + + \begin{center} \includegraphics[width=0.45\textwidth]{aerogramme.png} \end{center} + +\end{frame} + +\begin{frame}{Garage K2V} + +\begin{itemize} +\setlength\itemsep{1em} +\item API clé-valeur + \begin{itemize} + \item opérations sur clés individuelles et intervalles de clés + \item la structure des clés expose la localisation des données : partition key + sort key + \end{itemize} +\item cohérence faible + \begin{itemize} + \item read-after-write sur une même clé + \item pas de cohérence entre différentes clés + \end{itemize} +\item les écritures concurrentes sont détectées et doivent être résolues par l'application +\end{itemize} + +\end{frame} + +\begin{frame}{Aerogramme : serveur IMAP par dessus Garage} + +\begin{center} + \includegraphics[height=0.9\textheight]{aerogramme-general.png} +\end{center} + +\end{frame} + +\begin{frame}{Aerogramme : modèle de données} + +\begin{center} + \includegraphics[width=.4\linewidth]{aerogramme_datatype.drawio.pdf} +\end{center} + +\end{frame} + +\begin{frame}{Aerogramme : log d'opérations et cohérence} + +Log K2V : historique d'opérations sur une boite mail + +\medskip + +\begin{itemize} + \item cohérence faible $\Rightarrow$ certaines opérations sont ajoutées de manière concurrente + \item ... on peut donc avoir des \textbf{conflits} entre les noeuds pour numéroter un email ! + \item \textbf{astuce} : IMAP permet au serveur de déclarer aux clients qu'il + faut invalider tous les numéros d'email $\Rightarrow$ permet de renuméroter en cas de conflit +\end{itemize} + +\vfill\pause + +Conclusion : le fonctionnement d'Aerogramme est subtil + +\medskip +\begin{itemize} +\item uniquement possible grâce à une fonctionnalité obscure de IMAP +\item requiert probablement également la cohérence ``monotonic read'' dans K2V (TODO) +\item \textbf{opportunité pour un modèle et une preuve formelle} +\end{itemize} + +\end{frame} + +\end{document} + %% vim: set ts=4 sw=4 tw=0 noet spelllang=en :