aboutsummaryrefslogtreecommitdiff
path: root/doc/talks/2024-01-12-seed
diff options
context:
space:
mode:
Diffstat (limited to 'doc/talks/2024-01-12-seed')
-rw-r--r--doc/talks/2024-01-12-seed/.gitignore17
-rw-r--r--doc/talks/2024-01-12-seed/Makefile10
-rw-r--r--doc/talks/2024-01-12-seed/abstract.md39
-rw-r--r--doc/talks/2024-01-12-seed/assets/AGPLv3_Logo.pngbin0 -> 32497 bytes
-rw-r--r--doc/talks/2024-01-12-seed/assets/alex.jpgbin0 -> 4914 bytes
-rw-r--r--doc/talks/2024-01-12-seed/assets/atuin.jpgbin0 -> 269747 bytes
-rw-r--r--doc/talks/2024-01-12-seed/assets/deuxfleurs.svg91
-rw-r--r--doc/talks/2024-01-12-seed/assets/garage2.drawio.pngbin0 -> 89618 bytes
-rw-r--r--doc/talks/2024-01-12-seed/assets/logo_chatons.pngbin0 -> 203533 bytes
-rw-r--r--doc/talks/2024-01-12-seed/assets/map.pngbin0 -> 148270 bytes
-rw-r--r--doc/talks/2024-01-12-seed/assets/minio.pngbin0 -> 13497 bytes
-rw-r--r--doc/talks/2024-01-12-seed/assets/neptune.jpgbin0 -> 310601 bytes
-rw-r--r--doc/talks/2024-01-12-seed/assets/rust_logo.pngbin0 -> 14835 bytes
-rw-r--r--doc/talks/2024-01-12-seed/talk.pdfbin0 -> 1187444 bytes
-rw-r--r--doc/talks/2024-01-12-seed/talk.tex370
15 files changed, 527 insertions, 0 deletions
diff --git a/doc/talks/2024-01-12-seed/.gitignore b/doc/talks/2024-01-12-seed/.gitignore
new file mode 100644
index 00000000..9f1f00e6
--- /dev/null
+++ b/doc/talks/2024-01-12-seed/.gitignore
@@ -0,0 +1,17 @@
+*
+
+!*.txt
+!*.md
+
+!assets
+
+!.gitignore
+!*.svg
+!*.png
+!*.jpg
+!*.tex
+!Makefile
+!.gitignore
+!assets/*.drawio.pdf
+
+!talk.pdf
diff --git a/doc/talks/2024-01-12-seed/Makefile b/doc/talks/2024-01-12-seed/Makefile
new file mode 100644
index 00000000..033a8af9
--- /dev/null
+++ b/doc/talks/2024-01-12-seed/Makefile
@@ -0,0 +1,10 @@
+ASSETS=assets/deuxfleurs.pdf
+
+talk.pdf: talk.tex $(ASSETS)
+ pdflatex talk.tex
+
+assets/%.pdf: assets/%.svg
+ inkscape -D -z --file=$^ --export-pdf=$@
+
+assets/%.pdf_tex: assets/%.svg
+ inkscape -D -z --file=$^ --export-pdf=$@ --export-latex
diff --git a/doc/talks/2024-01-12-seed/abstract.md b/doc/talks/2024-01-12-seed/abstract.md
new file mode 100644
index 00000000..b2658868
--- /dev/null
+++ b/doc/talks/2024-01-12-seed/abstract.md
@@ -0,0 +1,39 @@
+### (fr) Garage, un système de stockage de données géo-distribué léger et robuste
+
+Garage est un système de stockage de données léger, géo-distribué, qui
+implémente le protocole de stockage S3 de Amazon. Garage est destiné
+principalement à l'auto-hébergement sur du matériel courant d'occasion. À ce
+titre, il doit tolérer un grand nombre de pannes: coupures de courant, coupures
+de connexion Internet, pannes de machines, ... Il doit également être facile à
+déployer et à maintenir, afin de pouvoir être facilement utilisé par des
+amateurs ou des petites organisations.
+
+Cette présentation vous proposera un aperçu de Garage et du choix technique
+principal qui rend un système comme Garage possible: le refus d'utiliser des
+algorithmes de consensus, remplacés avantageusement par des méthodes à
+cohérence faible. Notre modèle est fortement inspiré de la base de donnée
+Dynamo (DeCandia et al, 2007), et fait usage des types de données CRDT (Shapiro
+et al, 2011). Nous exploreront comment ces méthodes s'appliquent à la
+construction de l'abstraction "stockage objet" dans un système distribué, et
+quelles autres abstractions peuvent ou ne peuvent pas être construites dans ce
+modèle.
+
+### (en) Garage, a lightweight and robust geo-distributed data storage system
+
+Garage is a lightweight geo-distributed data store that implements the Amazon
+S3 object storage protocol. Garage is meant primarily for self-hosting at home
+on second-hand commodity hardware, meaning it has to tolerate a wide variety of
+failure scenarios such as power cuts, Internet disconnections and machine
+crashes. It also has to be easy to deploy and maintain, so that hobbyists and
+small organizations can use it without trouble.
+
+This talk will present Garage and the key technical choice that made Garage
+possible: refusing to use consensus algorithms and using instead weak
+consistency methods, with a model that is loosely based on that of the Dynamo
+database (DeCandia et al, 2007) and that makes heavy use of conflict-free
+replicated data types (Shapiro et al, 2011). We will explore how these methods
+are suited to building the "object store" abstraction in a distributed system,
+and what other abstractions are possible or impossible to build in this model.
+
+
+
diff --git a/doc/talks/2024-01-12-seed/assets/AGPLv3_Logo.png b/doc/talks/2024-01-12-seed/assets/AGPLv3_Logo.png
new file mode 100644
index 00000000..445284a3
--- /dev/null
+++ b/doc/talks/2024-01-12-seed/assets/AGPLv3_Logo.png
Binary files differ
diff --git a/doc/talks/2024-01-12-seed/assets/alex.jpg b/doc/talks/2024-01-12-seed/assets/alex.jpg
new file mode 100644
index 00000000..eac0f0a9
--- /dev/null
+++ b/doc/talks/2024-01-12-seed/assets/alex.jpg
Binary files differ
diff --git a/doc/talks/2024-01-12-seed/assets/atuin.jpg b/doc/talks/2024-01-12-seed/assets/atuin.jpg
new file mode 100644
index 00000000..f2fbd61d
--- /dev/null
+++ b/doc/talks/2024-01-12-seed/assets/atuin.jpg
Binary files differ
diff --git a/doc/talks/2024-01-12-seed/assets/deuxfleurs.svg b/doc/talks/2024-01-12-seed/assets/deuxfleurs.svg
new file mode 100644
index 00000000..c298c22b
--- /dev/null
+++ b/doc/talks/2024-01-12-seed/assets/deuxfleurs.svg
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ viewBox="0 0 70.424515 70.300102"
+ version="1.1"
+ id="svg8"
+ sodipodi:docname="logo.svg"
+ inkscape:version="1.1 (c68e22c387, 2021-05-23)"
+ inkscape:export-filename="/home/quentin/Documents/dev/deuxfleurs/site/src/img/logo.png"
+ inkscape:export-xdpi="699.30194"
+ inkscape:export-ydpi="699.30194"
+ width="70.424515"
+ height="70.300102"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs12" />
+ <sodipodi:namedview
+ id="namedview10"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ showgrid="false"
+ inkscape:zoom="12.125"
+ inkscape:cx="43.092783"
+ inkscape:cy="48.082474"
+ inkscape:window-width="3072"
+ inkscape:window-height="1659"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg8" />
+ <g
+ id="g79969"
+ transform="translate(-0.827,34.992103)">
+ <path
+ fill="#ffffff"
+ d="m 15.632,34.661 c -0.799,-0.597 -1.498,-1.484 -2.035,-2.592 l -0.228,-0.47 -0.46,0.249 c -0.975,0.528 -1.913,0.858 -2.744,0.969 L 9.963,29.061 6.327,30.029 C 6.17,29.175 6.202,28.142 6.423,27.007 L 6.526,26.482 5.994,26.416 C 4.752,26.262 3.688,25.891 2.89,25.336 L 4.411,22.419 1.423,20.896 C 1.742,19.952 2.371,19.014 3.257,18.161 L 3.634,17.798 3.255,17.438 C 2.452,16.674 1.847,15.884 1.485,15.127 L 4.995,13.774 2.95,10.615 C 3.69,10.213 4.643,9.929 5.739,9.783 L 6.258,9.715 6.167,9.201 C 5.952,7.99 5.995,6.863 6.291,5.913 l 3.308,0.523 0.524,-3.308 c 0.988,0.013 2.08,0.326 3.164,0.907 L 13.749,4.283 13.975,3.81 C 14.454,2.807 15.019,1.986 15.628,1.406 L 18,4.326 20.372,1.406 c 0.609,0.58 1.175,1.401 1.653,2.404 l 0.226,0.473 0.462,-0.247 C 23.798,3.455 24.891,3.142 25.877,3.13 L 26.4,6.438 29.71,5.913 c 0.296,0.951 0.34,2.078 0.124,3.288 l -0.092,0.515 0.518,0.069 c 1.095,0.145 2.048,0.43 2.788,0.832 l -2.046,3.156 3.511,1.355 c -0.361,0.757 -0.966,1.547 -1.77,2.311 l -0.379,0.36 0.377,0.363 c 0.888,0.854 1.516,1.793 1.835,2.736 l -2.984,1.52 1.521,2.984 c -0.812,0.574 -1.871,0.964 -3.094,1.134 l -0.518,0.072 0.096,0.514 c 0.201,1.089 0.226,2.083 0.073,2.909 l -3.634,-0.97 -0.204,3.757 c -0.83,-0.11 -1.768,-0.44 -2.742,-0.968 l -0.459,-0.249 -0.228,0.47 c -0.539,1.107 -1.237,1.994 -2.036,2.591 L 18,32.293 Z"
+ id="path2" />
+ <path
+ d="M 7.092,10.678 C 6.562,9.189 6.394,7.708 6.66,6.478 l 2.368,0.375 0.987,0.156 0.157,-0.988 0.375,-2.368 C 11.808,3.78 13.16,4.396 14.409,5.359 14.527,5.022 14.653,4.696 14.791,4.392 13.24,3.257 11.568,2.629 10.061,2.629 9.938,2.629 9.816,2.633 9.695,2.642 L 9.184,5.865 5.96,5.354 C 5.36,6.841 5.395,8.769 6.045,10.747 6.38,10.71 6.729,10.686 7.092,10.678 Z M 21.593,5.359 c 1.248,-0.962 2.6,-1.578 3.86,-1.705 l 0.376,2.368 0.156,0.988 0.987,-0.157 2.369,-0.376 c 0.266,1.23 0.098,2.71 -0.432,4.2 0.361,0.009 0.711,0.032 1.046,0.07 C 30.606,8.769 30.64,6.841 30.04,5.353 L 26.815,5.865 26.304,2.641 c -0.12,-0.008 -0.242,-0.012 -0.365,-0.012 -1.507,0 -3.179,0.628 -4.73,1.762 0.14,0.306 0.266,0.631 0.384,0.968 z M 7.368,27 h 0.035 c 0.067,0 0.157,-0.604 0.26,-0.947 -0.098,0.004 -0.197,0.046 -0.294,0.046 -1.496,0 -2.826,-0.303 -3.83,-0.89 L 4.628,23.081 5.082,22.194 4.191,21.742 2.055,20.654 C 2.563,19.503 3.57,18.404 4.873,17.511 4.586,17.292 4.312,17.07 4.063,16.842 2.376,18.059 1.217,19.597 0.828,21.152 l 2.908,1.483 -1.482,2.843 C 3.475,26.501 5.303,27 7.368,27 Z m 27.806,-5.846 c -0.39,-1.555 -1.548,-3.093 -3.234,-4.311 -0.25,0.228 -0.523,0.451 -0.81,0.669 1.304,0.893 2.31,1.992 2.817,3.145 l -2.136,1.088 -0.891,0.453 0.454,0.892 1.089,2.137 c -1.004,0.587 -2.332,0.904 -3.828,0.904 -0.099,0 -0.199,-0.01 -0.299,-0.013 0.103,0.344 0.192,0.683 0.26,1.011 l 0.039,0.002 c 2.066,0 3.892,-0.563 5.112,-1.587 l -1.482,-2.908 z m -12.653,9.182 c -0.447,1.517 -1.181,2.812 -2.119,3.651 L 18.707,32.293 18,31.586 l -0.707,0.707 -1.695,1.694 c -0.938,-0.839 -1.673,-2.136 -2.12,-3.652 -0.296,0.206 -0.593,0.397 -0.886,0.563 0.636,1.98 1.741,3.559 3.1,4.409 L 18,33 l 2.308,2.308 c 1.358,-0.851 2.464,-2.428 3.101,-4.408 -0.295,-0.168 -0.591,-0.359 -0.888,-0.564 z"
+ fill="#ea596e"
+ id="path4" />
+ <path
+ fill="#ea596e"
+ d="m 20.118,5.683 c 0.426,1.146 0.748,2.596 0.841,4.284 l 0.2,3.683 3.564,-0.946 c 1.32,-0.351 2.655,-0.536 3.86,-0.536 0.16,0 0.318,0.003 0.474,0.01 l -1.827,2.819 3.139,1.211 c -0.958,0.759 -2.237,1.514 -3.814,2.123 l -3.441,1.328 2.001,3.099 c 0.918,1.42 1.509,2.782 1.838,3.96 L 23.709,25.853 23.527,29.21 C 22.508,28.533 21.395,27.55 20.329,26.237 L 18,23.374 15.672,26.236 c -1.066,1.312 -2.179,2.295 -3.198,2.972 l -0.18,-3.354 -3.248,0.864 c 0.329,-1.178 0.921,-2.54 1.839,-3.961 L 12.889,19.658 9.447,18.33 C 7.87,17.721 6.591,16.967 5.633,16.208 L 8.768,15 6.941,12.177 c 0.155,-0.006 0.313,-0.01 0.473,-0.01 1.206,0 2.541,0.185 3.861,0.536 l 3.564,0.947 0.202,-3.683 c 0.092,-1.688 0.415,-3.138 0.84,-4.284 L 18,8.292 20.118,5.683 M 20.308,0.692 18,3.533 15.692,0.692 C 13.703,2.224 12.271,5.684 12.046,9.804 10.429,9.374 8.854,9.167 7.414,9.167 c -2.11,0 -3.929,0.445 -5.161,1.289 l 1.989,3.073 -3.415,1.316 c 0.842,2.366 3.69,4.797 7.54,6.283 -2.241,3.465 -3.116,7.106 -2.407,9.516 l 3.537,-0.941 0.196,3.654 c 2.512,-0.07 5.703,-2.027 8.307,-5.228 2.603,3.201 5.796,5.158 8.306,5.228 l 0.198,-3.655 3.535,0.943 c 0.71,-2.411 -0.165,-6.05 -2.404,-9.517 3.849,-1.485 6.696,-3.918 7.538,-6.283 l -3.415,-1.318 1.99,-3.07 c -1.233,-0.844 -3.053,-1.29 -5.164,-1.29 -1.438,0 -3.013,0.207 -4.63,0.636 C 23.729,5.684 22.297,2.224 20.308,0.692 Z"
+ id="path6" />
+ </g>
+ <g
+ id="g79964"
+ transform="translate(-1.043816,35.993714)">
+ <path
+ fill="#ffffff"
+ d="m 51.92633,-2.0247139 c -0.799,-0.597 -1.498,-1.484 -2.035,-2.592 l -0.228,-0.47 -0.46,0.249 c -0.975,0.528 -1.913,0.858 -2.744,0.969 l -0.202,-3.7560001 -3.636,0.968 c -0.157,-0.854 -0.125,-1.887 0.096,-3.022 l 0.103,-0.525 -0.532,-0.066 c -1.242,-0.154 -2.306,-0.525 -3.104,-1.08 l 1.521,-2.917 -2.988,-1.523 c 0.319,-0.944 0.948,-1.882 1.834,-2.735 l 0.377,-0.363 -0.379,-0.36 c -0.803,-0.764 -1.408,-1.554 -1.77,-2.311 l 3.51,-1.353 -2.045,-3.159 c 0.74,-0.402 1.693,-0.686 2.789,-0.832 l 0.519,-0.068 -0.091,-0.514 c -0.215,-1.211 -0.172,-2.338 0.124,-3.288 l 3.308,0.523 0.524,-3.308 c 0.988,0.013 2.08,0.326 3.164,0.907 l 0.462,0.248 0.226,-0.473 c 0.479,-1.003 1.044,-1.824 1.653,-2.404 l 2.372,2.92 2.372,-2.92 c 0.609,0.58 1.175,1.401 1.653,2.404 l 0.226,0.473 0.462,-0.247 c 1.085,-0.581 2.178,-0.894 3.164,-0.906 l 0.523,3.308 3.31,-0.525 c 0.296,0.951 0.34,2.078 0.124,3.288 l -0.092,0.515 0.518,0.069 c 1.095,0.145 2.048,0.43 2.788,0.832 l -2.046,3.156 3.511,1.355 c -0.361,0.757 -0.966,1.547 -1.77,2.311 l -0.379,0.36 0.377,0.363 c 0.888,0.854 1.516,1.793 1.835,2.736 l -2.984,1.52 1.521,2.984 c -0.812,0.574 -1.871,0.964 -3.094,1.134 l -0.518,0.072 0.096,0.514 c 0.201,1.089 0.226,2.083 0.073,2.909 l -3.634,-0.97 -0.204,3.7570001 c -0.83,-0.11 -1.768,-0.44 -2.742,-0.968 l -0.459,-0.249 -0.228,0.47 c -0.539,1.107 -1.237,1.994 -2.036,2.591 l -2.367,-2.369 z"
+ id="path2-9" />
+ <path
+ d="m 43.38633,-26.007714 c -0.53,-1.489 -0.698,-2.97 -0.432,-4.2 l 2.368,0.375 0.987,0.156 0.157,-0.988 0.375,-2.368 c 1.261,0.127 2.613,0.743 3.862,1.706 0.118,-0.337 0.244,-0.663 0.382,-0.967 -1.551,-1.135 -3.223,-1.763 -4.73,-1.763 -0.123,0 -0.245,0.004 -0.366,0.013 l -0.511,3.223 -3.224,-0.511 c -0.6,1.487 -0.565,3.415 0.085,5.393 0.335,-0.037 0.684,-0.061 1.047,-0.069 z m 14.501,-5.319 c 1.248,-0.962 2.6,-1.578 3.86,-1.705 l 0.376,2.368 0.156,0.988 0.987,-0.157 2.369,-0.376 c 0.266,1.23 0.098,2.71 -0.432,4.2 0.361,0.009 0.711,0.032 1.046,0.07 0.651,-1.978 0.685,-3.906 0.085,-5.394 l -3.225,0.512 -0.511,-3.224 c -0.12,-0.008 -0.242,-0.012 -0.365,-0.012 -1.507,0 -3.179,0.628 -4.73,1.762 0.14,0.306 0.266,0.631 0.384,0.968 z m -14.225,21.641 h 0.035 c 0.067,0 0.157,-0.604 0.26,-0.947 -0.098,0.004 -0.197,0.046 -0.294,0.046 -1.496,0 -2.826,-0.303 -3.83,-0.89 l 1.089,-2.128 0.454,-0.887 -0.891,-0.452 -2.136,-1.088 c 0.508,-1.151 1.515,-2.25 2.818,-3.143 -0.287,-0.219 -0.561,-0.441 -0.81,-0.669 -1.687,1.217 -2.846,2.755 -3.235,4.31 l 2.908,1.483 -1.482,2.843 c 1.221,1.023 3.049,1.522 5.114,1.522 z m 27.806,-5.846 c -0.39,-1.555 -1.548,-3.093 -3.234,-4.311 -0.25,0.228 -0.523,0.451 -0.81,0.669 1.304,0.893 2.31,1.992 2.817,3.145 l -2.136,1.088 -0.891,0.453 0.454,0.892 1.089,2.137 c -1.004,0.587 -2.332,0.904 -3.828,0.904 -0.099,0 -0.199,-0.01 -0.299,-0.013 0.103,0.344 0.192,0.683 0.26,1.011 l 0.039,0.002 c 2.066,0 3.892,-0.563 5.112,-1.587 l -1.482,-2.908 z m -12.653,9.182 c -0.447,1.5170001 -1.181,2.8120001 -2.119,3.6510001 l -1.695,-1.694 -0.707,-0.707 -0.707,0.707 -1.695,1.694 c -0.938,-0.839 -1.673,-2.136 -2.12,-3.6520001 -0.296,0.2060001 -0.593,0.3970001 -0.886,0.5630001 0.636,1.98 1.741,3.559 3.1,4.409 l 2.308,-2.307 2.308,2.308 c 1.358,-0.851 2.464,-2.428 3.101,-4.408 -0.295,-0.168 -0.591,-0.359 -0.888,-0.5640001 z"
+ fill="#ea596e"
+ id="path4-3" />
+ <path
+ fill="#ea596e"
+ d="m 56.41233,-31.002714 c 0.426,1.146 0.748,2.596 0.841,4.284 l 0.2,3.683 3.564,-0.946 c 1.32,-0.351 2.655,-0.536 3.86,-0.536 0.16,0 0.318,0.003 0.474,0.01 l -1.827,2.819 3.139,1.211 c -0.958,0.759 -2.237,1.514 -3.814,2.123 l -3.441,1.328 2.001,3.099 c 0.918,1.42 1.509,2.782 1.838,3.96 l -3.244,-0.865 -0.182,3.357 c -1.019,-0.677 -2.132,-1.66 -3.198,-2.973 l -2.329,-2.863 -2.328,2.862 c -1.066,1.312 -2.179,2.295 -3.198,2.972 l -0.18,-3.354 -3.248,0.864 c 0.329,-1.178 0.921,-2.54 1.839,-3.961 l 2.004,-3.099 -3.442,-1.328 c -1.577,-0.609 -2.856,-1.363 -3.814,-2.122 l 3.135,-1.208 -1.827,-2.823 c 0.155,-0.006 0.313,-0.01 0.473,-0.01 1.206,0 2.541,0.185 3.861,0.536 l 3.564,0.947 0.202,-3.683 c 0.092,-1.688 0.415,-3.138 0.84,-4.284 l 2.119,2.609 2.118,-2.609 m 0.19,-4.991 -2.308,2.841 -2.308,-2.841 c -1.989,1.532 -3.421,4.992 -3.646,9.112 -1.617,-0.43 -3.192,-0.637 -4.632,-0.637 -2.11,0 -3.929,0.445 -5.161,1.289 l 1.989,3.073 -3.415,1.316 c 0.842,2.366 3.69,4.797 7.54,6.283 -2.241,3.465 -3.116,7.106 -2.407,9.5160001 l 3.537,-0.9410001 0.196,3.6540001 c 2.512,-0.07 5.703,-2.027 8.307,-5.2280001 2.603,3.2010001 5.796,5.1580001 8.306,5.2280001 l 0.198,-3.6550001 3.535,0.9430001 c 0.71,-2.4110001 -0.165,-6.0500001 -2.404,-9.5170001 3.849,-1.485 6.696,-3.918 7.538,-6.283 l -3.415,-1.318 1.99,-3.07 c -1.233,-0.844 -3.053,-1.29 -5.164,-1.29 -1.438,0 -3.013,0.207 -4.63,0.636 -0.225,-4.119 -1.657,-7.579 -3.646,-9.111 z"
+ id="path6-6" />
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:42.6667px;line-height:1.25;font-family:sans-serif;fill:#ea596e;fill-opacity:1;stroke:none"
+ x="2.2188232"
+ y="31.430677"
+ id="text46212"><tspan
+ sodipodi:role="line"
+ id="tspan46210"
+ x="2.2188232"
+ y="31.430677"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:42.6667px;font-family:'TeX Gyre Termes';-inkscape-font-specification:'TeX Gyre Termes'">D</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:42.6667px;line-height:1.25;font-family:sans-serif;fill:#ea596e;fill-opacity:1;stroke:none"
+ x="41.347008"
+ y="67.114784"
+ id="text46212-1"><tspan
+ sodipodi:role="line"
+ id="tspan46210-5"
+ x="41.347008"
+ y="67.114784"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:42.6667px;font-family:'TeX Gyre Termes';-inkscape-font-specification:'TeX Gyre Termes'">F</tspan></text>
+</svg>
diff --git a/doc/talks/2024-01-12-seed/assets/garage2.drawio.png b/doc/talks/2024-01-12-seed/assets/garage2.drawio.png
new file mode 100644
index 00000000..8562fbcf
--- /dev/null
+++ b/doc/talks/2024-01-12-seed/assets/garage2.drawio.png
Binary files differ
diff --git a/doc/talks/2024-01-12-seed/assets/logo_chatons.png b/doc/talks/2024-01-12-seed/assets/logo_chatons.png
new file mode 100644
index 00000000..890cf17e
--- /dev/null
+++ b/doc/talks/2024-01-12-seed/assets/logo_chatons.png
Binary files differ
diff --git a/doc/talks/2024-01-12-seed/assets/map.png b/doc/talks/2024-01-12-seed/assets/map.png
new file mode 100644
index 00000000..1dff3ab6
--- /dev/null
+++ b/doc/talks/2024-01-12-seed/assets/map.png
Binary files differ
diff --git a/doc/talks/2024-01-12-seed/assets/minio.png b/doc/talks/2024-01-12-seed/assets/minio.png
new file mode 100644
index 00000000..a71e9ccc
--- /dev/null
+++ b/doc/talks/2024-01-12-seed/assets/minio.png
Binary files differ
diff --git a/doc/talks/2024-01-12-seed/assets/neptune.jpg b/doc/talks/2024-01-12-seed/assets/neptune.jpg
new file mode 100644
index 00000000..61fcbff6
--- /dev/null
+++ b/doc/talks/2024-01-12-seed/assets/neptune.jpg
Binary files differ
diff --git a/doc/talks/2024-01-12-seed/assets/rust_logo.png b/doc/talks/2024-01-12-seed/assets/rust_logo.png
new file mode 100644
index 00000000..0e4809ec
--- /dev/null
+++ b/doc/talks/2024-01-12-seed/assets/rust_logo.png
Binary files differ
diff --git a/doc/talks/2024-01-12-seed/talk.pdf b/doc/talks/2024-01-12-seed/talk.pdf
new file mode 100644
index 00000000..b48497a7
--- /dev/null
+++ b/doc/talks/2024-01-12-seed/talk.pdf
Binary files differ
diff --git a/doc/talks/2024-01-12-seed/talk.tex b/doc/talks/2024-01-12-seed/talk.tex
new file mode 100644
index 00000000..e7b4e2c2
--- /dev/null
+++ b/doc/talks/2024-01-12-seed/talk.tex
@@ -0,0 +1,370 @@
+\nonstopmode
+\documentclass[aspectratio=169]{beamer}
+\usepackage[utf8]{inputenc}
+% \usepackage[frenchb]{babel}
+\usepackage{amsmath}
+\usepackage{mathtools}
+\usepackage{breqn}
+\usepackage{multirow}
+\usetheme{boxes}
+\usepackage{graphicx}
+\usepackage{import}
+\usepackage{adjustbox}
+%\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{Garage}
+\subtitle{a lightweight and robust geo-distributed data storage system}
+\author{Alex Auvolat, Deuxfleurs}
+\date{SEED webinar, 2024-01-12}
+
+\begin{document}
+
+% \begin{frame}
+% \centering
+% \includegraphics[width=.3\linewidth]{../../sticker/Garage.png}
+% \vspace{1em}
+%
+% {\large\bf Alex Auvolat, Deuxfleurs Association}
+% \vspace{1em}
+%
+% \url{https://garagehq.deuxfleurs.fr/}
+%
+% %Matrix channel: \texttt{\#garage:deuxfleurs.fr}
+% \end{frame}
+
+\begin{frame}
+ %\frametitle{Who I am}
+ \begin{columns}[t]
+ \begin{column}{.2\textwidth}
+ \centering
+ \adjincludegraphics[width=.4\linewidth, valign=t]{assets/alex.jpg}
+ \end{column}
+ \begin{column}{.6\textwidth}
+ \textbf{Alex Auvolat}\\
+ Member of Deuxfleurs, lead developer of Garage
+ \end{column}
+ \begin{column}{.2\textwidth}
+ ~
+ \end{column}
+ \end{columns}
+ \vspace{.5em}
+
+ \begin{columns}[t]
+ \begin{column}{.2\textwidth}
+ \centering
+ \adjincludegraphics[width=.6\linewidth, valign=t]{../../logo/garage-notext.png}
+ \end{column}
+ \begin{column}{.6\textwidth}
+ \\\textbf{Garage}\\
+ A self-hosted alternative to S3 for object storage
+ \end{column}
+ \begin{column}{.2\textwidth}
+ ~
+ \end{column}
+ \end{columns}
+ \vspace{2em}
+
+ \begin{columns}[t]
+ \begin{column}{.2\textwidth}
+ \centering
+ \adjincludegraphics[width=.5\linewidth, valign=t]{assets/deuxfleurs.pdf}
+ \end{column}
+ \begin{column}{.6\textwidth}
+ \textbf{Deuxfleurs}\\
+ A non-profit self-hosting collective,\\
+ member of the CHATONS network
+ \end{column}
+ \begin{column}{.2\textwidth}
+ \centering
+ \adjincludegraphics[width=.7\linewidth, valign=t]{assets/logo_chatons.png}
+ \end{column}
+ \end{columns}
+
+\end{frame}
+
+\begin{frame}
+ \frametitle{Stable vs Resilient}
+
+ \hspace{1em}
+ \begin{minipage}{7cm}
+ \textbf{Building a "stable" system:}
+ \vspace{1em}
+
+ Enterprise-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$ costly, only worth at DC scale\\
+ $\to$ still risk of DC-level incident...
+ \end{minipage}
+ \hfill
+ \begin{minipage}{7cm}
+ \textbf{Building a \underline{resilient} system:}
+ \vspace{1em}
+
+ An alternative, cheaper way:
+ \vspace{1em}
+ \begin{itemize}
+ \item Commodity hardware \\(e.g. old desktop PCs)
+ \vspace{.5em}
+ \item Commodity Internet \\(e.g. FTTB, FTTH) and power grid
+ \vspace{.5em}
+ \item \textbf{Geographical redundancy} \\(multi-site replication)
+ \end{itemize}
+ \vspace{1.5em}
+ \end{minipage}
+ \hspace{1em}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Example: our infrastructure at Deuxfleurs}
+ \only<1>{
+ \begin{center}
+ \includegraphics[width=.8\linewidth]{assets/neptune.jpg}
+ \end{center}
+ }
+ \only<2>{
+ \begin{center}
+ \includegraphics[width=.8\linewidth]{assets/atuin.jpg}
+ \end{center}
+ }
+ \only<3>{
+ \begin{center}
+ \includegraphics[width=.8\linewidth]{assets/inframap_jdll2023.pdf}
+ \end{center}
+ }
+\end{frame}
+
+\begin{frame}
+ \frametitle{Object storage: simpler than file systems}
+
+ \begin{minipage}{6cm}
+ 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{minipage}
+ \hfill
+ \begin{minipage}{8cm}
+ \begin{center}
+ \vspace{2em}
+ \includegraphics[height=6em]{../2020-12-02_wide-team/img/Amazon-S3.jpg}
+ \hspace{2em}
+ \includegraphics[height=5em]{assets/minio.png}
+
+ \vspace{2em}
+ \includegraphics[height=6em]{../../logo/garage_hires_crop.png}
+ \end{center}
+ \vspace{1em}
+ \end{minipage}
+\end{frame}
+
+
+\begin{frame}
+ \frametitle{The data model of object storage}
+ Object storage is basically a key-value store:
+ \vspace{1em}
+
+ \begin{center}
+ \begin{tabular}{|l|p{8cm}|}
+ \hline
+ \textbf{Key: file path + name} & \textbf{Value: file data + metadata} \\
+ \hline
+ \hline
+ \texttt{index.html} &
+ \texttt{Content-Type: text/html; charset=utf-8} \newline
+ \texttt{Content-Length: 24929} \newline
+ \texttt{<binary blob>} \\
+ \hline
+ \texttt{img/logo.svg} &
+ \texttt{Content-Type: text/svg+xml} \newline
+ \texttt{Content-Length: 13429} \newline
+ \texttt{<binary blob>} \\
+ \hline
+ \texttt{download/index.html} &
+ \texttt{Content-Type: text/html; charset=utf-8} \newline
+ \texttt{Content-Length: 26563} \newline
+ \texttt{<binary blob>} \\
+ \hline
+ \end{tabular}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Implementation: consensus vs weak consistency}
+
+ \hspace{1em}
+ \begin{minipage}{7cm}
+ \textbf{Consensus-based systems:}
+ \vspace{1em}
+ \begin{itemize}
+ \item \textbf{Leader-based:} a leader is elected to coordinate
+ all reads and writes
+ \vspace{1em}
+ \item Allows for \textbf{sequential reasoning}:
+ program as if running on a single machine
+ \vspace{1em}
+ \item Serializability is one of the \\
+ \textbf{strongest consistency guarantees}
+ \vspace{1em}
+ \item \textbf{Costly}, the leader is a bottleneck;
+ leader elections on failure take time
+ \end{itemize}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{7cm} \visible<2->{
+ \textbf{Weakly consistent systems:}
+ \vspace{1em}
+ \begin{itemize}
+ \item \textbf{Nodes are equivalent}, any node
+ can originate a read or write operation
+ \vspace{1em}
+ \item \textbf{Operations must be independent},
+ conflicts are resolved after the fact
+ \vspace{1em}
+ \item Strongest achievable consistency:\\
+ \textbf{read-after-write consistency}\\(using quorums)
+ \vspace{1em}
+ \item \textbf{Fast}, no single bottleneck;\\
+ works transparently with offline nodes
+ \end{itemize}
+ } \end{minipage}
+ \hspace{1em}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Why avoid consensus?}
+ Consensus can be implemented reasonably well in practice, so why avoid it?
+ \vspace{2em}
+ \begin{itemize}
+ \item \textbf{Software complexity:} RAFT and PAXOS are complex beasts;\\
+ harder to prove, harder to reason about
+ \vspace{1.5em}
+ \item \textbf{Performance issues:}
+ \vspace{1em}
+ \begin{itemize}
+ \item Taking a decision may take an \textbf{arbitrary number of steps} (in adverse scenarios)
+ \vspace{1em}
+ \item The leader is a \textbf{bottleneck} for all requests;\\
+ even in leaderless approaches, \textbf{all nodes must process all operations in order}
+ \vspace{1em}
+ \item Particularly \textbf{sensitive to higher latency} between nodes
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Objective: the right level of consistency for Garage}
+
+ \underline{Constraints:} slow network (geographical distance), node unavailability/crashes\\
+ \underline{Objective:} maximize availability, maintain an \emph{appropriate level of consistency}\\
+ \vspace{1em}
+ \begin{enumerate}
+ \item<2-> \textbf{Weak consistency for most things}\\
+ \vspace{1em}
+ \underline{Example:} \texttt{PutObject}\\
+ \vspace{.5em}
+ If two clients write the same
+ object at the same time, one of the two is implicitly overwritten.
+ No need to coordinate, use a \emph{last-writer-wins register}.
+ \vspace{1em}
+ \item<3-> \textbf{Stronger consistency only when necessary}\\
+ \vspace{1em}
+ \underline{Example:} \texttt{CreateBucket}\\
+ \vspace{.5em}
+ A bucket is a reserved name in a shared namespace,
+ two clients should be prevented from both creating the same bucket
+ (\emph{mutual exclusion}).
+ \end{enumerate}
+\end{frame}
+
+\begin{frame}
+ \frametitle{The possibility of \emph{leaderless consensus}}
+ Currently, Garage \emph{only has weak consistency}. Is fast, but \texttt{CreateBucket} is broken!
+
+ \visible<2->{
+ \vspace{1em}
+ Leaderless consensus (Antoniadis et al., 2023) alleviates issues with RAFT and PAXOS:
+ \vspace{1em}
+ \begin{itemize}
+ \item \textbf{No leader.} All nodes participate equally at each time step,
+ and different nodes can be unavailable at different times without issues.
+ \\ \vspace{.5em} $\to$ better tolerance to the high latency (remove bottleneck issue)
+ \\ $\to$ tolerates crash transparently
+ \vspace{1em}
+ \item \textbf{Simpler formalization.} The algorithm is very simple to express and to analyze in mathematical terms.
+ \end{itemize}
+ }
+ \visible<3->{
+ \vspace{1em}
+ One of the possible subjects for this PhD:
+ \\$\to$ \emph{integration of leaderless consensus in Garage} + testing + perf eval, etc.
+ }
+\end{frame}
+
+\begin{frame}
+ \begin{center}
+ \includegraphics[width=.25\linewidth]{../../logo/garage_hires.png}\\
+ \vspace{-1em}
+ \url{https://garagehq.deuxfleurs.fr/}\\
+ \url{mailto:garagehq@deuxfleurs.fr}\\
+ \texttt{\#garage:deuxfleurs.fr} on Matrix
+
+ \vspace{1.5em}
+ \includegraphics[width=.06\linewidth]{assets/rust_logo.png}
+ \includegraphics[width=.13\linewidth]{assets/AGPLv3_Logo.png}
+ \end{center}
+\end{frame}
+
+\end{document}
+
+%% vim: set ts=4 sw=4 tw=0 noet spelllang=en :