mirror of
https://git.deuxfleurs.fr/Deuxfleurs/garage.git
synced 2024-11-22 16:11:01 +00:00
147 lines
3.8 KiB
TeX
147 lines
3.8 KiB
TeX
|
\section{Introducing Garage}
|
||
|
|
||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
|
\begin{frame}{Brought to you by the Deuxfleurs association}
|
||
|
|
||
|
\begin{block}{\textbf{deuxfleurs.fr} -- a libre hosting association with a vision}
|
||
|
``Shifting the current structure of the Internet from a world of a few very large service providers, to a world where services are hosted by a variety of smaller organisations.''
|
||
|
\end{block}
|
||
|
|
||
|
|
||
|
\begin{block}{Our goals}
|
||
|
\begin{itemize}
|
||
|
\item To propose performant \& reliable libre services for the masses
|
||
|
\item To host and administer our infrastructure ourselves
|
||
|
\item To allow members to contribute storage/compute nodes
|
||
|
\item Resilience: for availability \& the sysadmins' sleep
|
||
|
\item Conceptual simplicity to ease onboarding \& demistify hosting
|
||
|
\end{itemize}
|
||
|
\end{block}
|
||
|
|
||
|
|
||
|
\end{frame}
|
||
|
|
||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
|
\begin{frame}{The lacking state of the practice}
|
||
|
|
||
|
\begin{block}{Object storage fitted our needs}
|
||
|
\begin{itemize}
|
||
|
\item Distributed by design
|
||
|
\item Objects are replicated
|
||
|
\item Conceptually simple
|
||
|
\end{itemize}
|
||
|
\end{block}
|
||
|
\vfill
|
||
|
|
||
|
\begin{block}{Existing object stores did not}
|
||
|
\begin{itemize}
|
||
|
\item Too specific / complex
|
||
|
\item Resource hungry
|
||
|
\item Hidden constraints
|
||
|
\end{itemize}
|
||
|
\end{block}
|
||
|
\vfill
|
||
|
|
||
|
We developed Garage, an object store with minimal functionality.
|
||
|
|
||
|
It works, and serves our static sites and media.
|
||
|
|
||
|
\end{frame}
|
||
|
|
||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
|
\begin{frame}{Introducing Garage}
|
||
|
|
||
|
\centering
|
||
|
\url{garagehq.deuxfleurs.fr}
|
||
|
|
||
|
\url{git.deuxfleurs.fr/Deuxfleurs/garage}
|
||
|
|
||
|
\includegraphics[width=.4\columnwidth]{figures/garage_distributed.png}
|
||
|
\vfill
|
||
|
|
||
|
\raggedright
|
||
|
\begin{itemize}
|
||
|
\item Distributed data store
|
||
|
\item Based on DynamoDB object store (P2P!)
|
||
|
\item Modular data types/protocols with CRDTs:
|
||
|
\begin{itemize}
|
||
|
\item Done: objects (media, static sites, backups...) via S3 API
|
||
|
\item To do: e-mails via IMAP protocol, and more
|
||
|
\end{itemize}
|
||
|
\end{itemize}
|
||
|
|
||
|
\end{frame}
|
||
|
|
||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
|
\begin{frame}[t]{The \textbf{RING}}
|
||
|
|
||
|
\centering
|
||
|
\fullcite{decandia_dynamo:_2007}
|
||
|
\vspace{3ex}
|
||
|
|
||
|
\only<1>{\includegraphics[width=.5\columnwidth]{figures/c1.pdf}}%
|
||
|
\only<2>{\includegraphics[width=.5\columnwidth]{figures/c2.pdf}}%
|
||
|
\only<3>{\includegraphics[width=.5\columnwidth]{figures/c3.pdf}}%
|
||
|
\only<4>{\includegraphics[width=.5\columnwidth]{figures/c4.pdf}}%
|
||
|
\vspace{5ex}
|
||
|
|
||
|
%\raggedright
|
||
|
\only<1>{Each node is assigned a unique ID on the circular address space.}%
|
||
|
\only<2-3>{When a new object is added to the store...}%
|
||
|
\only<3>{\\ It is assigned a unique ID (its \emph{key}) on the address space.}%
|
||
|
\only<4>{The $R$ nodes after the object are in charge of replicating it.}%
|
||
|
|
||
|
\end{frame}
|
||
|
|
||
|
|
||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
|
\begin{frame}{Distributed metadata}
|
||
|
|
||
|
\centering
|
||
|
\includegraphics[width=.8\columnwidth]{figures/garage_tables.pdf}
|
||
|
\vfill
|
||
|
|
||
|
The objects, versions and blocks are all stored in the ring.
|
||
|
|
||
|
\end{frame}
|
||
|
|
||
|
|
||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
|
\begin{frame}{Written in Rust}
|
||
|
|
||
|
\begin{columns}
|
||
|
\column{.65\columnwidth}
|
||
|
Entirely written in Rust!
|
||
|
\column{.35\columnwidth}
|
||
|
\centering
|
||
|
\includegraphics[width=.85\columnwidth]{figures/rustacean-flat-happy.png}
|
||
|
\end{columns}
|
||
|
\vfill
|
||
|
|
||
|
\begin{columns}
|
||
|
\column[t]{.6\columnwidth}
|
||
|
\textbf{Pros:}
|
||
|
\begin{itemize}
|
||
|
\item Compiled and fast
|
||
|
\item Features prevent usual mistakes:
|
||
|
|
||
|
strongly typed, immutable by default, ownership instead of GC...
|
||
|
|
||
|
\item Best of several paradigms:
|
||
|
|
||
|
imperative, OO, functional
|
||
|
|
||
|
\item Good libraries for network programmings:
|
||
|
|
||
|
serialization, http, async/await...
|
||
|
\end{itemize}
|
||
|
\column[t]{.4\columnwidth}
|
||
|
\textbf{Cons}:
|
||
|
\begin{itemize}
|
||
|
\item Steep learning curve
|
||
|
\item Long compilation times
|
||
|
\item Compiler rage
|
||
|
\end{itemize}
|
||
|
\end{columns}
|
||
|
|
||
|
\end{frame}
|