Talk 2023-01-18 WIP
BIN
doc/logo/garage_hires_crop.png
Normal file
After Width: | Height: | Size: 41 KiB |
17
doc/talks/2023-01-18-tocatta/.gitignore
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
*
|
||||||
|
|
||||||
|
!*.txt
|
||||||
|
!*.md
|
||||||
|
|
||||||
|
!assets
|
||||||
|
|
||||||
|
!.gitignore
|
||||||
|
!*.svg
|
||||||
|
!*.png
|
||||||
|
!*.jpg
|
||||||
|
!*.tex
|
||||||
|
!Makefile
|
||||||
|
!.gitignore
|
||||||
|
!assets/*.drawio.pdf
|
||||||
|
|
||||||
|
!talk.pdf
|
12
doc/talks/2023-01-18-tocatta/Makefile
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
ASSETS=assets/consistent_hashing_1.pdf \
|
||||||
|
assets/consistent_hashing_2.pdf \
|
||||||
|
assets/consistent_hashing_3.pdf \
|
||||||
|
assets/consistent_hashing_4.pdf \
|
||||||
|
assets/garage_tables.pdf \
|
||||||
|
assets/deuxfleurs.pdf
|
||||||
|
|
||||||
|
talk.pdf: talk.tex $(ASSETS)
|
||||||
|
pdflatex talk.tex
|
||||||
|
|
||||||
|
assets/%.pdf: assets/%.svg
|
||||||
|
inkscape -D -z --file=$^ --export-pdf=$@
|
39
doc/talks/2023-01-18-tocatta/abstract.md
Normal file
@ -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.
|
||||||
|
|
||||||
|
|
||||||
|
|
BIN
doc/talks/2023-01-18-tocatta/assets/AGPLv3_Logo.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/aerogramme.png
Normal file
After Width: | Height: | Size: 115 KiB |
1241
doc/talks/2023-01-18-tocatta/assets/aerogramme.svg
Normal file
After Width: | Height: | Size: 184 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/aerogramme_components1.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/aerogramme_components2.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/aerogramme_datatype.png
Normal file
After Width: | Height: | Size: 8.9 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/aerogramme_keys.drawio.pdf
Normal file
BIN
doc/talks/2023-01-18-tocatta/assets/aerogramme_keys.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/alex.jpg
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/atuin.jpg
Normal file
After Width: | Height: | Size: 263 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/compatibility.png
Normal file
After Width: | Height: | Size: 82 KiB |
301
doc/talks/2023-01-18-tocatta/assets/consistent_hashing_1.svg
Normal file
After Width: | Height: | Size: 53 KiB |
334
doc/talks/2023-01-18-tocatta/assets/consistent_hashing_2.svg
Normal file
After Width: | Height: | Size: 54 KiB |
358
doc/talks/2023-01-18-tocatta/assets/consistent_hashing_3.svg
Normal file
After Width: | Height: | Size: 56 KiB |
377
doc/talks/2023-01-18-tocatta/assets/consistent_hashing_4.svg
Normal file
After Width: | Height: | Size: 57 KiB |
91
doc/talks/2023-01-18-tocatta/assets/deuxfleurs.svg
Normal file
@ -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>
|
After Width: | Height: | Size: 12 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/endpoint-latency-dc.png
Normal file
After Width: | Height: | Size: 129 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/garage.drawio.pdf
Normal file
BIN
doc/talks/2023-01-18-tocatta/assets/garage.drawio.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/garage2.drawio.png
Normal file
After Width: | Height: | Size: 88 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/garage2a.drawio.pdf
Normal file
BIN
doc/talks/2023-01-18-tocatta/assets/garage2b.drawio.pdf
Normal file
537
doc/talks/2023-01-18-tocatta/assets/garage_tables.svg
Normal file
@ -0,0 +1,537 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="850"
|
||||||
|
height="480"
|
||||||
|
viewBox="0 0 224.89584 127"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
inkscape:version="1.2 (dc2aedaf03, 2022-05-15)"
|
||||||
|
sodipodi:docname="garage_tables.svg"
|
||||||
|
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"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||||
|
<defs
|
||||||
|
id="defs2">
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="marker1262"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Mend"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||||
|
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||||
|
id="path1260" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow1Mend"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Mend"
|
||||||
|
inkscape:isstock="true"
|
||||||
|
inkscape:collect="always">
|
||||||
|
<path
|
||||||
|
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||||
|
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||||
|
id="path965" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow1Lend"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Lend"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||||
|
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||||
|
id="path959" />
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="0.98994949"
|
||||||
|
inkscape:cx="429.31483"
|
||||||
|
inkscape:cy="289.40871"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:window-width="1678"
|
||||||
|
inkscape:window-height="993"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1">
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="39.570904"
|
||||||
|
y="38.452755"
|
||||||
|
id="text2025"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan2023"
|
||||||
|
x="39.570904"
|
||||||
|
y="38.452755"
|
||||||
|
style="font-size:5.64444px;stroke-width:0.264583" /></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="101.95796"
|
||||||
|
y="92.835831"
|
||||||
|
id="text2139"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan2137"
|
||||||
|
x="101.95796"
|
||||||
|
y="92.835831"
|
||||||
|
style="stroke-width:0.264583"> </tspan></text>
|
||||||
|
<g
|
||||||
|
id="g2316"
|
||||||
|
transform="translate(-11.455511,1.5722486)">
|
||||||
|
<g
|
||||||
|
id="g2277">
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect833"
|
||||||
|
width="47.419891"
|
||||||
|
height="95.353409"
|
||||||
|
x="18.534418"
|
||||||
|
y="24.42766" />
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.799999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect833-3"
|
||||||
|
width="47.419891"
|
||||||
|
height="86.973076"
|
||||||
|
x="18.534418"
|
||||||
|
y="32.807987" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="32.250839"
|
||||||
|
y="29.894743"
|
||||||
|
id="text852"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850"
|
||||||
|
x="32.250839"
|
||||||
|
y="29.894743"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">Object</tspan></text>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g2066"
|
||||||
|
transform="translate(-2.1807817,-3.0621439)">
|
||||||
|
<g
|
||||||
|
id="g1969"
|
||||||
|
transform="matrix(0.12763631,0,0,0.12763631,0.7215051,24.717273)"
|
||||||
|
style="fill:#ff6600;fill-opacity:1;stroke:none;stroke-opacity:1">
|
||||||
|
<path
|
||||||
|
style="fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.264583;stroke-opacity:1"
|
||||||
|
d="m 203.71837,154.80038 c -1.11451,3.75057 -2.45288,5.84095 -5.11132,7.98327 -2.2735,1.83211 -4.66721,2.65982 -8.09339,2.79857 -2.59227,0.10498 -2.92868,0.0577 -5.02863,-0.70611 -3.99215,-1.45212 -7.1627,-4.65496 -8.48408,-8.57046 -1.28374,-3.80398 -0.61478,-8.68216 1.64793,-12.01698 0.87317,-1.28689 3.15089,-3.48326 4.18771,-4.03815 l 0.53332,-28.51234 5.78454,-5.09197 6.95158,6.16704 -3.21112,3.49026 3.17616,3.45499 -3.17616,3.40822 2.98973,3.28645 -3.24843,3.3829 4.49203,4.58395 0.0516,5.69106 c 1.06874,0.64848 3.81974,3.24046 4.69548,4.56257 0.452,0.68241 1.06834,2.0197 1.36962,2.97176 0.62932,1.98864 0.88051,5.785 0.47342,7.15497 z m -10.0406,2.32604 c -0.88184,-3.17515 -4.92402,-3.78864 -6.75297,-1.02492 -0.58328,0.8814 -0.6898,1.28852 -0.58362,2.23056 0.26492,2.35041 2.45434,3.95262 4.60856,3.37255 1.19644,-0.32217 2.39435,-1.44872 2.72875,-2.56621 0.30682,-1.02529 0.30686,-0.9045 -7.9e-4,-2.01198 z"
|
||||||
|
id="path1971"
|
||||||
|
sodipodi:nodetypes="ssscsscccccccccccssscsssscc" />
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="28.809687"
|
||||||
|
y="44.070885"
|
||||||
|
id="text852-9"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-4"
|
||||||
|
x="28.809687"
|
||||||
|
y="44.070885"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">bucket </tspan></text>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g2066-7"
|
||||||
|
transform="translate(-2.1807817,6.2627616)">
|
||||||
|
<g
|
||||||
|
id="g1969-8"
|
||||||
|
transform="matrix(0.12763631,0,0,0.12763631,0.7215051,24.717273)"
|
||||||
|
style="fill:#ff6600;fill-opacity:1;stroke:none;stroke-opacity:1">
|
||||||
|
<path
|
||||||
|
style="fill:#4040ff;fill-opacity:1;stroke:none;stroke-width:0.264583;stroke-opacity:1"
|
||||||
|
d="m 203.71837,154.80038 c -1.11451,3.75057 -2.45288,5.84095 -5.11132,7.98327 -2.2735,1.83211 -4.66721,2.65982 -8.09339,2.79857 -2.59227,0.10498 -2.92868,0.0577 -5.02863,-0.70611 -3.99215,-1.45212 -7.1627,-4.65496 -8.48408,-8.57046 -1.28374,-3.80398 -0.61478,-8.68216 1.64793,-12.01698 0.87317,-1.28689 3.15089,-3.48326 4.18771,-4.03815 l 0.53332,-28.51234 5.78454,-5.09197 6.95158,6.16704 -3.21112,3.49026 3.17616,3.45499 -3.17616,3.40822 2.98973,3.28645 -3.24843,3.3829 4.49203,4.58395 0.0516,5.69106 c 1.06874,0.64848 3.81974,3.24046 4.69548,4.56257 0.452,0.68241 1.06834,2.0197 1.36962,2.97176 0.62932,1.98864 0.88051,5.785 0.47342,7.15497 z m -10.0406,2.32604 c -0.88184,-3.17515 -4.92402,-3.78864 -6.75297,-1.02492 -0.58328,0.8814 -0.6898,1.28852 -0.58362,2.23056 0.26492,2.35041 2.45434,3.95262 4.60856,3.37255 1.19644,-0.32217 2.39435,-1.44872 2.72875,-2.56621 0.30682,-1.02529 0.30686,-0.9045 -7.9e-4,-2.01198 z"
|
||||||
|
id="path1971-4"
|
||||||
|
sodipodi:nodetypes="ssscsscccccccccccssscsssscc" />
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="28.809687"
|
||||||
|
y="44.070885"
|
||||||
|
id="text852-9-5"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-4-0"
|
||||||
|
x="28.809687"
|
||||||
|
y="44.070885"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">file path </tspan></text>
|
||||||
|
<path
|
||||||
|
style="fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.0337704;stroke-opacity:1"
|
||||||
|
d="m 174.20027,104.45585 c -0.14225,0.47871 -0.31308,0.74552 -0.65239,1.01896 -0.29018,0.23384 -0.5957,0.33949 -1.03301,0.3572 -0.33087,0.0134 -0.37381,0.007 -0.64184,-0.0901 -0.50954,-0.18534 -0.91422,-0.59414 -1.08287,-1.0939 -0.16385,-0.48552 -0.0785,-1.10816 0.21033,-1.5338 0.11145,-0.16426 0.40217,-0.44459 0.53451,-0.51542 l 0.0681,-3.639207 0.73832,-0.64992 0.88727,0.787138 -0.40986,0.445484 0.4054,0.440982 -0.4054,0.435013 0.3816,0.41947 -0.41461,0.43178 0.57334,0.58508 0.007,0.72639 c 0.13641,0.0828 0.48753,0.4136 0.59931,0.58235 0.0577,0.0871 0.13636,0.25778 0.17481,0.3793 0.0803,0.25382 0.11239,0.73838 0.0604,0.91323 z m -1.28154,0.29689 c -0.11256,-0.40526 -0.62849,-0.48357 -0.86193,-0.13082 -0.0745,0.1125 -0.088,0.16447 -0.0745,0.2847 0.0338,0.3 0.31326,0.5045 0.58822,0.43046 0.15271,-0.0411 0.30561,-0.1849 0.34829,-0.32754 0.0392,-0.13086 0.0392,-0.11544 -1e-4,-0.2568 z"
|
||||||
|
id="path1971-3"
|
||||||
|
sodipodi:nodetypes="ssscsscccccccccccssscsssscc" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="177.8474"
|
||||||
|
y="104.05132"
|
||||||
|
id="text852-9-6"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-4-7"
|
||||||
|
x="177.8474"
|
||||||
|
y="104.05132"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">= partition key </tspan></text>
|
||||||
|
<path
|
||||||
|
style="fill:#4040ff;fill-opacity:1;stroke:none;stroke-width:0.0337704;stroke-opacity:1"
|
||||||
|
d="m 174.20027,113.78076 c -0.14225,0.47871 -0.31308,0.74552 -0.65239,1.01895 -0.29018,0.23385 -0.5957,0.33949 -1.03301,0.3572 -0.33087,0.0134 -0.37381,0.007 -0.64184,-0.0901 -0.50954,-0.18534 -0.91422,-0.59414 -1.08287,-1.0939 -0.16385,-0.48553 -0.0785,-1.10816 0.21033,-1.53381 0.11145,-0.16425 0.40217,-0.44459 0.53451,-0.51541 l 0.0681,-3.63921 0.73832,-0.64992 0.88727,0.78714 -0.40986,0.44548 0.4054,0.44098 -0.4054,0.43502 0.3816,0.41947 -0.41461,0.43178 0.57334,0.58508 0.007,0.72638 c 0.13641,0.0828 0.48753,0.4136 0.59931,0.58235 0.0577,0.0871 0.13636,0.25779 0.17481,0.37931 0.0803,0.25382 0.11239,0.73837 0.0604,0.91323 z m -1.28154,0.29689 c -0.11256,-0.40527 -0.62849,-0.48357 -0.86193,-0.13082 -0.0745,0.1125 -0.088,0.16446 -0.0745,0.2847 0.0338,0.3 0.31326,0.5045 0.58822,0.43046 0.15271,-0.0411 0.30561,-0.18491 0.34829,-0.32754 0.0392,-0.13087 0.0392,-0.11545 -1e-4,-0.2568 z"
|
||||||
|
id="path1971-4-5"
|
||||||
|
sodipodi:nodetypes="ssscsscccccccccccssscsssscc" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="177.8474"
|
||||||
|
y="113.37622"
|
||||||
|
id="text852-9-5-3"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-4-0-5"
|
||||||
|
x="177.8474"
|
||||||
|
y="113.37622"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">= sort key </tspan></text>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g2161"
|
||||||
|
transform="translate(-62.264403,-59.333115)">
|
||||||
|
<g
|
||||||
|
id="g2271"
|
||||||
|
transform="translate(0,67.042823)">
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.799999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect833-6"
|
||||||
|
width="39.008453"
|
||||||
|
height="16.775949"
|
||||||
|
x="84.896881"
|
||||||
|
y="90.266838" />
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.799999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect833-3-1"
|
||||||
|
width="39.008453"
|
||||||
|
height="8.673645"
|
||||||
|
x="84.896881"
|
||||||
|
y="98.369141" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="89.826942"
|
||||||
|
y="96.212921"
|
||||||
|
id="text852-0"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-6"
|
||||||
|
x="89.826942"
|
||||||
|
y="96.212921"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">Version 1</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="89.826942"
|
||||||
|
y="104.71013"
|
||||||
|
id="text852-0-3"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-6-2"
|
||||||
|
x="89.826942"
|
||||||
|
y="104.71013"
|
||||||
|
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';fill:#4d4d4d;stroke-width:0.264583">deleted</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g2263"
|
||||||
|
transform="translate(0,-22.791204)">
|
||||||
|
<g
|
||||||
|
id="g2161-1"
|
||||||
|
transform="translate(-62.264403,-10.910843)">
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.799999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect833-6-5"
|
||||||
|
width="39.008453"
|
||||||
|
height="36.749603"
|
||||||
|
x="84.896881"
|
||||||
|
y="90.266838" />
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.799999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect833-3-1-5"
|
||||||
|
width="39.008453"
|
||||||
|
height="28.647301"
|
||||||
|
x="84.896881"
|
||||||
|
y="98.369141" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="89.826942"
|
||||||
|
y="96.212921"
|
||||||
|
id="text852-0-4"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-6-7"
|
||||||
|
x="89.826942"
|
||||||
|
y="96.212921"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">Version 2</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="89.826942"
|
||||||
|
y="104.71013"
|
||||||
|
id="text852-0-3-6"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-6-2-5"
|
||||||
|
x="89.826942"
|
||||||
|
y="104.71013"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';fill:#000000;stroke-width:0.264583">id</tspan></text>
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="27.56254"
|
||||||
|
y="100.34132"
|
||||||
|
id="text852-0-3-6-6"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-6-2-5-9"
|
||||||
|
x="27.56254"
|
||||||
|
y="100.34132"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';fill:#000000;stroke-width:0.264583">size</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="27.56254"
|
||||||
|
y="106.90263"
|
||||||
|
id="text852-0-3-6-6-3"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-6-2-5-9-7"
|
||||||
|
x="27.56254"
|
||||||
|
y="106.90263"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';fill:#000000;stroke-width:0.264583">MIME type</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="27.56254"
|
||||||
|
y="111.92816"
|
||||||
|
id="text852-0-3-6-6-3-4"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-6-2-5-9-7-5"
|
||||||
|
x="27.56254"
|
||||||
|
y="111.92816"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';fill:#000000;stroke-width:0.264583">...</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g898"
|
||||||
|
transform="translate(-6.2484318,29.95006)">
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.799999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect833-7"
|
||||||
|
width="47.419891"
|
||||||
|
height="44.007515"
|
||||||
|
x="95.443573"
|
||||||
|
y="24.42766" />
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.799999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect833-3-4"
|
||||||
|
width="47.419891"
|
||||||
|
height="35.627186"
|
||||||
|
x="95.443573"
|
||||||
|
y="32.807987" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="107.46638"
|
||||||
|
y="29.894743"
|
||||||
|
id="text852-4"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-3"
|
||||||
|
x="107.46638"
|
||||||
|
y="29.894743"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">Version</tspan></text>
|
||||||
|
<path
|
||||||
|
style="fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.0337704;stroke-opacity:1"
|
||||||
|
d="m 102.90563,41.413279 c -0.14226,0.478709 -0.31308,0.745518 -0.65239,1.018956 -0.29019,0.233843 -0.59571,0.339489 -1.03301,0.357199 -0.33087,0.0134 -0.37381,0.0074 -0.64184,-0.09013 -0.50954,-0.185343 -0.914221,-0.594142 -1.082877,-1.093901 -0.163852,-0.485526 -0.07847,-1.108159 0.210335,-1.533803 0.111448,-0.164254 0.402172,-0.444591 0.534502,-0.515415 l 0.0681,-3.63921 0.73832,-0.64992 0.88727,0.787138 -0.40985,0.445484 0.40539,0.440982 -0.40539,0.435013 0.3816,0.41947 -0.41462,0.431781 0.57335,0.585078 0.007,0.726386 c 0.13641,0.08277 0.48753,0.413601 0.59931,0.58235 0.0577,0.0871 0.13636,0.257787 0.17481,0.379304 0.0803,0.253823 0.11239,0.738377 0.0604,0.913234 z m -1.28155,0.296888 c -0.11255,-0.405265 -0.62848,-0.483569 -0.86192,-0.130817 -0.0744,0.112498 -0.088,0.164461 -0.0745,0.2847 0.0338,0.299998 0.31326,0.504498 0.58822,0.43046 0.15271,-0.04112 0.3056,-0.184909 0.34828,-0.327542 0.0392,-0.130864 0.0392,-0.115447 -1e-4,-0.256801 z"
|
||||||
|
id="path1971-0"
|
||||||
|
sodipodi:nodetypes="ssscsscccccccccccssscsssscc" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="104.99195"
|
||||||
|
y="41.008743"
|
||||||
|
id="text852-9-7"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-4-8"
|
||||||
|
x="104.99195"
|
||||||
|
y="41.008743"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">id </tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="104.99195"
|
||||||
|
y="49.168018"
|
||||||
|
id="text852-9-7-6"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-4-8-8"
|
||||||
|
x="104.99195"
|
||||||
|
y="49.168018"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">h(block 1)</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="104.99195"
|
||||||
|
y="56.583336"
|
||||||
|
id="text852-9-7-6-8"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-4-8-8-4"
|
||||||
|
x="104.99195"
|
||||||
|
y="56.583336"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">h(block 2)</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="104.99195"
|
||||||
|
y="64.265732"
|
||||||
|
id="text852-9-7-6-3"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-4-8-8-1"
|
||||||
|
x="104.99195"
|
||||||
|
y="64.265732"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">...</tspan></text>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g898-3"
|
||||||
|
transform="translate(75.777779,38.888663)">
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.799999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect833-7-6"
|
||||||
|
width="47.419891"
|
||||||
|
height="29.989157"
|
||||||
|
x="95.443573"
|
||||||
|
y="24.42766" />
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.799999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect833-3-4-7"
|
||||||
|
width="47.419891"
|
||||||
|
height="21.608831"
|
||||||
|
x="95.443573"
|
||||||
|
y="32.807987" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="102.11134"
|
||||||
|
y="29.894743"
|
||||||
|
id="text852-4-5"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-3-3"
|
||||||
|
x="102.11134"
|
||||||
|
y="29.894743"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">Data block</tspan></text>
|
||||||
|
<path
|
||||||
|
style="fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.0337704;stroke-opacity:1"
|
||||||
|
d="m 102.90563,41.413279 c -0.14226,0.478709 -0.31308,0.745518 -0.65239,1.018956 -0.29019,0.233843 -0.59571,0.339489 -1.03301,0.357199 -0.33087,0.0134 -0.37381,0.0074 -0.64184,-0.09013 -0.50954,-0.185343 -0.914221,-0.594142 -1.082877,-1.093901 -0.163852,-0.485526 -0.07847,-1.108159 0.210335,-1.533803 0.111448,-0.164254 0.402172,-0.444591 0.534502,-0.515415 l 0.0681,-3.63921 0.73832,-0.64992 0.88727,0.787138 -0.40985,0.445484 0.40539,0.440982 -0.40539,0.435013 0.3816,0.41947 -0.41462,0.431781 0.57335,0.585078 0.007,0.726386 c 0.13641,0.08277 0.48753,0.413601 0.59931,0.58235 0.0577,0.0871 0.13636,0.257787 0.17481,0.379304 0.0803,0.253823 0.11239,0.738377 0.0604,0.913234 z m -1.28155,0.296888 c -0.11255,-0.405265 -0.62848,-0.483569 -0.86192,-0.130817 -0.0744,0.112498 -0.088,0.164461 -0.0745,0.2847 0.0338,0.299998 0.31326,0.504498 0.58822,0.43046 0.15271,-0.04112 0.3056,-0.184909 0.34828,-0.327542 0.0392,-0.130864 0.0392,-0.115447 -1e-4,-0.256801 z"
|
||||||
|
id="path1971-0-5"
|
||||||
|
sodipodi:nodetypes="ssscsscccccccccccssscsssscc" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="104.99195"
|
||||||
|
y="41.008743"
|
||||||
|
id="text852-9-7-62"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-4-8-9"
|
||||||
|
x="104.99195"
|
||||||
|
y="41.008743"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">hash </tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="104.99195"
|
||||||
|
y="49.168018"
|
||||||
|
id="text852-9-7-6-1"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-4-8-8-2"
|
||||||
|
x="104.99195"
|
||||||
|
y="49.168018"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">data</tspan></text>
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
|
||||||
|
d="M 42.105292,69.455903 89.563703,69.317144"
|
||||||
|
id="path954"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1262)"
|
||||||
|
d="m 134.32612,77.363197 38.12618,0.260865"
|
||||||
|
id="path1258"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="8.6727352"
|
||||||
|
y="16.687063"
|
||||||
|
id="text852-3"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-67"
|
||||||
|
x="8.6727352"
|
||||||
|
y="16.687063"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">Objects table </tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="89.190445"
|
||||||
|
y="16.687063"
|
||||||
|
id="text852-3-5"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-67-3"
|
||||||
|
x="89.190445"
|
||||||
|
y="16.687063"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">Versions table </tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="174.55702"
|
||||||
|
y="16.687063"
|
||||||
|
id="text852-3-56"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan850-67-2"
|
||||||
|
x="174.55702"
|
||||||
|
y="16.687063"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">Blocks table</tspan></text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 30 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/inframap.jpg
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/location-aware.png
Normal file
After Width: | Height: | Size: 97 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/logo_chatons.png
Normal file
After Width: | Height: | Size: 199 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/map.png
Normal file
After Width: | Height: | Size: 145 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/minio.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/neptune.jpg
Normal file
After Width: | Height: | Size: 174 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/quentin.jpg
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/rust_logo.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/slide1.png
Normal file
After Width: | Height: | Size: 87 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/slide2.png
Normal file
After Width: | Height: | Size: 81 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/slide3.png
Normal file
After Width: | Height: | Size: 124 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/slideB1.png
Normal file
After Width: | Height: | Size: 84 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/slideB2.png
Normal file
After Width: | Height: | Size: 81 KiB |
BIN
doc/talks/2023-01-18-tocatta/assets/slideB3.png
Normal file
After Width: | Height: | Size: 81 KiB |
4326
doc/talks/2023-01-18-tocatta/assets/slides.svg
Normal file
After Width: | Height: | Size: 315 KiB |
444
doc/talks/2023-01-18-tocatta/assets/slidesB.svg
Normal file
After Width: | Height: | Size: 286 KiB |
BIN
doc/talks/2023-01-18-tocatta/talk.pdf
Normal file
623
doc/talks/2023-01-18-tocatta/talk.tex
Normal file
@ -0,0 +1,623 @@
|
|||||||
|
%\nonstopmode
|
||||||
|
\documentclass[aspectratio=169]{beamer}
|
||||||
|
\usepackage[utf8]{inputenc}
|
||||||
|
% \usepackage[frenchb]{babel}
|
||||||
|
\usepackage{amsmath}
|
||||||
|
\usepackage{mathtools}
|
||||||
|
\usepackage{breqn}
|
||||||
|
\usepackage{multirow}
|
||||||
|
\usetheme{boxes}
|
||||||
|
\usepackage{graphicx}
|
||||||
|
\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{Deuxfleurs Association}
|
||||||
|
\date{Inria, 2023-01-18}
|
||||||
|
|
||||||
|
\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{Who we are}
|
||||||
|
\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}\\
|
||||||
|
PhD; co-founder of Deuxfleurs
|
||||||
|
\end{column}
|
||||||
|
\begin{column}{.2\textwidth}
|
||||||
|
~
|
||||||
|
\end{column}
|
||||||
|
\end{columns}
|
||||||
|
\vspace{1em}
|
||||||
|
|
||||||
|
\begin{columns}[t]
|
||||||
|
\begin{column}{.2\textwidth}
|
||||||
|
~
|
||||||
|
\end{column}
|
||||||
|
\begin{column}{.6\textwidth}
|
||||||
|
\textbf{Quentin Dufour}\\
|
||||||
|
PhD; co-founder of Deuxfleurs
|
||||||
|
\end{column}
|
||||||
|
\begin{column}{.2\textwidth}
|
||||||
|
\centering
|
||||||
|
\adjincludegraphics[width=.5\linewidth, valign=t]{assets/quentin.jpg}
|
||||||
|
\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{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 make a \underline{stable} system}
|
||||||
|
|
||||||
|
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$ it's costly and only worth it at DC scale
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{How to make a \underline{resilient} system}
|
||||||
|
|
||||||
|
\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[height=6em]{../2020-12-02_wide-team/img/Amazon-S3.jpg}
|
||||||
|
\hspace{3em}
|
||||||
|
\includegraphics[height=5em]{assets/minio.png}
|
||||||
|
\hspace{3em}
|
||||||
|
\includegraphics[height=6em]{../../logo/garage_hires_crop.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
|
||||||
|
|
||||||
|
\vspace{1em}
|
||||||
|
|
||||||
|
\textbf{Garage is a self-hosted drop-in replacement for the Amazon S3 object store}
|
||||||
|
\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{Two big problems}
|
||||||
|
\begin{enumerate}
|
||||||
|
\item \textbf{How to place data on different nodes?}\\
|
||||||
|
\vspace{1em}
|
||||||
|
\underline{Constraints:} heterogeneous hardware\\
|
||||||
|
\underline{Objective:} $n$ copies of everything, maximize usable capacity, maximize resilience\\
|
||||||
|
\vspace{1em}
|
||||||
|
$\to$ the Dynamo model + optimization algorithms
|
||||||
|
\vspace{2em}
|
||||||
|
\item<2-> \textbf{How to guarantee consistency?}\\
|
||||||
|
\vspace{1em}
|
||||||
|
\underline{Constraints:} slow network (geographical distance), node unavailability/crashes\\
|
||||||
|
\underline{Objective:} maximize availability, read-after-write guarantee\\
|
||||||
|
\vspace{1em}
|
||||||
|
$\to$ CRDTs, monotonicity, read and write quorums
|
||||||
|
\end{enumerate}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\section{Problem 1: placing data}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Key-value stores, upgraded: the Dynamo model}
|
||||||
|
\textbf{Two keys:}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Partition key: used to divide data into partitions (shards)
|
||||||
|
\item Sort key: used to identify items inside a partition
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\vspace{1em}
|
||||||
|
|
||||||
|
\begin{center}
|
||||||
|
\begin{tabular}{|l|l|p{3cm}|}
|
||||||
|
\hline
|
||||||
|
\textbf{Partition key: bucket} & \textbf{Sort key: filename} & \textbf{Value} \\
|
||||||
|
\hline
|
||||||
|
\hline
|
||||||
|
\texttt{website} & \texttt{index.html} & (file data) \\
|
||||||
|
\hline
|
||||||
|
\texttt{website} & \texttt{img/logo.svg} & (file data) \\
|
||||||
|
\hline
|
||||||
|
\texttt{website} & \texttt{download/index.html} & (file data) \\
|
||||||
|
\hline
|
||||||
|
\hline
|
||||||
|
\texttt{backup} & \texttt{borg/index.2822} & (file data) \\
|
||||||
|
\hline
|
||||||
|
\texttt{backup} & \texttt{borg/data/2/2329} & (file data) \\
|
||||||
|
\hline
|
||||||
|
\texttt{backup} & \texttt{borg/data/2/2680} & (file data) \\
|
||||||
|
\hline
|
||||||
|
\hline
|
||||||
|
\texttt{private} & \texttt{qq3a2nbe1qjq0ebbvo6ocsp6co} & (file data) \\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{center}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Key-value stores, upgraded: the Dynamo model}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Data with different partition keys is stored independantly,\\
|
||||||
|
on a different set of nodes\\
|
||||||
|
\vspace{.5em}
|
||||||
|
$\to$ no easy way to list all partition keys\\
|
||||||
|
$\to$ no cross-shard transactions\\
|
||||||
|
\vspace{2em}
|
||||||
|
\item Placing data: hash the partition key, select nodes accordingly\\
|
||||||
|
\vspace{.5em}
|
||||||
|
$\to$ distributed hash table (DHT)
|
||||||
|
\vspace{2em}
|
||||||
|
\item For a given value of the partition key, items can be listed using their sort keys
|
||||||
|
\end{itemize}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{How to spread files over different cluster nodes?}
|
||||||
|
\textbf{Consistent hashing (Dynamo):}
|
||||||
|
\vspace{1em}
|
||||||
|
|
||||||
|
\begin{center}
|
||||||
|
\only<1>{\includegraphics[width=.40\columnwidth]{assets/consistent_hashing_1.pdf}}%
|
||||||
|
\only<2>{\includegraphics[width=.40\columnwidth]{assets/consistent_hashing_2.pdf}}%
|
||||||
|
\only<3>{\includegraphics[width=.40\columnwidth]{assets/consistent_hashing_3.pdf}}%
|
||||||
|
\only<4>{\includegraphics[width=.40\columnwidth]{assets/consistent_hashing_4.pdf}}%
|
||||||
|
\end{center}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Constraint: location-awareness}
|
||||||
|
\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{Constraint: location-awareness}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[width=.8\linewidth]{assets/map.png}
|
||||||
|
\end{center}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Issues with consistent hashing}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Consistent hashing doesn't dispatch data based on geographical location of nodes
|
||||||
|
\vspace{1em}
|
||||||
|
\item<2-> Geographically aware adaptation, try 1:\\
|
||||||
|
data quantities not well balanced between nodes
|
||||||
|
\vspace{1em}
|
||||||
|
\item<3-> Geographically aware adaptation, try 2:\\
|
||||||
|
too many reshuffles when adding/removing nodes
|
||||||
|
\end{itemize}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{How to spread files over different cluster nodes?}
|
||||||
|
\textbf{Garage's method: build an index table}
|
||||||
|
\vspace{1em}
|
||||||
|
|
||||||
|
Realization: we can actually precompute an optimal solution
|
||||||
|
\vspace{1em}
|
||||||
|
|
||||||
|
\visible<2->{
|
||||||
|
\begin{center}
|
||||||
|
\begin{tabular}{|l|l|l|l|}
|
||||||
|
\hline
|
||||||
|
\textbf{Partition} & \textbf{Node 1} & \textbf{Node 2} & \textbf{Node 3} \\
|
||||||
|
\hline
|
||||||
|
\hline
|
||||||
|
Partition 0 & Io (jupiter) & Drosera (atuin) & Courgette (neptune) \\
|
||||||
|
\hline
|
||||||
|
Partition 1 & Datura (atuin) & Courgette (neptune) & Io (jupiter) \\
|
||||||
|
\hline
|
||||||
|
Partition 2 & Io(jupiter) & Celeri (neptune) & Drosera (atuin) \\
|
||||||
|
\hline
|
||||||
|
\hspace{1em}$\vdots$ & \hspace{1em}$\vdots$ & \hspace{1em}$\vdots$ & \hspace{1em}$\vdots$ \\
|
||||||
|
\hline
|
||||||
|
Partition 255 & Concombre (neptune) & Io (jupiter) & Drosera (atuin) \\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{center}
|
||||||
|
}
|
||||||
|
\vspace{1em}
|
||||||
|
\visible<3->{
|
||||||
|
The index table is built centrally using an optimal algorithm,\\
|
||||||
|
then propagated to all nodes
|
||||||
|
}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{The relationship between \emph{partition} and \emph{partition key}}
|
||||||
|
\begin{center}
|
||||||
|
\begin{tabular}{|l|l|l|l|}
|
||||||
|
\hline
|
||||||
|
\textbf{Partition key} & \textbf{Partition} & \textbf{Sort key} & \textbf{Value} \\
|
||||||
|
\hline
|
||||||
|
\hline
|
||||||
|
\texttt{website} & Partition 12 & \texttt{index.html} & (file data) \\
|
||||||
|
\hline
|
||||||
|
\texttt{website} & Partition 12 & \texttt{img/logo.svg} & (file data) \\
|
||||||
|
\hline
|
||||||
|
\texttt{website} & Partition 12 &\texttt{download/index.html} & (file data) \\
|
||||||
|
\hline
|
||||||
|
\hline
|
||||||
|
\texttt{backup} & Partition 42 & \texttt{borg/index.2822} & (file data) \\
|
||||||
|
\hline
|
||||||
|
\texttt{backup} & Partition 42 & \texttt{borg/data/2/2329} & (file data) \\
|
||||||
|
\hline
|
||||||
|
\texttt{backup} & Partition 42 & \texttt{borg/data/2/2680} & (file data) \\
|
||||||
|
\hline
|
||||||
|
\hline
|
||||||
|
\texttt{private} & Partition 42 & \texttt{qq3a2nbe1qjq0ebbvo6ocsp6co} & (file data) \\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{center}
|
||||||
|
\vspace{1em}
|
||||||
|
\textbf{To read or write an item:} hash partition key
|
||||||
|
\\ \hspace{5cm} $\to$ determine partition number (first 8 bits)
|
||||||
|
\\ \hspace{5cm} $\to$ find associated nodes
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Garage's internal data structures}
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=.75\columnwidth]{assets/garage_tables.pdf}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Storing and retrieving files}
|
||||||
|
\begin{center}
|
||||||
|
\only<1>{\includegraphics[width=.45\linewidth]{assets/garage2a.drawio.pdf}}%
|
||||||
|
\only<2>{\includegraphics[width=.45\linewidth]{assets/garage2b.drawio.pdf}}%
|
||||||
|
\end{center}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\section{Problem 2: ensuring consistency}
|
||||||
|
|
||||||
|
%\begin{frame}
|
||||||
|
% \frametitle{Garage's architecture}
|
||||||
|
% \begin{center}
|
||||||
|
% \includegraphics[width=.35\linewidth]{assets/garage.drawio.pdf}
|
||||||
|
% \end{center}
|
||||||
|
%\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Garage is \emph{coordination-free}:}
|
||||||
|
\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{Consistency model}
|
||||||
|
\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{Impact on performances}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[width=.8\linewidth]{assets/endpoint-latency-dc.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{Further plans for Garage}
|
||||||
|
\begin{center}
|
||||||
|
\only<1>{\includegraphics[width=.8\linewidth]{assets/slideB1.png}}%
|
||||||
|
\only<2>{\includegraphics[width=.8\linewidth]{assets/slideB2.png}}%
|
||||||
|
\only<3>{\includegraphics[width=.8\linewidth]{assets/slideB3.png}}%
|
||||||
|
\end{center}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{K2V Design}
|
||||||
|
\begin{itemize}
|
||||||
|
\item A new, custom, minimal API
|
||||||
|
\vspace{1em}
|
||||||
|
\item<2-> Exposes the partitoning mechanism of Garage\\
|
||||||
|
K2V = partition key / sort key / value (like Dynamo)
|
||||||
|
\vspace{1em}
|
||||||
|
\item<3-> Coordination-free, CRDT-friendly (inspired by Riak)\\
|
||||||
|
\vspace{1em}
|
||||||
|
\item<4-> Cryptography-friendly: values are binary blobs
|
||||||
|
\end{itemize}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Application: an e-mail storage server}
|
||||||
|
\begin{center}
|
||||||
|
\only<1>{\includegraphics[width=.9\linewidth]{assets/aerogramme.png}}%
|
||||||
|
\end{center}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Aerogramme data model}
|
||||||
|
\begin{center}
|
||||||
|
\only<1>{\includegraphics[width=.4\linewidth]{assets/aerogramme_datatype.drawio.pdf}}%
|
||||||
|
\only<2->{\includegraphics[width=.9\linewidth]{assets/aerogramme_keys.drawio.pdf}\vspace{1em}}%
|
||||||
|
\end{center}
|
||||||
|
\visible<3->{Aerogramme encrypts all stored values for privacy\\
|
||||||
|
(Garage server administrators can't read your mail)}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Different deployment scenarios}
|
||||||
|
\begin{center}
|
||||||
|
\only<1>{\includegraphics[width=.9\linewidth]{assets/aerogramme_components1.drawio.pdf}}%
|
||||||
|
\only<2>{\includegraphics[width=.9\linewidth]{assets/aerogramme_components2.drawio.pdf}}%
|
||||||
|
\end{center}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{A new model for building resilient software}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Design a data model suited to K2V\\
|
||||||
|
{\footnotesize (see Cassandra docs on porting SQL data models to Cassandra)}
|
||||||
|
\vspace{1em}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Use CRDTs or other eventually consistent data types (see e.g. Bayou)
|
||||||
|
\vspace{1em}
|
||||||
|
\item Store opaque binary blobs to provide End-to-End Encryption\\
|
||||||
|
\end{itemize}
|
||||||
|
\vspace{1em}
|
||||||
|
\item Store big blobs (files) in S3
|
||||||
|
\vspace{1em}
|
||||||
|
\item Let Garage manage sharding, replication, failover, etc.
|
||||||
|
\end{itemize}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Research perspectives}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Write about Garage's global architecture \emph{(paper in progress)}
|
||||||
|
\vspace{1em}
|
||||||
|
\item Measure and improve Garage's performances
|
||||||
|
\vspace{1em}
|
||||||
|
\item Discuss the optimal layout algorithm, provide proofs
|
||||||
|
\vspace{1em}
|
||||||
|
\item Write about our proposed architecture for (E2EE) apps over K2V+S3
|
||||||
|
\end{itemize}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Where to find us}
|
||||||
|
\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 :
|