diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..b634d85 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.pdf filter=lfs diff=lfs merge=lfs -text diff --git a/doc/logo/garage_hires.png b/doc/logo/garage_hires.png new file mode 100644 index 0000000..488836f Binary files /dev/null and b/doc/logo/garage_hires.png differ diff --git a/doc/sticker/Garage.pdf b/doc/sticker/Garage.pdf index 43f511e..1359a30 100644 Binary files a/doc/sticker/Garage.pdf and b/doc/sticker/Garage.pdf differ diff --git a/doc/talks/2020-12-02_wide-team/talk.pdf b/doc/talks/2020-12-02_wide-team/talk.pdf index b27eca2..68dfa04 100644 Binary files a/doc/talks/2020-12-02_wide-team/talk.pdf and b/doc/talks/2020-12-02_wide-team/talk.pdf differ diff --git a/doc/talks/2021-04-28_spirals-team/figures/c1.pdf b/doc/talks/2021-04-28_spirals-team/figures/c1.pdf index 4568b70..8ae0fa4 100644 Binary files a/doc/talks/2021-04-28_spirals-team/figures/c1.pdf and b/doc/talks/2021-04-28_spirals-team/figures/c1.pdf differ diff --git a/doc/talks/2021-04-28_spirals-team/figures/c2.pdf b/doc/talks/2021-04-28_spirals-team/figures/c2.pdf index 63be7d3..c611232 100644 Binary files a/doc/talks/2021-04-28_spirals-team/figures/c2.pdf and b/doc/talks/2021-04-28_spirals-team/figures/c2.pdf differ diff --git a/doc/talks/2021-04-28_spirals-team/figures/c3.pdf b/doc/talks/2021-04-28_spirals-team/figures/c3.pdf index 514e66f..83af359 100644 Binary files a/doc/talks/2021-04-28_spirals-team/figures/c3.pdf and b/doc/talks/2021-04-28_spirals-team/figures/c3.pdf differ diff --git a/doc/talks/2021-04-28_spirals-team/figures/c4.pdf b/doc/talks/2021-04-28_spirals-team/figures/c4.pdf index 348e900..8199c8a 100644 Binary files a/doc/talks/2021-04-28_spirals-team/figures/c4.pdf and b/doc/talks/2021-04-28_spirals-team/figures/c4.pdf differ diff --git a/doc/talks/2021-04-28_spirals-team/figures/conflict_acid.pdf b/doc/talks/2021-04-28_spirals-team/figures/conflict_acid.pdf index 4175e14..c614aa9 100644 Binary files a/doc/talks/2021-04-28_spirals-team/figures/conflict_acid.pdf and b/doc/talks/2021-04-28_spirals-team/figures/conflict_acid.pdf differ diff --git a/doc/talks/2021-04-28_spirals-team/figures/conflict_base.pdf b/doc/talks/2021-04-28_spirals-team/figures/conflict_base.pdf index 95fe054..13dd9e4 100644 Binary files a/doc/talks/2021-04-28_spirals-team/figures/conflict_base.pdf and b/doc/talks/2021-04-28_spirals-team/figures/conflict_base.pdf differ diff --git a/doc/talks/2021-04-28_spirals-team/figures/conflict_crdt.pdf b/doc/talks/2021-04-28_spirals-team/figures/conflict_crdt.pdf index bf4354c..8130641 100644 Binary files a/doc/talks/2021-04-28_spirals-team/figures/conflict_crdt.pdf and b/doc/talks/2021-04-28_spirals-team/figures/conflict_crdt.pdf differ diff --git a/doc/talks/2021-04-28_spirals-team/figures/conflict_problem.pdf b/doc/talks/2021-04-28_spirals-team/figures/conflict_problem.pdf index b07ad3b..d8e4e16 100644 Binary files a/doc/talks/2021-04-28_spirals-team/figures/conflict_problem.pdf and b/doc/talks/2021-04-28_spirals-team/figures/conflict_problem.pdf differ diff --git a/doc/talks/2021-04-28_spirals-team/figures/garage_tables.pdf b/doc/talks/2021-04-28_spirals-team/figures/garage_tables.pdf index a7dd13b..66e285f 100644 Binary files a/doc/talks/2021-04-28_spirals-team/figures/garage_tables.pdf and b/doc/talks/2021-04-28_spirals-team/figures/garage_tables.pdf differ diff --git a/doc/talks/2021-04-28_spirals-team/figures/m_proxy_gray.pdf b/doc/talks/2021-04-28_spirals-team/figures/m_proxy_gray.pdf index fc96e3a..dbeb487 100644 Binary files a/doc/talks/2021-04-28_spirals-team/figures/m_proxy_gray.pdf and b/doc/talks/2021-04-28_spirals-team/figures/m_proxy_gray.pdf differ diff --git a/doc/talks/2021-04-28_spirals-team/talk.pdf b/doc/talks/2021-04-28_spirals-team/talk.pdf index 051d8f6..2e7a5e6 100644 Binary files a/doc/talks/2021-04-28_spirals-team/talk.pdf and b/doc/talks/2021-04-28_spirals-team/talk.pdf differ diff --git a/doc/talks/2021-09-13-ngi-kickoff/talk.pdf b/doc/talks/2021-09-13-ngi-kickoff/talk.pdf index cfb5849..15810ff 100644 Binary files a/doc/talks/2021-09-13-ngi-kickoff/talk.pdf and b/doc/talks/2021-09-13-ngi-kickoff/talk.pdf differ diff --git a/doc/talks/2022-02-06-fosdem/.gitignore b/doc/talks/2022-02-06-fosdem/.gitignore new file mode 100644 index 0000000..82d8e95 --- /dev/null +++ b/doc/talks/2022-02-06-fosdem/.gitignore @@ -0,0 +1,13 @@ +* + +!assets + +!.gitignore +!*.svg +!*.png +!*.jpg +!*.tex +!Makefile +!.gitignore + +!talk.pdf diff --git a/doc/talks/2022-02-06-fosdem/Makefile b/doc/talks/2022-02-06-fosdem/Makefile new file mode 100644 index 0000000..8df2258 --- /dev/null +++ b/doc/talks/2022-02-06-fosdem/Makefile @@ -0,0 +1,3 @@ +talk.pdf: talk.tex + pdflatex talk.tex + diff --git a/doc/talks/2022-02-06-fosdem/assets/AGPLv3_Logo.png b/doc/talks/2022-02-06-fosdem/assets/AGPLv3_Logo.png new file mode 100644 index 0000000..445284a Binary files /dev/null and b/doc/talks/2022-02-06-fosdem/assets/AGPLv3_Logo.png differ diff --git a/doc/talks/2022-02-06-fosdem/assets/atuin.jpg b/doc/talks/2022-02-06-fosdem/assets/atuin.jpg new file mode 100644 index 0000000..f2fbd61 Binary files /dev/null and b/doc/talks/2022-02-06-fosdem/assets/atuin.jpg differ diff --git a/doc/talks/2022-02-06-fosdem/assets/compatibility.png b/doc/talks/2022-02-06-fosdem/assets/compatibility.png new file mode 100644 index 0000000..ce364a9 Binary files /dev/null and b/doc/talks/2022-02-06-fosdem/assets/compatibility.png differ diff --git a/doc/talks/2022-02-06-fosdem/assets/endpoint-latency-dc.png b/doc/talks/2022-02-06-fosdem/assets/endpoint-latency-dc.png new file mode 100644 index 0000000..7c7411c Binary files /dev/null and b/doc/talks/2022-02-06-fosdem/assets/endpoint-latency-dc.png differ diff --git a/doc/talks/2022-02-06-fosdem/assets/garageuses.png b/doc/talks/2022-02-06-fosdem/assets/garageuses.png new file mode 100644 index 0000000..b66d7f3 Binary files /dev/null and b/doc/talks/2022-02-06-fosdem/assets/garageuses.png differ diff --git a/doc/talks/2022-02-06-fosdem/assets/inframap.jpg b/doc/talks/2022-02-06-fosdem/assets/inframap.jpg new file mode 100644 index 0000000..19905a9 Binary files /dev/null and b/doc/talks/2022-02-06-fosdem/assets/inframap.jpg differ diff --git a/doc/talks/2022-02-06-fosdem/assets/location-aware.png b/doc/talks/2022-02-06-fosdem/assets/location-aware.png new file mode 100644 index 0000000..8b55f25 Binary files /dev/null and b/doc/talks/2022-02-06-fosdem/assets/location-aware.png differ diff --git a/doc/talks/2022-02-06-fosdem/assets/map.png b/doc/talks/2022-02-06-fosdem/assets/map.png new file mode 100644 index 0000000..1dff3ab Binary files /dev/null and b/doc/talks/2022-02-06-fosdem/assets/map.png differ diff --git a/doc/talks/2022-02-06-fosdem/assets/minio.png b/doc/talks/2022-02-06-fosdem/assets/minio.png new file mode 100644 index 0000000..a71e9cc Binary files /dev/null and b/doc/talks/2022-02-06-fosdem/assets/minio.png differ diff --git a/doc/talks/2022-02-06-fosdem/assets/neptune.jpg b/doc/talks/2022-02-06-fosdem/assets/neptune.jpg new file mode 100644 index 0000000..e59f0bf Binary files /dev/null and b/doc/talks/2022-02-06-fosdem/assets/neptune.jpg differ diff --git a/doc/talks/2022-02-06-fosdem/assets/rust_logo.png b/doc/talks/2022-02-06-fosdem/assets/rust_logo.png new file mode 100644 index 0000000..0e4809e Binary files /dev/null and b/doc/talks/2022-02-06-fosdem/assets/rust_logo.png differ diff --git a/doc/talks/2022-02-06-fosdem/assets/slide1.png b/doc/talks/2022-02-06-fosdem/assets/slide1.png new file mode 100644 index 0000000..eb2e67a Binary files /dev/null and b/doc/talks/2022-02-06-fosdem/assets/slide1.png differ diff --git a/doc/talks/2022-02-06-fosdem/assets/slide2.png b/doc/talks/2022-02-06-fosdem/assets/slide2.png new file mode 100644 index 0000000..126a39b Binary files /dev/null and b/doc/talks/2022-02-06-fosdem/assets/slide2.png differ diff --git a/doc/talks/2022-02-06-fosdem/assets/slide3.png b/doc/talks/2022-02-06-fosdem/assets/slide3.png new file mode 100644 index 0000000..a39f96b Binary files /dev/null and b/doc/talks/2022-02-06-fosdem/assets/slide3.png differ diff --git a/doc/talks/2022-02-06-fosdem/assets/slides.svg b/doc/talks/2022-02-06-fosdem/assets/slides.svg new file mode 100644 index 0000000..9946c6f --- /dev/null +++ b/doc/talks/2022-02-06-fosdem/assets/slides.svg @@ -0,0 +1,4326 @@ + + + + + + + + + + + + + + + + + + + + + + User-facing application + Database + Filesystem + + + + + + + + + + diff --git a/doc/talks/2022-02-06-fosdem/talk.pdf b/doc/talks/2022-02-06-fosdem/talk.pdf new file mode 100644 index 0000000..70bd804 --- /dev/null +++ b/doc/talks/2022-02-06-fosdem/talk.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f800d723e40be190bdd2cea3b132defc3892140f5f6835bc21e8c2b3d1281626 +size 1641987 diff --git a/doc/talks/2022-02-06-fosdem/talk.tex b/doc/talks/2022-02-06-fosdem/talk.tex new file mode 100644 index 0000000..3a50028 --- /dev/null +++ b/doc/talks/2022-02-06-fosdem/talk.tex @@ -0,0 +1,270 @@ +%\nonstopmode +\documentclass[aspectratio=169]{beamer} +\usepackage[utf8]{inputenc} +% \usepackage[frenchb]{babel} +\usepackage{amsmath} +\usepackage{mathtools} +\usepackage{breqn} +\usepackage{multirow} +\usetheme{boxes} +\usepackage{graphicx} +%\useoutertheme[footline=authortitle,subsection=false]{miniframes} + +\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} + +\title{Introducing Garage} +\subtitle{a new storage platform for self-hosted geo-distributed clusters} +\author{Deuxfleurs Association} +\date{FOSDEM '22} + +\begin{document} + +\begin{frame} + \centering + \includegraphics[width=.3\linewidth]{../../sticker/Garage.pdf} + \vspace{1em} + + {\large\bf Deuxfleurs Association} + \vspace{1em} + + \url{https://garagehq.deuxfleurs.fr/} + + Matrix channel: \texttt{\#garage:deuxfleurs.fr} +\end{frame} + +\begin{frame} + \frametitle{Our objective at Deuxfleurs} + + \begin{center} + \textbf{Promote self-hosting and small-scale hosting\\ + as an alternative to large cloud providers} + \end{center} + \vspace{2em} + \visible<2->{ + Why is it hard? + } + \visible<3->{ + \vspace{2em} + \begin{center} + \textbf{\underline{Resilience}}\\ + {\footnotesize (we want good uptime/availability with low supervision)} + \end{center} + } +\end{frame} + +\begin{frame} + \frametitle{How to be resilient (the hard way)} + + Entreprise-grade systems typically employ: + \vspace{1em} + \begin{itemize} + \item RAID + \item Redundant power grid + UPS + \item Redundant Internet connections + \item Low-latency links + \item ... + \end{itemize} + \vspace{1em} + $\to$ it's costly and only worth it at DC scale +\end{frame} + +\begin{frame} + \frametitle{How to be resilient (the \underline{\textbf{cheap}} way)} + + \only<1,4-5>{ + Instead, we use: + \vspace{1em} + \begin{itemize} + \item \textcolor<2->{gray}{Commodity hardware (e.g. old desktop PCs)} + \vspace{.5em} + \item<4-> \textcolor<5->{gray}{Commodity Internet (e.g. FTTB, FTTH) and power grid} + \vspace{.5em} + \item<5-> \textcolor<6->{gray}{\textbf{Geographical redundancy} (multi-site replication)} + \end{itemize} + } + \only<2>{ + \begin{center} + \includegraphics[width=.8\linewidth]{assets/atuin.jpg} + \end{center} + } + \only<3>{ + \begin{center} + \includegraphics[width=.8\linewidth]{assets/neptune.jpg} + \end{center} + } + \only<6>{ + \begin{center} + \includegraphics[width=.5\linewidth]{assets/inframap.jpg} + \end{center} + } +\end{frame} + +\begin{frame} + \frametitle{How to make this happen} + \begin{center} + \only<1>{\includegraphics[width=.8\linewidth]{assets/slide1.png}}% + \only<2>{\includegraphics[width=.8\linewidth]{assets/slide2.png}}% + \only<3>{\includegraphics[width=.8\linewidth]{assets/slide3.png}}% + \end{center} +\end{frame} + +\begin{frame} + \frametitle{Distributed file systems are slow} + File systems are complex, for example: + \vspace{1em} + \begin{itemize} + \item Concurrent modification by several processes + \vspace{1em} + \item Folder hierarchies + \vspace{1em} + \item Other requirements of the POSIX spec + \end{itemize} + \vspace{1em} + Coordination in a distributed system is costly + + \vspace{1em} + Costs explode with commodity hardware / Internet connections\\ + {\small (we experienced this!)} +\end{frame} + +\begin{frame} + \frametitle{A simpler solution: object storage} + Only two operations: + \vspace{1em} + \begin{itemize} + \item Put an object at a key + \vspace{1em} + \item Retrieve an object from its key + \end{itemize} + \vspace{1em} + {\footnotesize (and a few others)} + + \vspace{1em} + Sufficient for many applications! +\end{frame} + +\begin{frame} + \frametitle{A simpler solution: object storage} + \begin{center} + \includegraphics[width=.2\linewidth]{../2020-12-02_wide-team/img/Amazon-S3.jpg} + \hspace{5em} + \includegraphics[width=.2\linewidth]{assets/minio.png} + \end{center} + \vspace{1em} + S3: a de-facto standard, many compatible applications + + \vspace{1em} + + MinIO is self-hostable but not suited for geo-distributed deployments +\end{frame} + + +\begin{frame} + \frametitle{But what is Garage, exactly?} + \textbf{Garage is a self-hosted drop-in replacement for the Amazon S3 object store}\\ + \vspace{.5em} + that implements resilience through geographical redundancy on commodity hardware + \begin{center} + \includegraphics[width=.8\linewidth]{assets/garageuses.png} + \end{center} +\end{frame} + +\begin{frame} + \frametitle{What makes Garage different?} + \textbf{Coordination-free:} + \vspace{2em} + \begin{itemize} + \item No Raft or Paxos + \vspace{1em} + \item Internal data types are CRDTs + \vspace{1em} + \item All nodes are equivalent (no master/leader/index node) + \end{itemize} + \vspace{2em} + $\to$ less sensitive to higher latencies between nodes +\end{frame} + +\begin{frame} + \frametitle{What makes Garage different?} + \begin{center} + \includegraphics[width=.9\linewidth]{assets/endpoint-latency-dc.png} + \end{center} +\end{frame} + +\begin{frame} + \frametitle{What makes Garage different?} + \textbf{Consistency model:} + \vspace{2em} + \begin{itemize} + \item Not ACID (not required by S3 spec) / not linearizable + \vspace{1em} + \item \textbf{Read-after-write consistency}\\ + {\footnotesize (stronger than eventual consistency)} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{What makes Garage different?} + \textbf{Location-aware:} + \vspace{2em} + \begin{center} + \includegraphics[width=\linewidth]{assets/location-aware.png} + \end{center} + \vspace{2em} + Garage replicates data on different zones when possible +\end{frame} + +\begin{frame} + \frametitle{What makes Garage different?} + \begin{center} + \includegraphics[width=.8\linewidth]{assets/map.png} + \end{center} +\end{frame} + +\begin{frame} + \frametitle{An ever-increasing compatibility list} + \begin{center} + \includegraphics[width=.7\linewidth]{assets/compatibility.png} + \end{center} +\end{frame} + +\begin{frame} + \frametitle{Get Garage now!} + \begin{center} + \includegraphics[width=.3\linewidth]{../../logo/garage_hires.png}\\ + \vspace{-1em} + \url{https://garagehq.deuxfleurs.fr/}\\ + Matrix channel: \texttt{\#garage:deuxfleurs.fr} + + \vspace{2em} + \includegraphics[width=.09\linewidth]{assets/rust_logo.png} + \includegraphics[width=.2\linewidth]{assets/AGPLv3_Logo.png} + \end{center} +\end{frame} + +\begin{frame} + \frametitle{Demo time!} +\end{frame} + +\end{document} + +%% vim: set ts=4 sw=4 tw=0 noet spelllang=fr :