aboutsummaryrefslogtreecommitdiff
path: root/doc/talks/2021-04-28_spirals-team/garage.tex
diff options
context:
space:
mode:
authorAlex <alex@adnab.me>2021-04-30 15:47:11 +0200
committerAlex <alex@adnab.me>2021-04-30 15:47:11 +0200
commitb1f60579a13d3c5eba7f74b1775c84639ea9b51a (patch)
tree2581343ea7a97118064191ce06639e72d37bfa20 /doc/talks/2021-04-28_spirals-team/garage.tex
parentdcfc32cf85bc6276fdff2492898c1cbb527e9b9d (diff)
parentbe3b1d8f91b7e9a42dee9083ee0e9ebf52bbc57f (diff)
downloadgarage-b1f60579a13d3c5eba7f74b1775c84639ea9b51a.tar.gz
garage-b1f60579a13d3c5eba7f74b1775c84639ea9b51a.zip
Merge pull request 'created doc/talks subfolder and added my talk and the previous one done at the wide team' (#67) from talks into main
Reviewed-on: https://git.deuxfleurs.fr/Deuxfleurs/garage/pulls/67
Diffstat (limited to 'doc/talks/2021-04-28_spirals-team/garage.tex')
-rw-r--r--doc/talks/2021-04-28_spirals-team/garage.tex147
1 files changed, 147 insertions, 0 deletions
diff --git a/doc/talks/2021-04-28_spirals-team/garage.tex b/doc/talks/2021-04-28_spirals-team/garage.tex
new file mode 100644
index 00000000..9f953602
--- /dev/null
+++ b/doc/talks/2021-04-28_spirals-team/garage.tex
@@ -0,0 +1,147 @@
+\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} \ No newline at end of file