337 lines
8.8 KiB
TeX
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 :
|