talks/2025-04-03-stack/talk.tex
2025-04-02 15:31:20 +02:00

337 lines
8.8 KiB
TeX

\nonstopmode
\documentclass[aspectratio=169,xcolor={svgnames}]{beamer}
\usepackage[utf8]{inputenc}
% \usepackage[frenchb]{babel}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{breqn}
\usepackage{multirow}
\usetheme{boxes}
\usepackage{graphicx}
\usepackage{import}
\usepackage{adjustbox}
\usepackage[absolute,overlay]{textpos}
\usepackage{tikz}
%\useoutertheme[footline=authortitle,subsection=false]{miniframes}
%\useoutertheme[footline=authorinstitute,subsection=false]{miniframes}
\useoutertheme{infolines}
\setbeamertemplate{headline}{}
\beamertemplatenavigationsymbolsempty
\definecolor{TitleOrange}{RGB}{255,137,0}
\setbeamercolor{title}{fg=TitleOrange}
\setbeamercolor{frametitle}{fg=TitleOrange}
\definecolor{ListOrange}{RGB}{255,145,5}
\setbeamertemplate{itemize item}{\color{ListOrange}$\blacktriangleright$}
\definecolor{verygrey}{RGB}{70,70,70}
\setbeamercolor{normal text}{fg=verygrey}
\usepackage{tabu}
\usepackage{multicol}
\usepackage{vwcol}
\usepackage{stmaryrd}
\usepackage{graphicx}
\usepackage[normalem]{ulem}
\AtBeginSection[]{
\begin{frame}
\vfill
\centering
\begin{beamercolorbox}[sep=8pt,center,shadow=true,rounded=true]{title}
\usebeamerfont{title}\insertsectionhead\par%
\end{beamercolorbox}
\vfill
\end{frame}
}
\title{Deuxfleurs : une infrastructure numérique distribuée low-tech}
\author{Armaël Guéneau, Baptiste Jonglez}
\date{2025-04-03}
\begin{document}
\begin{frame}
\centering
\includegraphics[width=.2\linewidth]{assets/logos/deuxfleurs.pdf}
\vfill
{\large\bf Deuxfleurs : une infrastructure numérique distribuée low-tech}
\vspace{1em}
{Armaël Guéneau, Inria Toccata} \\
{Baptiste Jonglez, Inria Stack} \\
\end{frame}
\begin{frame}{Qui sommes nous}
\end{frame}
\begin{frame}{L'association Deuxfleurs}
Deuxfleurs est une association loi 1901 qui héberge des services numériques
\vfill
Objectif : \\ \textbf{Construire une infrastructure numérique robuste,
utile, et gérée en commun}
\vfill
membre du collectif CHATONS (hébergeurs associatifs)
\end{frame}
\begin{frame}{Choix politiques}
\begin{enumerate}
\setlength\itemsep{1.5em}
\item \textbf{Réduire les dépendances} aux acteurs dominants, maîtriser les dépendances
inévitables (électricité, réseau). Jusqu'à maîtriser toute la pile
logicielle, matérielle et hébergement.
\item \textbf{Sobriété radicale :} empreinte matérielle minimale et fixe. Adapter les
usages aux ressources et non l'inverse.
\item \textbf{Bonne qualité de service :} alternative crédible aux GAFAM (CHATONS
souvent critiqués pour leur qualité de service)
\end{enumerate}
\end{frame}
\begin{frame}{Conséquences de ces choix}
\begin{itemize}
\setlength\itemsep{1.5em}
\item \textbf{hébergement hors datacenters}, à la maison \\
$\Longrightarrow$ électricité et réseau domestique pas fiables
\item \textbf{matériel reconditionné peu puissant}, de capacité fixe \\
$\Longrightarrow$
adapter les services et usages en fonction des limites (RAM, CPU, stockage)
\item \textbf{infrastructure géo-distribuée et tolérante aux fautes} pour assurer une bonne
disponibilité \\
$\Longrightarrow$ besoin de logiciels adaptés
\end{itemize}
\end{frame}
\begin{frame}
\begin{center}
\textbf{
Qu'est-ce qui rend l'infra Deuxfleurs intéressante dans un contexte recherche ?
}
\end{center}
\vfill
\begin{itemize}
\setlength\itemsep{1.8em}
\item R\&D sur des nouveaux logiciels car souvent rien sur l'étagère qui répond à nos besoins \\[0.2em]
{\small $\Longrightarrow$ par ex: stockage géo-distribué résistant aux fautes }
\item Peu de contraintes vis-à-vis de technos existantes ou legacy. \\
Approche greenfield : on choisit et conçoit les services que l'on fournit. \\ [0.2em]
{\small $\Longrightarrow$ par ex: hébergement de sites web, mais seulement statiques }
% FaaS à notre sauce ?
%
\end{itemize}
\end{frame}
\begin{frame}
\begin{center}
{\Large \color{TitleOrange}\bf Deuxfleurs aujourd'hui}
\vspace{1em}
{\color{TitleOrange}\bf ce qui marche, comment ça marche}
\end{center}
\end{frame}
\begin{frame}{Services}
\textbf{Communication}\\[0.5em]
Discussion instantanée \qquad E-mails et agenda \qquad Visio
\vfill
\textbf{Édition collaborative}\\[0.5em]
Bureautique \qquad Forge logicielle
\vfill
\textbf{Publication}\\[0.5em]
\only<1>{Sites web statiques}%
\only<2->{{\color{TitleOrange}{Sites web statiques}}
\quad {} $\leftarrow$ {} \quad
Utilise entièrement du logiciel maison. Service le plus fiable !
}
\vspace{1em}
\onslide<3>{
\qquad Partenariat avec l'agence web Noesya qui y héberge une partie de ses clients
}
\begin{tikzpicture}[overlay]
\node<3> at (14, 0.1) {\includegraphics[width=3em]{noesya.png}};
\end{tikzpicture}
\end{frame}
{
\usebackgroundtemplate{\includegraphics[height=\paperheight,width=\paperwidth]{fresque-web.png}}
\setbeamertemplate{navigation symbols}{}
\begin{frame}[plain]
\end{frame}
}
\begin{frame}
\frametitle{Infrastructure et logiciels actuels}
{\Large Choix radicaux $\Longrightarrow$ infrastructure spécifique}
\vfill
{\large Qu'est-ce qui fonctionne actuellement ?}
\end{frame}
{
\usebackgroundtemplate{\includegraphics[height=\paperheight,width=\paperwidth]{infra.jpg}}
\setbeamertemplate{navigation symbols}{}
\begin{frame}[plain]
\end{frame}
}
\begin{frame}
\frametitle{Infrastructure et logiciels actuels}
\begin{itemize}
\item Des machines en nombre limité et peu puissantes
\item Plusieurs zones géographiques
\item Un orchestrateur distribué ``off the shelf'' (Nomad + Consul)
\item Un logiciel de stockage objet distribué ``maison'' (Garage)
\item Des boucles de rétroaction
\item Des services majoritairement distribués
\end{itemize}
\end{frame}
\begin{frame}[plain]
\begin{center}
\includegraphics[height=\textheight]{assets/deuxfleurs-nomad-20241022.png}
\end{center}
\end{frame}
\begin{frame}
\frametitle{Nomad}
\begin{itemize}
\item Orchestrateur développé par Hashicorp / IBM
\item Définition déclarative des ``jobs'' avec contraintes
\item Fonctions : ordonnancement et maintien en condition
\item Control plane hautement disponible (clustering Raft)
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Exemple de job Nomad (simplifié)}
\begin{footnotesize}
\begin{verbatim}
job "jitsi" {
datacenters = ["neptune", "scorpio", "corrin"]
type = "service"
task "front" {
driver = "docker"
config { image = "superboum/amd64_jitsi_meet:v7"
volumes = ["secrets/certs/jitsi.key:/etc/nginx/jitsi.key"] }
template { data = "{{ key \"secrets/jitsi/jitsi.key\" }}"
destination = "secrets/certs/jitsi.key" }
resources { cpu = 300, memory = 200 }
service {
port = "https_port"
name = "https-jitsi"
check { type = "tcp"
port = "https_port"
interval = "60s"
timeout = "5s" }
}
}
}
\end{verbatim}
\end{footnotesize}
\end{frame}
\begin{frame}
\frametitle{Consul}
\begin{itemize}
\item \textbf{Outil de coordination distribuée} développé par Hashicorp
\item Base de données clé-valeur distribuée (similaire à etcd)
\item Stocke la configuration utile à Nomad + contenu arbitraire
\item Service discovery (via intégration Nomad + API dédiée + DNS)
\item Hautement disponible (clustering Raft)
\end{itemize}
\end{frame}
\begin{frame}[plain]
\begin{center}
\includegraphics[height=\textheight]{infra_services_control_loop.png}
\end{center}
\end{frame}
\begin{frame}
\frametitle{Stockage objet avec Garage}
\begin{center}
\includegraphics[height=6em]{assets/logos/Amazon-S3.jpg}
\hspace{3em}
\includegraphics[height=5em]{assets/logos/minio.png}
\hspace{3em}
\includegraphics[height=6em]{logo/garage_hires_crop.png}
\end{center}
\vspace{1em}
S3 est un standard de-facto, beaucoup d'applications sont compatibles
\vspace{1em}
MinIO permet d'auto-héberger un service S3 mais ne fonctionne pas en géo-distribué
\vspace{1em}
\textbf{Garage est un logiciel libre de stockage objet géo-distribué compatible S3}
\url{https://garagehq.deuxfleurs.fr/}
\end{frame}
\begin{frame}
\frametitle{La génèse de Garage}
\begin{itemize}
\item Né de la frustration avec GlusterFS, Ceph, MinIO : ils échouent en géodistribué
\item Développé par Deuxfleurs sur un financement NGI (6 personnes-ans) + NLNet
\item Écrit en Rust
\item Logiciel libre AGPL, contributions externes
\item Bien connu et utilisé, fait concurrence à MinIO sur un segment ``hobbyist++''
\end{itemize}
\vfill
Le design priorise une \textbf{faible empreinte en ressources}, une \textbf{tolérance aux fortes latences} et aux \textbf{déconnexions}, de la \textbf{robustesse}.
\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}
%% vim: set ts=4 sw=4 tw=0 noet spelllang=en :