created doc/talks subfolder and added my talk and the previous one done at the wide team
@@ -0,0 +1,12 @@
|
||||
*
|
||||
|
||||
!img
|
||||
|
||||
!.gitignore
|
||||
!*.svg
|
||||
!*.png
|
||||
!*.jpg
|
||||
!*.tex
|
||||
!Makefile
|
||||
!.gitignore
|
||||
!talk.pdf
|
||||
@@ -0,0 +1,6 @@
|
||||
talk.pdf: talk.tex img/garage_distributed.pdf img/consistent_hashing_1.pdf img/consistent_hashing_2.pdf img/consistent_hashing_3.pdf img/consistent_hashing_4.pdf img/garage_tables.pdf
|
||||
pdflatex talk.tex
|
||||
|
||||
img/%.pdf: img/%.svg
|
||||
inkscape -D -z --file=$^ --export-pdf=$@
|
||||
|
||||
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
After Width: | Height: | Size: 360 KiB |
|
After Width: | Height: | Size: 39 KiB |
@@ -0,0 +1,404 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="480"
|
||||
height="480"
|
||||
viewBox="0 0 127 127"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||
sodipodi:docname="garage_distributed.svg">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.979899"
|
||||
inkscape:cx="171.34852"
|
||||
inkscape:cy="170.69443"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1-3"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="false"
|
||||
units="px"
|
||||
inkscape:window-width="1404"
|
||||
inkscape:window-height="1016"
|
||||
inkscape:window-x="103"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="0" />
|
||||
<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">
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
id="layer1-3"
|
||||
transform="matrix(0.42851498,0,0,0.42851498,24.079728,-24.925134)">
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:2.065;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 66.78016,80.71889 99.921832,61.598165 132.84481,80.509232 V 127.38418 H 66.701651 Z"
|
||||
id="path124"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<g
|
||||
id="g1106-5"
|
||||
transform="matrix(0,0.95201267,-0.95201267,0,194.01664,-57.627274)"
|
||||
style="stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<g
|
||||
id="g1061-3"
|
||||
style="stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<circle
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path956-5"
|
||||
cx="168.8569"
|
||||
cy="92.889587"
|
||||
r="13.125794" />
|
||||
<circle
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path958-6"
|
||||
cx="168.77444"
|
||||
cy="92.702293"
|
||||
r="3.0778286" />
|
||||
<path
|
||||
id="path960-2"
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 169.46072,82.84435 c 4.95795,0.336608 8.87296,4.341959 9.09638,9.306301"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 154.67824,112.84018 11.89881,-13.038071 c 1.46407,-1.552664 3.79541,0.878511 2.81832,2.089181 l -10.57965,14.481 c -1.8851,2.02632 -6.10786,-1.06119 -4.13748,-3.53211 z"
|
||||
id="path964-9"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<g
|
||||
id="g1071-1"
|
||||
style="stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<g
|
||||
id="g1065-3"
|
||||
style="stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect949-6"
|
||||
width="35.576611"
|
||||
height="48.507355"
|
||||
x="150.9623"
|
||||
y="74.698929"
|
||||
ry="2.7302756" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 150.76919,106.16944 6.36181,-0.0223 c 2.53845,3.46232 6.29787,4.20243 10.1055,4.40362 l 0.0176,13.09251"
|
||||
id="path1033-0"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
id="layer1-3-5"
|
||||
transform="matrix(0.42851499,0,0,0.42851499,68.181495,12.180995)">
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:2.065;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 66.78016,73.340623 99.921832,54.219898 132.84481,73.130965 V 120.00591 H 66.701651 Z"
|
||||
id="path124-6"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<g
|
||||
id="g1106-5-2"
|
||||
transform="matrix(0,0.95201267,-0.95201267,0,194.01664,-65.058377)"
|
||||
style="stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<g
|
||||
id="g1061-3-9"
|
||||
style="stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<circle
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path956-5-1"
|
||||
cx="168.8569"
|
||||
cy="92.889587"
|
||||
r="13.125794" />
|
||||
<circle
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path958-6-2"
|
||||
cx="168.77444"
|
||||
cy="92.702293"
|
||||
r="3.0778286" />
|
||||
<path
|
||||
id="path960-2-7"
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 169.46072,82.84435 c 4.95795,0.336608 8.87296,4.341959 9.09638,9.306301"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 154.67824,112.84018 11.89881,-13.038071 c 1.46407,-1.552664 3.79541,0.878511 2.81832,2.089181 l -10.57965,14.481 c -1.8851,2.02632 -6.10786,-1.06119 -4.13748,-3.53211 z"
|
||||
id="path964-9-0"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<g
|
||||
id="g1071-1-9"
|
||||
style="stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<g
|
||||
id="g1065-3-3"
|
||||
style="stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect949-6-6"
|
||||
width="35.576611"
|
||||
height="48.507355"
|
||||
x="150.9623"
|
||||
y="74.698929"
|
||||
ry="2.7302756" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 150.76919,106.16944 6.36181,-0.0223 c 2.53845,3.46232 6.29787,4.20243 10.1055,4.40362 l 0.0176,13.09251"
|
||||
id="path1033-0-0"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
id="layer1-3-6"
|
||||
transform="matrix(0.42851499,0,0,0.42851499,-20.953301,19.351613)">
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:2.065;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 66.78016,73.340623 99.921832,54.219898 132.84481,73.130965 V 120.00591 H 66.701651 Z"
|
||||
id="path124-2"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<g
|
||||
id="g1106-5-6"
|
||||
transform="matrix(0,0.95201267,-0.95201267,0,194.01664,-65.058377)"
|
||||
style="stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<g
|
||||
id="g1061-3-1"
|
||||
style="stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<circle
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path956-5-8"
|
||||
cx="168.8569"
|
||||
cy="92.889587"
|
||||
r="13.125794" />
|
||||
<circle
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path958-6-7"
|
||||
cx="168.77444"
|
||||
cy="92.702293"
|
||||
r="3.0778286" />
|
||||
<path
|
||||
id="path960-2-9"
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 169.46072,82.84435 c 4.95795,0.336608 8.87296,4.341959 9.09638,9.306301"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 154.67824,112.84018 11.89881,-13.038071 c 1.46407,-1.552664 3.79541,0.878511 2.81832,2.089181 l -10.57965,14.481 c -1.8851,2.02632 -6.10786,-1.06119 -4.13748,-3.53211 z"
|
||||
id="path964-9-2"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<g
|
||||
id="g1071-1-0"
|
||||
style="stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<g
|
||||
id="g1065-3-2"
|
||||
style="stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect949-6-3"
|
||||
width="35.576611"
|
||||
height="48.507355"
|
||||
x="150.9623"
|
||||
y="74.698929"
|
||||
ry="2.7302756" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 150.76919,106.16944 6.36181,-0.0223 c 2.53845,3.46232 6.29787,4.20243 10.1055,4.40362 l 0.0176,13.09251"
|
||||
id="path1033-0-7"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
id="layer1-3-59"
|
||||
transform="matrix(0.42851499,0,0,0.42851499,51.949789,75.218277)">
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:2.065;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 66.78016,73.340623 99.921832,54.219898 132.84481,73.130965 V 120.00591 H 66.701651 Z"
|
||||
id="path124-22"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<g
|
||||
id="g1106-5-8"
|
||||
transform="matrix(0,0.95201267,-0.95201267,0,194.01664,-65.058377)"
|
||||
style="stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<g
|
||||
id="g1061-3-97"
|
||||
style="stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<circle
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path956-5-3"
|
||||
cx="168.8569"
|
||||
cy="92.889587"
|
||||
r="13.125794" />
|
||||
<circle
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path958-6-6"
|
||||
cx="168.77444"
|
||||
cy="92.702293"
|
||||
r="3.0778286" />
|
||||
<path
|
||||
id="path960-2-1"
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 169.46072,82.84435 c 4.95795,0.336608 8.87296,4.341959 9.09638,9.306301"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 154.67824,112.84018 11.89881,-13.038071 c 1.46407,-1.552664 3.79541,0.878511 2.81832,2.089181 l -10.57965,14.481 c -1.8851,2.02632 -6.10786,-1.06119 -4.13748,-3.53211 z"
|
||||
id="path964-9-29"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<g
|
||||
id="g1071-1-3"
|
||||
style="stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<g
|
||||
id="g1065-3-1"
|
||||
style="stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect949-6-9"
|
||||
width="35.576611"
|
||||
height="48.507355"
|
||||
x="150.9623"
|
||||
y="74.698929"
|
||||
ry="2.7302756" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 150.76919,106.16944 6.36181,-0.0223 c 2.53845,3.46232 6.29787,4.20243 10.1055,4.40362 l 0.0176,13.09251"
|
||||
id="path1033-0-4"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
id="layer1-3-7"
|
||||
transform="matrix(0.42851499,0,0,0.42851499,-1.173447,75.150288)">
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:2.065;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 66.78016,73.340623 99.921832,54.219898 132.84481,73.130965 V 120.00591 H 66.701651 Z"
|
||||
id="path124-8"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<g
|
||||
id="g1106-5-4"
|
||||
transform="matrix(0,0.95201267,-0.95201267,0,194.01664,-65.058377)"
|
||||
style="stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<g
|
||||
id="g1061-3-5"
|
||||
style="stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<circle
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path956-5-0"
|
||||
cx="168.8569"
|
||||
cy="92.889587"
|
||||
r="13.125794" />
|
||||
<circle
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path958-6-3"
|
||||
cx="168.77444"
|
||||
cy="92.702293"
|
||||
r="3.0778286" />
|
||||
<path
|
||||
id="path960-2-6"
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 169.46072,82.84435 c 4.95795,0.336608 8.87296,4.341959 9.09638,9.306301"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 154.67824,112.84018 11.89881,-13.038071 c 1.46407,-1.552664 3.79541,0.878511 2.81832,2.089181 l -10.57965,14.481 c -1.8851,2.02632 -6.10786,-1.06119 -4.13748,-3.53211 z"
|
||||
id="path964-9-1"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<g
|
||||
id="g1071-1-06"
|
||||
style="stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<g
|
||||
id="g1065-3-32"
|
||||
style="stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect949-6-0"
|
||||
width="35.576611"
|
||||
height="48.507355"
|
||||
x="150.9623"
|
||||
y="74.698929"
|
||||
ry="2.7302756" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:2.17959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 150.76919,106.16944 6.36181,-0.0223 c 2.53845,3.46232 6.29787,4.20243 10.1055,4.40362 l 0.0176,13.09251"
|
||||
id="path1033-0-6"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
</g>
|
||||
</g>
|
||||
</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"
|
||||
d="M 35.21897,43.254452 46.803736,32.872178"
|
||||
id="path1045" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 85.798392,29.613721 10.944185,7.688225"
|
||||
id="path1047" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 107.59813,71.879386 -6.2564,22.552649"
|
||||
id="path1049" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 75.866769,119.14997 61.529058,118.74136"
|
||||
id="path1051"
|
||||
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"
|
||||
d="M 29.414211,98.256475 C 29.681482,96.462435 21.07721,77.446418 21.07721,77.446418"
|
||||
id="path1053" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 39.447822,61.341585 90.641428,57.562618"
|
||||
id="path1055" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 90.440176,64.423751 54.180736,100.02908"
|
||||
id="path1057"
|
||||
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"
|
||||
d="M 47.163557,96.532205 61.535331,33.078667"
|
||||
id="path1059"
|
||||
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"
|
||||
d="m 71.396211,33.058731 15.77285,60.595014"
|
||||
id="path1061" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 79.384641,100.96895 41.150775,67.902625"
|
||||
id="path1063" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 19 KiB |
@@ -0,0 +1,502 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="850"
|
||||
height="480"
|
||||
viewBox="0 0 224.89584 127"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||
sodipodi:docname="garage_tables.svg">
|
||||
<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="381.09221"
|
||||
inkscape:cy="219.5592"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="false"
|
||||
units="px"
|
||||
inkscape:window-width="1867"
|
||||
inkscape:window-height="1016"
|
||||
inkscape:window-x="53"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1" />
|
||||
<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></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:#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-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>
|
||||
</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: 27 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 6.1 KiB |
@@ -0,0 +1,247 @@
|
||||
%\nonstopmode
|
||||
\documentclass[aspectratio=169]{beamer}
|
||||
\usepackage[utf8]{inputenc}
|
||||
% \usepackage[frenchb]{babel}
|
||||
\usepackage{amsmath}
|
||||
\usepackage{mathtools}
|
||||
\usepackage{breqn}
|
||||
\usepackage{multirow}
|
||||
\usetheme{Luebeck}
|
||||
\usepackage{graphicx}
|
||||
%\useoutertheme[footline=authortitle,subsection=false]{miniframes}
|
||||
|
||||
\beamertemplatenavigationsymbolsempty
|
||||
\setbeamertemplate{footline}
|
||||
{%
|
||||
\leavevmode%
|
||||
\hbox{\begin{beamercolorbox}[wd=.15\paperwidth,ht=2.5ex,dp=1.125ex,leftskip=.3cm,rightskip=.3cm plus1fill]{author in head/foot}%
|
||||
\usebeamerfont{author in head/foot} \insertframenumber{} / \inserttotalframenumber
|
||||
\end{beamercolorbox}%
|
||||
\begin{beamercolorbox}[wd=.2\paperwidth,ht=2.5ex,dp=1.125ex,leftskip=.3cm plus1fill,rightskip=.3cm]{author in head/foot}%
|
||||
\usebeamerfont{author in head/foot}\insertshortauthor
|
||||
\end{beamercolorbox}%
|
||||
\begin{beamercolorbox}[wd=.65\paperwidth,ht=2.5ex,dp=1.125ex,leftskip=.3cm,rightskip=.3cm plus1fil]{title in head/foot}%
|
||||
\usebeamerfont{title in head/foot}\insertshorttitle~--~\insertshortdate
|
||||
\end{beamercolorbox}}%
|
||||
\vskip0pt%
|
||||
}
|
||||
|
||||
\usepackage{tabu}
|
||||
\usepackage{multicol}
|
||||
\usepackage{vwcol}
|
||||
\usepackage{stmaryrd}
|
||||
\usepackage{graphicx}
|
||||
|
||||
\usepackage[normalem]{ulem}
|
||||
|
||||
\title[Garage : jouer dans la cour des grands quand on est un hébergeur associatif]{Garage : jouer dans la cour des grands \\quand on est un hébergeur associatif}
|
||||
\subtitle{(ou pourquoi on a décidé de réinventer la roue)}
|
||||
\author[Q. Dufour \& A. Auvolat]{Quentin Dufour \& Alex Auvolat}
|
||||
\date[02/12/2020]{Mercredi 2 décembre 2020}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\begin{frame}
|
||||
\titlepage
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{La question qui tue}
|
||||
|
||||
\begin{center}
|
||||
\includegraphics[scale=3]{img/sync.png} \\
|
||||
\Huge Pourquoi vous n'hébergez pas vos fichiers chez vous ? \\
|
||||
\end{center}
|
||||
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[t]
|
||||
\frametitle{La cour des grands}
|
||||
|
||||
\begin{columns}[t]
|
||||
\begin{column}{0.5\textwidth}
|
||||
{\huge Le modèle du cloud...}
|
||||
|
||||
\begin{center}
|
||||
\includegraphics[scale=0.08]{img/cloud.png}
|
||||
\end{center}
|
||||
|
||||
+ \underline{intégrité} : plus de perte de données
|
||||
|
||||
+ \underline{disponibilité} : tout le temps accessible
|
||||
|
||||
+ \underline{service} : rien à gérer
|
||||
|
||||
\vspace{0.15cm}
|
||||
\textbf{changement des comportements}
|
||||
\end{column}
|
||||
\pause
|
||||
\begin{column}{0.5\textwidth}
|
||||
{\huge ...et son prix}
|
||||
|
||||
\begin{center}
|
||||
\includegraphics[scale=0.07]{img/dc.jpg}
|
||||
\end{center}
|
||||
|
||||
- matériel couteux et polluant
|
||||
|
||||
- logiciels secrets
|
||||
|
||||
- gestion opaque
|
||||
|
||||
\vspace{0.2cm}
|
||||
\textbf{prisonnier de l'écosystème}
|
||||
\end{column}
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[t]
|
||||
\frametitle{Garage l'imposteur}
|
||||
|
||||
\begin{columns}[t]
|
||||
\begin{column}{0.5\textwidth}
|
||||
{\huge Ressemble à du cloud...}
|
||||
|
||||
\begin{center}
|
||||
\includegraphics[scale=0.5]{img/shh.jpg}
|
||||
\end{center}
|
||||
|
||||
+ \underline{compatible} avec les apps existantes
|
||||
|
||||
+ \underline{fonctionne} avec le mobile
|
||||
|
||||
+ \underline{s'adapte} aux habitudes prises
|
||||
|
||||
|
||||
\end{column}
|
||||
|
||||
\pause
|
||||
\begin{column}{0.5\textwidth}
|
||||
{\huge ...fait du P2P}
|
||||
|
||||
\begin{center}
|
||||
\includegraphics[scale=1]{img/death.jpg}
|
||||
\end{center}
|
||||
|
||||
\vspace{0.4cm}
|
||||
|
||||
+ \underline{contrôle} de l'infrastructure
|
||||
|
||||
+ \underline{transparent} code libre
|
||||
|
||||
+ \underline{sobre} fonctionne avec de vieilles machines à la maison
|
||||
\end{column}
|
||||
\end{columns}
|
||||
|
||||
\end{frame}
|
||||
|
||||
|
||||
\graphicspath{{img/}}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Mais donc, c'est quoi Garage ?}
|
||||
|
||||
\begin{columns}[t]
|
||||
\begin{column}{0.5\textwidth}
|
||||
\centering
|
||||
\textbf{Un système de stockage distribué}
|
||||
\vspace{1em}
|
||||
|
||||
\includegraphics[width=.7\columnwidth]{img/garage_distributed.pdf}
|
||||
\end{column}
|
||||
\pause
|
||||
|
||||
\begin{column}{0.5\textwidth}
|
||||
\centering
|
||||
\textbf{qui implémente l'API S3}
|
||||
\vspace{2em}
|
||||
|
||||
\includegraphics[width=.7\columnwidth]{img/Amazon-S3.jpg}
|
||||
\end{column}
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Consistent Hashing (DynamoDB)}
|
||||
\textbf{Comment répartir les fichiers sur les différentes machines ?}
|
||||
\vspace{1em}
|
||||
|
||||
\centering
|
||||
|
||||
\only<1>{\includegraphics[width=.55\columnwidth]{img/consistent_hashing_1.pdf}}%
|
||||
\only<2>{\includegraphics[width=.55\columnwidth]{img/consistent_hashing_2.pdf}}%
|
||||
\only<3>{\includegraphics[width=.55\columnwidth]{img/consistent_hashing_3.pdf}}%
|
||||
\only<4>{\includegraphics[width=.55\columnwidth]{img/consistent_hashing_4.pdf}}%
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Garage Internals : 3 niveaux de consistent hashing}
|
||||
\centering
|
||||
\includegraphics[width=.85\columnwidth]{img/garage_tables.pdf}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Modèles de cohérence}
|
||||
Garage utilise un modèle de cohérence relativement faible :
|
||||
\vspace{1em}
|
||||
|
||||
\begin{itemize}
|
||||
\item Objets répliqués 3 fois, quorum de 2 pour les lectures et les écritures\\
|
||||
$\to$ cohérence \textbf{``read your writes''}
|
||||
\vspace{1em}
|
||||
\item<2-> Types de donnée CRDT + mécanisme d'anti-entropie\\
|
||||
$\to$ cohérence \textbf{à terme} (eventual consistency)
|
||||
\vspace{1em}
|
||||
\item<3-> Cela s'applique pour chaque fichier individuellement :\\
|
||||
pas de linéarisabilté ou de cohérence causale entre les opérations\\
|
||||
sur des fichiers différents
|
||||
\vspace{1em}
|
||||
\item<4-> \textbf{Avantage :} convient bien à un déploiement géodistribué (multi-datacenter)
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Rust : retour d'expérience}
|
||||
|
||||
\begin{columns}
|
||||
\begin{column}{0.55\textwidth}
|
||||
Garage est entièrement écrit en Rust !
|
||||
\vspace{2em}
|
||||
|
||||
\textbf{Points forts :}
|
||||
\vspace{.5em}
|
||||
\begin{itemize}
|
||||
\item Langage compilé, très rapide
|
||||
\vspace{.5em}
|
||||
\item Typage fort, beaucoup de sécurités
|
||||
\vspace{.5em}
|
||||
\item Le meilleur de plusieurs paradigmes:
|
||||
fonctionnel, orienté objet, impératif
|
||||
\vspace{.5em}
|
||||
\item Un écosytème de librairies très complet:
|
||||
serialisation, async/await, http, ...
|
||||
\end{itemize}
|
||||
\end{column}
|
||||
|
||||
\begin{column}{0.45\textwidth}
|
||||
\begin{centering}
|
||||
\hspace{2em}\includegraphics[width=0.55\columnwidth]{img/rustacean-flat-happy.png}
|
||||
\end{centering}
|
||||
|
||||
\vspace{2em}
|
||||
\textbf{Points faibles :}
|
||||
\vspace{.5em}
|
||||
\begin{itemize}
|
||||
\item Les temps de compilation...
|
||||
\vspace{.5em}
|
||||
\item Compliqué à apprendre
|
||||
\end{itemize}
|
||||
\vspace{2em}
|
||||
\end{column}
|
||||
\end{columns}
|
||||
|
||||
\end{frame}
|
||||
|
||||
\end{document}
|
||||
|
||||
%% vim: set ts=4 sw=4 tw=0 noet spelllang=fr :
|
||||
@@ -0,0 +1,10 @@
|
||||
*.bbl
|
||||
*.aux
|
||||
*.bcf
|
||||
*.blg
|
||||
*.log
|
||||
*.run.xml
|
||||
*.synctex.gz
|
||||
build/
|
||||
main.pdf
|
||||
figures/crdt.pdf
|
||||
@@ -0,0 +1,33 @@
|
||||
.PHONY: all viewpdf pdf clean
|
||||
|
||||
TARGET = main
|
||||
SOURCE_FILES = $(shell find . -type f -name "*.tex" -print)
|
||||
CLASS_FILES = $(shell find . -type f -name "*.cls" -print)
|
||||
BIB_FILES = $(shell find . -type f -name "*.bib" -print)
|
||||
FIGURES = $(shell find . -path "./figures/*" -type f -print)
|
||||
BUILD_PATH = build
|
||||
BUILD_FILES = $(shell find $(BUILD_PATH) -type f -print)
|
||||
|
||||
BIB_PROCESSOR := biber
|
||||
|
||||
.PHONY: all pdf clean figures
|
||||
|
||||
all: pdf
|
||||
|
||||
pdf: $(TARGET).pdf
|
||||
|
||||
clean:
|
||||
@rm $(TARGET).pdf $(BUILD_FILES) > /dev/null 2>&1 || exit 0
|
||||
|
||||
figures: figures/crdt.pdf
|
||||
|
||||
$(TARGET).pdf: figures $(FIGURES) $(SOURCE_FILES) $(BIB_FILES) $(CLASS_FILES)
|
||||
@mkdir -p $(BUILD_PATH) > /dev/null 2>&1 || exit 0
|
||||
@pdflatex -interaction=nonstopmode -jobname=$(TARGET) -output-directory $(BUILD_PATH) $(TARGET).tex
|
||||
@$(BIB_PROCESSOR) --output-directory $(BUILD_PATH) $(TARGET)
|
||||
@pdflatex -interaction=nonstopmode -jobname=$(TARGET) -output-directory $(BUILD_PATH) $(TARGET).tex # For biber
|
||||
@pdflatex -interaction=nonstopmode -jobname=$(TARGET) -output-directory $(BUILD_PATH) $(TARGET).tex # For biber
|
||||
@ln -fs $(BUILD_PATH)/$(TARGET).pdf $(TARGET).pdf
|
||||
|
||||
figures/crdt.pdf: figures/svg/crdt.svg
|
||||
@inkscape -C --file=$< --export-pdf=$@
|
||||
@@ -0,0 +1 @@
|
||||
Presentation of Garage by Adrien on April, 28th 2021, for his research team [Spirals](https://team.inria.fr/spirals/).
|
||||
@@ -0,0 +1,27 @@
|
||||
|
||||
@inproceedings{brewer_towards_2000,
|
||||
title = {Towards {{Robust Distributed Systems}}},
|
||||
booktitle = {{{ACM PODC}}},
|
||||
author = {Brewer, Eric},
|
||||
year = {2000}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@incollection{defago_conflict-free_2011,
|
||||
title = {Conflict-{{Free Replicated Data Types}}},
|
||||
booktitle = {Stabilization, {{Safety}}, and {{Security}} of {{Distributed Systems}}},
|
||||
author = {Shapiro, Marc and Pregui{\c c}a, Nuno and Baquero, Carlos and Zawirski, Marek},
|
||||
year = {2011},
|
||||
address = {{Berlin, Heidelberg}},
|
||||
}
|
||||
|
||||
|
||||
@inproceedings{decandia_dynamo:_2007,
|
||||
title = {Dynamo: {{Amazon}}'s {{Highly Available Key}}-Value {{Store}}},
|
||||
booktitle = {{ACM SOSP}},
|
||||
author = {DeCandia, Giuseppe and Hastorun, Deniz and Jampani, Madan and Kakulapati, Gunavardhan and Lakshman, Avinash and Pilchin, Alex and Sivasubramanian, Swaminathan and Vosshall, Peter and Vogels, Werner},
|
||||
year = {2007},
|
||||
address = {{New York, USA}},
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
\section{Conclusion}
|
||||
|
||||
\begin{frame}{The future is cooler when we bend it our way}
|
||||
|
||||
Contributions welcome! :D
|
||||
|
||||
\end{frame}
|
||||
@@ -0,0 +1,124 @@
|
||||
\section{Escaping the cloud}
|
||||
|
||||
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% \begin{frame}{Down to Earth with home-hosting}
|
||||
|
||||
|
||||
% \todo{Stanley Parabole reference?}
|
||||
|
||||
% \end{frame}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}{Why?}
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{Privacy}: no prying eyes besides your ISP
|
||||
\item \textbf{Control} of your infrastructure
|
||||
\item \textbf{Ecology}: reuse old hardware
|
||||
\end{itemize}
|
||||
|
||||
\vfill
|
||||
\begin{block}{\emph{Tim Berners-Lee} (1994)}
|
||||
``Now, if someone tries to monopolize the Web, for example pushes proprietary variations on network protocols, then that would make me unhappy.''
|
||||
\end{block}
|
||||
|
||||
\begin{itemize}
|
||||
\item Make Tim Berners-Lee happy
|
||||
\end{itemize}
|
||||
|
||||
\end{frame}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}{What?}
|
||||
|
||||
\centering\Large
|
||||
A data store for commodity hardware on heterogenous household connections.
|
||||
|
||||
|
||||
\vfill\raggedright\normalsize
|
||||
|
||||
|
||||
\begin{block}{Targetting user-facing services}
|
||||
\begin{itemize}
|
||||
\item Static sites
|
||||
\item E-mails
|
||||
\item Instant communication
|
||||
%\item Video streaming % No need for a data store
|
||||
\item Collaboration
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\vfill
|
||||
|
||||
Nothing fancy like sensors data streams, AI or IoT.
|
||||
|
||||
\end{frame}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}{What?}
|
||||
|
||||
|
||||
\begin{block}{Requirements}
|
||||
\begin{itemize}
|
||||
\item \textbf{No single point of failure} / flat hierarchy:
|
||||
|
||||
Any node can die for extended periods of time.
|
||||
\item \textbf{Multi-site}: cluster spans regions/countries.
|
||||
\item \textbf{Acceptable performance}.
|
||||
\item \textbf{Lightweight}: targets legacy hardware.
|
||||
\item \textbf{Conceptually simple}: built for low-tech organisations.
|
||||
|
||||
Adding/maintaining cluster nodes should be easy.
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\vfill
|
||||
|
||||
\begin{block}{Non-goals}
|
||||
\begin{itemize}
|
||||
\item \textbf{Super badass performance}.
|
||||
\item \textbf{NAT traversal} etc.: we require full-mesh connectivity.
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}{How?}
|
||||
|
||||
\begin{itemize}
|
||||
\item Theoretically possible with object storage \& CRDTs.
|
||||
\vfill
|
||||
\item Household uplinks are getting decent (optical fibers).
|
||||
\end{itemize}
|
||||
|
||||
|
||||
|
||||
\end{frame}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}{Research Questions}
|
||||
|
||||
\begin{itemize}
|
||||
\item Decent performance despite bad inter-node connectivity.
|
||||
\vfill
|
||||
|
||||
\item Tailoring workloads as a function of nodes' capabilities:
|
||||
|
||||
\begin{itemize}
|
||||
\item Make use of low-end nodes (e.g. Raspberry Pis),
|
||||
\item Avoid impeding global performance because of low-end nodes.
|
||||
\end{itemize}
|
||||
\vfill
|
||||
|
||||
\item Building CRDTs for target use-cases:
|
||||
|
||||
\begin{itemize}
|
||||
\item Software engineering: DSL or native code?
|
||||
\item Provide APIs to data store users? Risky?
|
||||
\end{itemize}
|
||||
\vfill
|
||||
|
||||
\item Cluster management: effortless UX, low perf. overhead.
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
After Width: | Height: | Size: 147 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 104 KiB |
|
After Width: | Height: | Size: 32 KiB |
@@ -0,0 +1,930 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="119.30722mm"
|
||||
height="121.49291mm"
|
||||
viewBox="0 0 119.30722 121.49291"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
|
||||
sodipodi:docname="conflict.svg">
|
||||
<defs
|
||||
id="defs2">
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="marker2999"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path2997"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
|
||||
transform="matrix(-0.4,0,0,-0.4,-4,0)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="marker2964"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path2962"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
|
||||
transform="matrix(-0.4,0,0,-0.4,-4,0)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="marker1467"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1465"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
|
||||
transform="matrix(-0.4,0,0,-0.4,-4,0)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible"
|
||||
id="marker1449"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Mend">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
id="path1447" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible"
|
||||
id="marker12071"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
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:1.00000003pt;stroke-opacity:1"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
id="path12069"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible"
|
||||
id="marker9668"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
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:1.00000003pt;stroke-opacity:1"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
id="path9666"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="marker6943"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path6941"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
|
||||
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible"
|
||||
id="marker5445"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Mend">
|
||||
<path
|
||||
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
id="path5443"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="marker1115"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true"
|
||||
inkscape:collect="always">
|
||||
<path
|
||||
id="path861"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
|
||||
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Mend"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path826"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
|
||||
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lend"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path820"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="marker1101"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path1099"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
|
||||
transform="matrix(0.8,0,0,0.8,10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lstart"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path817"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
|
||||
transform="matrix(0.8,0,0,0.8,10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.4"
|
||||
inkscape:cx="244.86596"
|
||||
inkscape:cy="205.06317"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer5"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1055"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:snap-global="false" />
|
||||
<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></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="Common"
|
||||
transform="translate(-43.663712,-16.067619)"
|
||||
style="display:inline">
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 99.856918,34.684511 h 4.913692"
|
||||
id="path1257"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.79374999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
|
||||
d="M 102.31376,23.208557 V 135.9963"
|
||||
id="path815"
|
||||
inkscape:connector-curvature="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="90.524658"
|
||||
y="19.57423"
|
||||
id="text838"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan836"
|
||||
x="90.524658"
|
||||
y="19.57423"
|
||||
style="font-weight:bold;stroke-width:0.26458332px"># vaccines</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="46.748138"
|
||||
y="19.57423"
|
||||
id="text13775"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan13773"
|
||||
x="46.748138"
|
||||
y="19.57423"
|
||||
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Iwona;-inkscape-font-specification:'Iwona Italic';stroke-width:0.26458332px">Paris</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="148.20457"
|
||||
y="19.57423"
|
||||
id="text13798"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan13796"
|
||||
x="148.20457"
|
||||
y="19.57423"
|
||||
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Iwona;-inkscape-font-specification:'Iwona Italic';stroke-width:0.26458332px">Lille</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="The problem"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
style="display:none"
|
||||
transform="translate(-43.663712,-16.067619)">
|
||||
<g
|
||||
id="g13753"
|
||||
transform="translate(0,12.170833)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path850"
|
||||
d="M 97.820644,51.619712 75.828475,64.316897"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.52969581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1115)" />
|
||||
<text
|
||||
y="-108.69946"
|
||||
x="-183.00148"
|
||||
transform="rotate(180,91.874093,54.229103)"
|
||||
id="text7803"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><textPath
|
||||
id="textPath7973"
|
||||
xlink:href="#path850"><tspan
|
||||
id="tspan7801"
|
||||
style="font-weight:bold;stroke-width:0.26458332px">R</tspan></textPath></text>
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.52969581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9668)"
|
||||
d="M 75.056888,72.78638 97.049057,85.483565"
|
||||
id="path9498"
|
||||
inkscape:connector-curvature="0" />
|
||||
<text
|
||||
transform="translate(9.4212508,3.3408691)"
|
||||
y="2.986012"
|
||||
x="8.5186663"
|
||||
id="text10668"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><textPath
|
||||
id="textPath10836"
|
||||
xlink:href="#path9498"><tspan
|
||||
id="tspan10666"
|
||||
style="font-weight:bold;stroke-width:0.26458332px">W</tspan></textPath></text>
|
||||
</g>
|
||||
<g
|
||||
id="g13763"
|
||||
transform="translate(0,12.170833)">
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.52969581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker12071)"
|
||||
d="m 106.80689,51.619712 21.99218,12.697185"
|
||||
id="path11899"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path11901"
|
||||
d="M 129.57066,72.78638 107.57848,85.483565"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.52969581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9668)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="text13737"
|
||||
transform="rotate(-115.89278,108.31787,47.643413)"
|
||||
x="-372.04132"
|
||||
y="-217.15767"><textPath
|
||||
xlink:href="#path850"
|
||||
id="textPath13735"><tspan
|
||||
style="font-weight:bold;stroke-width:0.26458332px"
|
||||
id="tspan13733">R</tspan></textPath></text>
|
||||
<text
|
||||
transform="rotate(-58.856754,100.88692,38.870944)"
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="text13743"
|
||||
x="46.604572"
|
||||
y="6.6609678"><textPath
|
||||
xlink:href="#path9498"
|
||||
id="textPath13741"><tspan
|
||||
style="font-weight:bold;stroke-width:0.26458332px"
|
||||
id="tspan13739">W</tspan></textPath></text>
|
||||
</g>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path13768"
|
||||
d="m 99.856918,112.89149 h 4.913692"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="43.564934"
|
||||
y="53.51746"
|
||||
id="text13802"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan13800"
|
||||
x="43.564934"
|
||||
y="53.51746"
|
||||
style="stroke-width:0.26458332px">We acquired 1000 doses!</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="49.979401"
|
||||
y="82.649841"
|
||||
id="text13806"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan13804"
|
||||
x="49.979401"
|
||||
y="82.649841"
|
||||
style="stroke-width:0.26458332px">x + 1000</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="136.842"
|
||||
y="82.649841"
|
||||
id="text13810"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan13808"
|
||||
x="136.842"
|
||||
y="82.649841"
|
||||
style="stroke-width:0.26458332px">x + 500</tspan></text>
|
||||
<text
|
||||
id="text13814"
|
||||
y="53.51746"
|
||||
x="112.88577"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="stroke-width:0.26458332px"
|
||||
y="53.51746"
|
||||
x="112.88577"
|
||||
id="tspan13812"
|
||||
sodipodi:role="line">We acquired 500 doses!</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="108.70142"
|
||||
y="114.62009"
|
||||
id="text13818"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan13816"
|
||||
x="108.70142"
|
||||
y="114.62009"
|
||||
style="font-weight:bold;stroke-width:0.26458332px">???</tspan></text>
|
||||
<text
|
||||
id="text3109"
|
||||
y="36.388439"
|
||||
x="108.80019"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-weight:normal;font-size:4.93888903px;stroke-width:0.26458332px"
|
||||
y="36.388439"
|
||||
x="108.80019"
|
||||
id="tspan3107"
|
||||
sodipodi:role="line">T0: 5000</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer3"
|
||||
inkscape:label="ACID"
|
||||
style="display:none">
|
||||
<rect
|
||||
ry="5.2916665"
|
||||
y="67.923912"
|
||||
x="61.174206"
|
||||
height="39.498508"
|
||||
width="54.42857"
|
||||
id="rect14092"
|
||||
style="opacity:1;vector-effect:none;fill:#f9f9f9;fill-opacity:0.97409327;fill-rule:nonzero;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.91191711;paint-order:fill markers stroke" />
|
||||
<rect
|
||||
style="opacity:1;vector-effect:none;fill:#f9f9f9;fill-opacity:0.97409327;fill-rule:nonzero;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.91191711;paint-order:fill markers stroke"
|
||||
id="rect14090"
|
||||
width="54.42857"
|
||||
height="39.498508"
|
||||
x="1.6973262"
|
||||
y="21.886396"
|
||||
ry="5.2916665" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path14037"
|
||||
d="m 56.193207,64.654408 h 4.913692"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 56.193207,110.69192 h 4.913692"
|
||||
id="path14040"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
id="g14075"
|
||||
transform="translate(0,-1.9988201)">
|
||||
<g
|
||||
id="g13993"
|
||||
transform="translate(-43.663711,-25.06345)"
|
||||
style="display:inline">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path13977"
|
||||
d="M 97.820644,51.619712 75.828475,64.316897"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.52969581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1115)" />
|
||||
<text
|
||||
y="-108.69946"
|
||||
x="-183.00148"
|
||||
transform="rotate(180,91.874093,54.229103)"
|
||||
id="text13983"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><textPath
|
||||
id="textPath13981"
|
||||
xlink:href="#path850"><tspan
|
||||
id="tspan13979"
|
||||
style="font-weight:bold;stroke-width:0.26458332px">R</tspan></textPath></text>
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.52969581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9668)"
|
||||
d="M 75.056888,72.78638 97.049057,85.483565"
|
||||
id="path13985"
|
||||
inkscape:connector-curvature="0" />
|
||||
<text
|
||||
transform="translate(9.4212508,3.3408691)"
|
||||
y="2.986012"
|
||||
x="8.5186663"
|
||||
id="text13991"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><textPath
|
||||
id="textPath13989"
|
||||
xlink:href="#path9498"><tspan
|
||||
id="tspan13987"
|
||||
style="font-weight:bold;stroke-width:0.26458332px">W</tspan></textPath></text>
|
||||
</g>
|
||||
<text
|
||||
id="text14044"
|
||||
y="29.833508"
|
||||
x="3.4844763"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="stroke-width:0.26458332px"
|
||||
y="29.833508"
|
||||
x="3.4844763"
|
||||
id="tspan14042"
|
||||
sodipodi:role="line">AcqDoses(1000)</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
id="g14088"
|
||||
transform="translate(0,-0.41130478)">
|
||||
<g
|
||||
id="g14011"
|
||||
transform="translate(-43.663711,19.386549)"
|
||||
style="display:inline">
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.52969581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker12071)"
|
||||
d="m 106.80689,51.619712 21.99218,12.697185"
|
||||
id="path13995"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path13997"
|
||||
d="M 129.57066,72.78638 107.57848,85.483565"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.52969581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9668)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="text14003"
|
||||
transform="rotate(-115.89278,108.31787,47.643413)"
|
||||
x="-372.04132"
|
||||
y="-217.15767"><textPath
|
||||
xlink:href="#path850"
|
||||
id="textPath14001"><tspan
|
||||
style="font-weight:bold;stroke-width:0.26458332px"
|
||||
id="tspan13999">R</tspan></textPath></text>
|
||||
<text
|
||||
transform="rotate(-58.856754,100.88692,38.870944)"
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="text14009"
|
||||
x="46.604572"
|
||||
y="6.6609678"><textPath
|
||||
xlink:href="#path9498"
|
||||
id="textPath14007"><tspan
|
||||
style="font-weight:bold;stroke-width:0.26458332px"
|
||||
id="tspan14005">W</tspan></textPath></text>
|
||||
</g>
|
||||
<text
|
||||
id="text14044-8"
|
||||
y="74.283508"
|
||||
x="82.76487"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="stroke-width:0.26458332px"
|
||||
y="74.283508"
|
||||
x="82.76487"
|
||||
id="tspan14042-8"
|
||||
sodipodi:role="line">AcqDoses(500)</tspan></text>
|
||||
</g>
|
||||
<text
|
||||
transform="translate(-43.663711,-16.067619)"
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="108.80019"
|
||||
y="82.757004"
|
||||
id="text832-6"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan830-8"
|
||||
x="108.80019"
|
||||
y="82.757004"
|
||||
style="font-weight:normal;font-size:4.93888903px;stroke-width:0.26458332px">T1: 6000</tspan></text>
|
||||
<text
|
||||
transform="translate(-43.663711,-16.067619)"
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="108.80019"
|
||||
y="128.8701"
|
||||
id="text832-3"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan830-83"
|
||||
x="108.80019"
|
||||
y="128.8701"
|
||||
style="font-weight:normal;font-size:4.93888903px;stroke-width:0.26458332px">T2: 6500</tspan></text>
|
||||
<text
|
||||
transform="translate(-43.663711,-16.067619)"
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="108.80019"
|
||||
y="36.388439"
|
||||
id="text3117"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3115"
|
||||
x="108.80019"
|
||||
y="36.388439"
|
||||
style="font-weight:normal;font-size:4.93888903px;stroke-width:0.26458332px">T0: 5000</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer4"
|
||||
inkscape:label="BASE"
|
||||
style="display:none">
|
||||
<g
|
||||
id="g1463"
|
||||
transform="translate(0,-21.166667)">
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.52969581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1449)"
|
||||
d="M 54.156933,47.722926 32.164764,60.420111"
|
||||
id="path1369"
|
||||
inkscape:connector-curvature="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="text1375"
|
||||
transform="rotate(180,70.308075,52.117558)"
|
||||
x="-279.42224"
|
||||
y="-209.36409"><textPath
|
||||
xlink:href="#path850"
|
||||
id="textPath1373"><tspan
|
||||
style="font-weight:bold;stroke-width:0.26458332px"
|
||||
id="tspan1371">R</tspan></textPath></text>
|
||||
</g>
|
||||
<g
|
||||
id="g1481"
|
||||
transform="translate(0,-21.166667)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1377"
|
||||
d="M 31.393177,68.889594 53.385346,81.586779"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.52969581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1467)" />
|
||||
<text
|
||||
transform="translate(-34.395836)"
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="text1383"
|
||||
x="17.939917"
|
||||
y="6.3268809"><textPath
|
||||
xlink:href="#path9498"
|
||||
id="textPath1381"><tspan
|
||||
style="font-weight:bold;stroke-width:0.26458332px"
|
||||
id="tspan1379">W</tspan></textPath></text>
|
||||
</g>
|
||||
<g
|
||||
style="display:inline"
|
||||
transform="translate(-43.663711,-25.063453)"
|
||||
id="g1403">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1387"
|
||||
d="m 106.80689,51.619712 21.99218,12.697185"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.52969581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker12071)" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.52969581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9668)"
|
||||
d="M 129.57066,72.78638 107.57848,85.483565"
|
||||
id="path1389"
|
||||
inkscape:connector-curvature="0" />
|
||||
<text
|
||||
y="-217.15767"
|
||||
x="-372.04132"
|
||||
transform="rotate(-115.89278,108.31787,47.643413)"
|
||||
id="text1395"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><textPath
|
||||
id="textPath1393"
|
||||
xlink:href="#path850"><tspan
|
||||
id="tspan1391"
|
||||
style="font-weight:bold;stroke-width:0.26458332px">R</tspan></textPath></text>
|
||||
<text
|
||||
y="6.6609678"
|
||||
x="46.604572"
|
||||
id="text1401"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"
|
||||
transform="rotate(-58.856754,100.88692,38.870944)"><textPath
|
||||
id="textPath1399"
|
||||
xlink:href="#path9498"><tspan
|
||||
id="tspan1397"
|
||||
style="font-weight:bold;stroke-width:0.26458332px">W</tspan></textPath></text>
|
||||
</g>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1503"
|
||||
d="m 56.193207,73.650233 h 4.913692"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<text
|
||||
id="text1507"
|
||||
y="75.354156"
|
||||
x="64.607315"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-weight:normal;font-size:4.93888903px;stroke-width:0.26458332px"
|
||||
y="75.354156"
|
||||
x="64.607315"
|
||||
id="tspan1505"
|
||||
sodipodi:role="line">T1: [(T0, 6000),(T0, 5500)]</tspan></text>
|
||||
<g
|
||||
id="g1530"
|
||||
transform="translate(0,38.100002)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1522"
|
||||
d="M 54.156933,47.722926 32.164764,60.420111"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.52969581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1449)" />
|
||||
<text
|
||||
y="-209.36409"
|
||||
x="-279.42224"
|
||||
transform="rotate(180,70.308075,52.117558)"
|
||||
id="text1528"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><textPath
|
||||
id="textPath1526"
|
||||
xlink:href="#path850"><tspan
|
||||
id="tspan1524"
|
||||
style="font-weight:bold;stroke-width:0.26458332px">R</tspan></textPath></text>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="8.5044641"
|
||||
y="109.58665"
|
||||
id="text1534"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1532"
|
||||
x="8.5044641"
|
||||
y="109.58665"
|
||||
style="font-weight:normal;stroke-width:0.26458332px">Now solve this!</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="8.5044641"
|
||||
y="115.76025"
|
||||
style="font-weight:normal;stroke-width:0.26458332px"
|
||||
id="tspan3159">And write back!</tspan></text>
|
||||
<text
|
||||
id="text1538"
|
||||
y="44.886383"
|
||||
x="6.3156896"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="stroke-width:0.26458332px"
|
||||
y="44.886383"
|
||||
x="6.3156896"
|
||||
id="tspan1536"
|
||||
sodipodi:role="line">x + 1000</tspan></text>
|
||||
<text
|
||||
id="text1542"
|
||||
y="44.886383"
|
||||
x="93.178284"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="stroke-width:0.26458332px"
|
||||
y="44.886383"
|
||||
x="93.178284"
|
||||
id="tspan1540"
|
||||
sodipodi:role="line">x + 500</tspan></text>
|
||||
<text
|
||||
transform="translate(-43.663711,-16.067619)"
|
||||
id="text3103"
|
||||
y="36.388439"
|
||||
x="108.80019"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-weight:normal;font-size:4.93888903px;stroke-width:0.26458332px"
|
||||
y="36.388439"
|
||||
x="108.80019"
|
||||
id="tspan3101"
|
||||
sodipodi:role="line">T0: (⊥, 5000)</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer5"
|
||||
inkscape:label="CRDT"
|
||||
style="display:inline">
|
||||
<g
|
||||
style="display:inline"
|
||||
transform="translate(0,-21.166667)"
|
||||
id="g2920">
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.52969581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1467)"
|
||||
d="M 31.393177,68.889594 53.385346,81.586779"
|
||||
id="path2912"
|
||||
inkscape:connector-curvature="0" />
|
||||
<text
|
||||
y="6.3268809"
|
||||
x="17.939917"
|
||||
id="text2918"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"
|
||||
transform="translate(-34.395836)"><textPath
|
||||
id="textPath2916"
|
||||
xlink:href="#path9498"><tspan
|
||||
id="tspan2914"
|
||||
style="font-weight:bold;stroke-width:0.26458332px">W</tspan></textPath></text>
|
||||
</g>
|
||||
<g
|
||||
id="g3013">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path2924"
|
||||
d="M 85.906949,47.722927 63.914769,60.420112"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.52969581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2999)" />
|
||||
<text
|
||||
transform="rotate(-58.856754,57.228059,65.935492)"
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="text2936"
|
||||
x="7.1585193"
|
||||
y="48.970455"><textPath
|
||||
xlink:href="#path9498"
|
||||
id="textPath2934"><tspan
|
||||
style="font-weight:bold;stroke-width:0.26458332px"
|
||||
id="tspan2932">W</tspan></textPath></text>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="15.648211"
|
||||
y="44.007793"
|
||||
id="text2976"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan2974"
|
||||
x="15.648211"
|
||||
y="44.007793"
|
||||
style="font-weight:normal;stroke-width:0.26458332px">incr(1000)</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="82.927979"
|
||||
y="44.007793"
|
||||
id="text2980"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan2978"
|
||||
x="82.927979"
|
||||
y="44.007793"
|
||||
style="font-weight:normal;stroke-width:0.26458332px">incr(500)</tspan></text>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path2982"
|
||||
d="m 56.193207,72.591896 h 4.913692"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<text
|
||||
id="text2986"
|
||||
y="74.295815"
|
||||
x="65.136482"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-weight:normal;font-size:4.93888903px;stroke-width:0.26458332px"
|
||||
y="74.295815"
|
||||
x="65.136482"
|
||||
sodipodi:role="line"
|
||||
id="tspan2995">T1: (5000, </tspan><tspan
|
||||
style="font-weight:normal;font-size:4.93888903px;stroke-width:0.26458332px"
|
||||
y="79.777985"
|
||||
x="65.136482"
|
||||
sodipodi:role="line"
|
||||
id="tspan1204"> {(a, 1000), (b, 500)})</tspan></text>
|
||||
<g
|
||||
style="display:inline"
|
||||
transform="translate(0,38.100003)"
|
||||
id="g3042">
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.52969581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1449)"
|
||||
d="M 54.156933,47.722926 32.164764,60.420111"
|
||||
id="path3034"
|
||||
inkscape:connector-curvature="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="text3040"
|
||||
transform="rotate(180,70.308075,52.117558)"
|
||||
x="-279.42224"
|
||||
y="-209.36409"><textPath
|
||||
xlink:href="#path850"
|
||||
id="textPath3038"><tspan
|
||||
style="font-weight:bold;stroke-width:0.26458332px"
|
||||
id="tspan3036">R</tspan></textPath></text>
|
||||
</g>
|
||||
<text
|
||||
id="text3051"
|
||||
y="102.21611"
|
||||
x="17.764879"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-weight:normal;stroke-width:0.26458332px"
|
||||
y="102.21611"
|
||||
x="17.764879"
|
||||
id="tspan3049"
|
||||
sodipodi:role="line">6500</tspan></text>
|
||||
<text
|
||||
transform="translate(-43.663711,-16.067619)"
|
||||
id="text3097"
|
||||
y="36.388439"
|
||||
x="108.80019"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-weight:normal;font-size:4.93888903px;stroke-width:0.26458332px"
|
||||
y="36.388439"
|
||||
x="108.80019"
|
||||
id="tspan3095"
|
||||
sodipodi:role="line">T0: (5000, ∅)</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 52 KiB |
@@ -0,0 +1,227 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="82.010674mm"
|
||||
height="17.561125mm"
|
||||
viewBox="0 0 82.010674 17.561125"
|
||||
version="1.1"
|
||||
id="svg1579"
|
||||
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
|
||||
sodipodi:docname="crdt.svg">
|
||||
<defs
|
||||
id="defs1573">
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible"
|
||||
id="marker2645"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow2Mend">
|
||||
<path
|
||||
transform="scale(-0.6)"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="path2643"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible"
|
||||
id="marker2605"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow2Mstart">
|
||||
<path
|
||||
transform="scale(0.6)"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="path2603"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Mend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Mend"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true"
|
||||
inkscape:collect="always">
|
||||
<path
|
||||
id="path2206"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="scale(-0.6)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Mstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Mstart"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true"
|
||||
inkscape:collect="always">
|
||||
<path
|
||||
id="path2203"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="scale(0.6)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Lstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Lstart"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path2197"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="matrix(1.1,0,0,1.1,1.1,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Sstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Sstart"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path2191"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
|
||||
transform="matrix(0.2,0,0,0.2,1.2,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="2.8"
|
||||
inkscape:cx="148.82928"
|
||||
inkscape:cy="-32.722297"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:snap-bbox="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1055"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata1576">
|
||||
<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"
|
||||
transform="translate(-21.438257,-19.857903)">
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow2Mstart);marker-end:url(#Arrow2Mend)"
|
||||
d="M 44.979166,28.87314 H 58.822544"
|
||||
id="path2177"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
id="g2153">
|
||||
<rect
|
||||
rx="0"
|
||||
ry="3.8793426"
|
||||
y="19.990194"
|
||||
x="21.570549"
|
||||
height="17.296541"
|
||||
width="23.537758"
|
||||
id="rect2124"
|
||||
style="opacity:1;vector-effect:none;fill:#f9f9f9;fill-opacity:0.97409327;fill-rule:nonzero;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.91191711;paint-order:fill markers stroke" />
|
||||
<text
|
||||
id="text2132"
|
||||
y="29.799105"
|
||||
x="29.366098"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-weight:normal;stroke-width:0.26458332px"
|
||||
y="29.799105"
|
||||
x="29.366098"
|
||||
id="tspan2130"
|
||||
sodipodi:role="line">App</tspan></text>
|
||||
</g>
|
||||
<rect
|
||||
rx="0"
|
||||
ry="3.8793426"
|
||||
y="19.990194"
|
||||
x="58.612213"
|
||||
height="17.296541"
|
||||
width="23.537758"
|
||||
id="rect2155"
|
||||
style="opacity:1;vector-effect:none;fill:#f9f9f9;fill-opacity:0.97409327;fill-rule:nonzero;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.91191711;paint-order:fill markers stroke" />
|
||||
<text
|
||||
id="text2159"
|
||||
y="30.367077"
|
||||
x="63.842014"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-weight:normal;stroke-width:0.26458332px"
|
||||
y="30.367077"
|
||||
x="63.842014"
|
||||
id="tspan2157"
|
||||
sodipodi:role="line">CRDT</tspan></text>
|
||||
<g
|
||||
id="g4137"
|
||||
transform="translate(-15.875)">
|
||||
<rect
|
||||
rx="0"
|
||||
ry="3.8793426"
|
||||
y="19.990194"
|
||||
x="95.653885"
|
||||
height="17.296541"
|
||||
width="23.537758"
|
||||
id="rect2163"
|
||||
style="opacity:1;vector-effect:none;fill:#f9f9f9;fill-opacity:0.97409327;fill-rule:nonzero;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.91191711;paint-order:fill markers stroke" />
|
||||
<text
|
||||
id="text2167"
|
||||
y="30.367077"
|
||||
x="96.969627"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:Iwona;-inkscape-font-specification:'Iwona, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-weight:normal;stroke-width:0.26458332px"
|
||||
y="30.367077"
|
||||
x="96.969627"
|
||||
id="tspan2165"
|
||||
sodipodi:role="line">Datastore</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.4 KiB |
@@ -0,0 +1,147 @@
|
||||
\section{Introducing Garage}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}{Brought to you by the Deuxfleurs association}
|
||||
|
||||
\begin{block}{\textbf{deuxfleurs.fr} -- a libre hosting association with a vision}
|
||||
``Shifting the current structure of the Internet from a world of a few very large service providers, to a world where services are hosted by a variety of smaller organisations.''
|
||||
\end{block}
|
||||
|
||||
|
||||
\begin{block}{Our goals}
|
||||
\begin{itemize}
|
||||
\item To propose performant \& reliable libre services for the masses
|
||||
\item To host and administer our infrastructure ourselves
|
||||
\item To allow members to contribute storage/compute nodes
|
||||
\item Resilience: for availability \& the sysadmins' sleep
|
||||
\item Conceptual simplicity to ease onboarding \& demistify hosting
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
|
||||
|
||||
\end{frame}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}{The lacking state of the practice}
|
||||
|
||||
\begin{block}{Object storage fitted our needs}
|
||||
\begin{itemize}
|
||||
\item Distributed by design
|
||||
\item Objects are replicated
|
||||
\item Conceptually simple
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\vfill
|
||||
|
||||
\begin{block}{Existing object stores did not}
|
||||
\begin{itemize}
|
||||
\item Too specific / complex
|
||||
\item Resource hungry
|
||||
\item Hidden constraints
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\vfill
|
||||
|
||||
We developed Garage, an object store with minimal functionality.
|
||||
|
||||
It works, and serves our static sites and media.
|
||||
|
||||
\end{frame}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}{Introducing Garage}
|
||||
|
||||
\centering
|
||||
\url{garagehq.deuxfleurs.fr}
|
||||
|
||||
\url{git.deuxfleurs.fr/Deuxfleurs/garage}
|
||||
|
||||
\includegraphics[width=.4\columnwidth]{figures/garage_distributed.png}
|
||||
\vfill
|
||||
|
||||
\raggedright
|
||||
\begin{itemize}
|
||||
\item Distributed data store
|
||||
\item Based on DynamoDB object store (P2P!)
|
||||
\item Modular data types/protocols with CRDTs:
|
||||
\begin{itemize}
|
||||
\item Done: objects (media, static sites, backups...) via S3 API
|
||||
\item To do: e-mails via IMAP protocol, and more
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
|
||||
\end{frame}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}[t]{The \textbf{RING}}
|
||||
|
||||
\centering
|
||||
\fullcite{decandia_dynamo:_2007}
|
||||
\vspace{3ex}
|
||||
|
||||
\only<1>{\includegraphics[width=.5\columnwidth]{figures/c1.pdf}}%
|
||||
\only<2>{\includegraphics[width=.5\columnwidth]{figures/c2.pdf}}%
|
||||
\only<3>{\includegraphics[width=.5\columnwidth]{figures/c3.pdf}}%
|
||||
\only<4>{\includegraphics[width=.5\columnwidth]{figures/c4.pdf}}%
|
||||
\vspace{5ex}
|
||||
|
||||
%\raggedright
|
||||
\only<1>{Each node is assigned a unique ID on the circular address space.}%
|
||||
\only<2-3>{When a new object is added to the store...}%
|
||||
\only<3>{\\ It is assigned a unique ID (its \emph{key}) on the address space.}%
|
||||
\only<4>{The $R$ nodes after the object are in charge of replicating it.}%
|
||||
|
||||
\end{frame}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}{Distributed metadata}
|
||||
|
||||
\centering
|
||||
\includegraphics[width=.8\columnwidth]{figures/garage_tables.pdf}
|
||||
\vfill
|
||||
|
||||
The objects, versions and blocks are all stored in the ring.
|
||||
|
||||
\end{frame}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}{Written in Rust}
|
||||
|
||||
\begin{columns}
|
||||
\column{.65\columnwidth}
|
||||
Entirely written in Rust!
|
||||
\column{.35\columnwidth}
|
||||
\centering
|
||||
\includegraphics[width=.85\columnwidth]{figures/rustacean-flat-happy.png}
|
||||
\end{columns}
|
||||
\vfill
|
||||
|
||||
\begin{columns}
|
||||
\column[t]{.6\columnwidth}
|
||||
\textbf{Pros:}
|
||||
\begin{itemize}
|
||||
\item Compiled and fast
|
||||
\item Features prevent usual mistakes:
|
||||
|
||||
strongly typed, immutable by default, ownership instead of GC...
|
||||
|
||||
\item Best of several paradigms:
|
||||
|
||||
imperative, OO, functional
|
||||
|
||||
\item Good libraries for network programmings:
|
||||
|
||||
serialization, http, async/await...
|
||||
\end{itemize}
|
||||
\column[t]{.4\columnwidth}
|
||||
\textbf{Cons}:
|
||||
\begin{itemize}
|
||||
\item Steep learning curve
|
||||
\item Long compilation times
|
||||
\item Compiler rage
|
||||
\end{itemize}
|
||||
\end{columns}
|
||||
|
||||
\end{frame}
|
||||
@@ -0,0 +1,134 @@
|
||||
%% Imports %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\usepackage{graphicx}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage{csquotes} % Elegant quotes (must be loaded before babel)
|
||||
\usepackage[english]{babel}
|
||||
\usepackage[T1]{fontenc}
|
||||
% \usepackage{amsfonts}
|
||||
% \usepackage{amssymb}
|
||||
%\usepackage{lmodern}
|
||||
\usepackage{iwona}
|
||||
\usepackage{color}
|
||||
\usepackage{xspace}
|
||||
\usepackage{amsmath}
|
||||
\usepackage{hanging}
|
||||
\usepackage{listings}
|
||||
\lstset{basicstyle=\scriptsize}
|
||||
\usepackage{tikz}
|
||||
\usepackage{tikzsymbols} % For emojis
|
||||
%\usepackage{setspace} % Activation disables footnoes
|
||||
\usepackage{perpage} % Reset footnote counter every page
|
||||
\MakePerPage{footnote}
|
||||
\usepackage{nameref} % For printing the sections' name
|
||||
\usepackage{hyperref}
|
||||
|
||||
%% Biblio %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\usepackage[style=alphabetic,giveninits=true,sorting=none,hyperref,backend=biber,maxnames=3]{biblatex}
|
||||
\addbibresource{bibliography.bib}
|
||||
|
||||
%% Templating %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\usepackage{pgf}
|
||||
\usepackage{xifthen, tikz}
|
||||
|
||||
\usetheme{default}
|
||||
|
||||
\makeatletter
|
||||
|
||||
|
||||
%%% colors
|
||||
\definecolor{bleuroi}{RGB}{0, 8, 88}
|
||||
\definecolor{vertemeraude}{RGB}{0, 64, 44}
|
||||
\definecolor{lightgray}{RGB}{245,245,245}
|
||||
\definecolor{encre_de_chine}{RGB}{9,36,53}
|
||||
\definecolor{im_lost_in_your_eyes}{RGB}{110,138,159}
|
||||
\definecolor{metallic_grey}{RGB}{209,219,221}
|
||||
\definecolor{metallic_white}{RGB}{229,239,241}
|
||||
\definecolor{boss}{RGB}{229,72,27}
|
||||
\definecolor{toon_eyes}{RGB}{3,4,6}
|
||||
|
||||
\setbeamercolor{frametitle}{bg=bleuroi,fg=white}
|
||||
\setbeamercolor*{normal text}{fg=toon_eyes,bg=white}
|
||||
\setbeamercolor*{block title}{fg=white,bg=vertemeraude}
|
||||
\setbeamercolor*{block body}{fg=toon_eyes,bg=vertemeraude!5}
|
||||
\setbeamercolor{alerted text}{fg=vertemeraude}
|
||||
\setbeamercolor*{example text}{fg=toon_eyes,bg=white}
|
||||
\setbeamercolor*{structure}{fg=bleuroi,bg=white}
|
||||
% sectionnavigation:
|
||||
\setbeamercolor*{section in head/foot}{fg=bleuroi,bg=white}
|
||||
|
||||
% \let\oldtextbf\textbf
|
||||
% \renewcommand{\textbf}[1]{\textcolor{bleuroi}{\oldtextbf{#1}}}
|
||||
|
||||
%%% Rounded boxes with no shading
|
||||
\pgfdeclareverticalshading[lower.bg,upper.bg]{bmb@transition}{200cm}{%
|
||||
color(0pt)=(upper.bg); color(2pt)=(upper.bg); color(4pt)=(upper.bg)}
|
||||
\setbeamertemplate{blocks}[rounded][shadow=false]
|
||||
|
||||
%%% Who on Earth uses navigation bars?
|
||||
\setbeamertemplate{navigation symbols}{}
|
||||
|
||||
|
||||
%%% Headline with sections
|
||||
\setbeamertemplate{headline}
|
||||
{%
|
||||
\begin{beamercolorbox}[wd=\paperwidth,dp=.5ex,ht=2ex]{section in head/foot}
|
||||
\insertsectionnavigationhorizontal{\paperwidth}{\hskip0pt plus1fill}{\hskip0pt plus1fill}\par % Centered
|
||||
%\insertsectionnavigationhorizontal{\paperwidth}{}{\hfill\hfill} % Left aligned
|
||||
\end{beamercolorbox}%
|
||||
}
|
||||
% Set the colors of the section bar
|
||||
\usesectionheadtemplate
|
||||
{\colorbox{fg}{\color{bg} \insertsectionhead}}
|
||||
{\color{fg!40!bg} \insertsectionhead}
|
||||
|
||||
% \newlength\lpg@linewd
|
||||
% \setbox0=\hbox{\strut}
|
||||
% \newlength\strutht \strutht\ht0
|
||||
% \newlength\strutdp \strutdp\dp0
|
||||
|
||||
\setbeamertemplate{frametitle}
|
||||
{
|
||||
\begin{beamercolorbox}[wd=\paperwidth,dp=1ex,ht=2.6ex,leftskip=.7cm,rightskip=.7cm]{frametitle}
|
||||
%\vskip-1ex
|
||||
%[wd=\lpg@linewd, ht=\strutht, dp=\strutdp]{frametitle}
|
||||
%\vskip-.8ex\hskip0.7cm
|
||||
%\vskip-.8ex
|
||||
\usebeamerfont{frametitle}\strut\insertframetitle
|
||||
\ifx\insertframesubtitle\@empty
|
||||
\else
|
||||
\hfill \usebeamerfont{framesubtitle}\strut\insertframesubtitle
|
||||
\fi%
|
||||
\end{beamercolorbox}
|
||||
}
|
||||
|
||||
|
||||
%%% Page numbering in footline
|
||||
\setbeamertemplate{footline}{
|
||||
\hbox{\begin{beamercolorbox}[wd=1\paperwidth,ht=2.5ex,dp=1ex,right]{framenumber in head/foot}%
|
||||
\usebeamerfont{framenumber in head/foot}%
|
||||
%\insertframenumber\space/\space\inserttotalframenumber\hspace{0.3em}
|
||||
\insertframenumber\hspace{0.5em}
|
||||
\end{beamercolorbox}}}
|
||||
|
||||
%%% Reduce foot citation size
|
||||
\renewcommand{\footnotesize}{\tiny}
|
||||
|
||||
%%% Display footnotes (not working, still no footnotes)
|
||||
% \setbeamertemplate{footnote}{%
|
||||
% \hangpara{2em}{1}%
|
||||
% \makebox[2em][l]{\insertfootnotemark}\footnotesize\insertfootnotetext\par%
|
||||
% }
|
||||
|
||||
|
||||
\makeatother
|
||||
|
||||
%% Commentaires %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\newcommand{\annote}[3]{{
|
||||
\colorbox{#3}{\bfseries\sffamily\footnotesize\textcolor{white}{#2}}
|
||||
\color{#3}
|
||||
$\blacktriangleright$\textit{#1}$\blacktriangleleft$}
|
||||
}
|
||||
%% Uncomment for final version (removes notes)
|
||||
%\renewcommand{\annote}[3]{}
|
||||
|
||||
\newcommand{\todo}[1]{\annote{#1}{TODO}{green}}
|
||||
@@ -0,0 +1,99 @@
|
||||
\section{Introduction}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}{A very casual motivation}
|
||||
|
||||
|
||||
\begin{center}
|
||||
\Large
|
||||
I want to host \textbf{resilient web services} with \textbf{acceptable performance} on commodity hardware behind \textbf{household networks}.
|
||||
\end{center}
|
||||
\vfill
|
||||
|
||||
\begin{block}{Keywords}
|
||||
\begin{columns}
|
||||
\column{.5\columnwidth}
|
||||
\begin{itemize}
|
||||
\item Decentralised networks
|
||||
\item Edge computing
|
||||
\end{itemize}
|
||||
\column{.5\columnwidth}
|
||||
\begin{itemize}
|
||||
\item Distributed storage
|
||||
\item Privacy
|
||||
\end{itemize}
|
||||
\end{columns}
|
||||
\end{block}
|
||||
|
||||
\end{frame}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}{Context}
|
||||
|
||||
\textbf{Resilience}: Ability to recover quickly from failures and changes.
|
||||
\vspace{1ex}
|
||||
|
||||
Only achievable through distribution of the hosted applications across several physical locations.
|
||||
\vfill
|
||||
|
||||
|
||||
\begin{block}{Application = \textbf{computations} on \textbf{data}}
|
||||
\begin{itemize}
|
||||
\item \textbf{Computation}: Stateless; easy to distribute \& orchestrate.
|
||||
% where it is performed does not matter as long as the application's state is accessible R/W
|
||||
%Computation units are "easy" to distribute and orchestrate.
|
||||
|
||||
\item \textbf{Data}: Stateful; hard to distribute \& full of trade-offs.
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
|
||||
\end{frame}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}{Concurrent writes example}{How to lose vaccines}
|
||||
|
||||
\centering
|
||||
|
||||
\includegraphics[width=.5\columnwidth]{figures/conflict_problem.pdf}
|
||||
\end{frame}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}{The problem}
|
||||
|
||||
% \textbf{Path dependency}: existing data stores are built for data centres.
|
||||
|
||||
% $\implies$ They assume good inter-node connectivity.
|
||||
% \vfill
|
||||
|
||||
\begin{center}
|
||||
\Large
|
||||
Can we design an available data store tailored for adverse network conditions?
|
||||
\end{center}
|
||||
|
||||
\end{frame}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% Maybe more framing of the context. What kind of data storage? Object vs Block vs what?
|
||||
% \begin{frame}{``Stateless'', ``serverless'', and the elephant in the room}
|
||||
|
||||
% It seems easy to deploy \& administer web services nowadays ...
|
||||
|
||||
% Because the inherent complexity is shadowed by proprietary ``cloud'' solutions.
|
||||
|
||||
% The IT crowd can gloss over ``statelessness'' \emph{ad nauseam} ...
|
||||
|
||||
% But storing \emph{state} remains an open research problem.
|
||||
|
||||
% Data storage is either:
|
||||
|
||||
% \begin{itemize}
|
||||
% \item A single point of failure;
|
||||
% \item Delegated to proprietary solutions;
|
||||
% \item Pain.
|
||||
% \end{itemize}
|
||||
|
||||
% Today, we will review networked storage's history, and discuss open research questions.
|
||||
|
||||
% \end{frame}
|
||||
@@ -0,0 +1,70 @@
|
||||
\documentclass[compress]{beamer}
|
||||
|
||||
\input{header.tex}
|
||||
|
||||
%% Metadata %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\title{Distributed object storage is centralised}
|
||||
\subtitle{A quest for autonomy in the modern hosting ecology}
|
||||
\author{Adrien Luxey}
|
||||
\date{Wednesday, 28th April, 2021}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%% Begin document %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{document}
|
||||
|
||||
%% Title page %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
{
|
||||
\setbeamertemplate{footline}{}
|
||||
\setbeamertemplate{headline}{}
|
||||
\begin{frame}
|
||||
\titlepage
|
||||
\end{frame}
|
||||
}
|
||||
|
||||
%% Contents %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\input{introduction.tex}
|
||||
\input{sota.tex}
|
||||
\input{escaping_the_cloud.tex}
|
||||
\input{garage.tex}
|
||||
\input{conclusion.tex}
|
||||
|
||||
|
||||
%% Bibliography %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
% \begin{frame}
|
||||
% \large
|
||||
% \raggedright
|
||||
% Références
|
||||
|
||||
% \printbibliography
|
||||
% \end{frame}
|
||||
|
||||
%% Ending %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
{
|
||||
\setbeamertemplate{footline}{}
|
||||
\setbeamertemplate{headline}{}
|
||||
\begin{frame}
|
||||
\centering
|
||||
|
||||
\vspace{1cm}
|
||||
\Large Thank you for your attention.
|
||||
|
||||
\vspace{2cm}
|
||||
\large Now let's chat!
|
||||
|
||||
\vspace{1cm}
|
||||
\raggedleft
|
||||
\includegraphics[width=.2\textwidth]{figures/m_proxy_gray.pdf}
|
||||
\end{frame}
|
||||
}
|
||||
|
||||
%% Appendices %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
% \appendix
|
||||
% \input{sprinkler_appendix.tex}
|
||||
% \input{cascade_appendix.tex}
|
||||
% \input{spores_appendix.tex}
|
||||
|
||||
|
||||
\end{document}
|
||||
@@ -0,0 +1,323 @@
|
||||
\section{State of the art}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}{The CAP theorem}{Consistency vs. Availability}
|
||||
|
||||
\begin{block}{Eric Brewer's theorem}
|
||||
``A shared-state system can have \textbf{at most two} of the following properties at any given time:
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{C}onsistency
|
||||
\item \textbf{A}vailability
|
||||
\item \textbf{P}artition tolerance''
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
|
||||
|
||||
\begin{center}
|
||||
\Large
|
||||
Under network partitions, a distributed data store has to sacrifice either availability or consistency.
|
||||
\end{center}
|
||||
\vfill
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{Consistency-first}: Abort incoming queries;
|
||||
\item \textbf{Availability-first}: Return possibly stale data.
|
||||
\end{itemize}
|
||||
|
||||
\end{frame}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}{Consistency-first: the ACID model}{Consistency vs. Availability}
|
||||
|
||||
\textbf{Transaction}: unit of work within an ACID data store.
|
||||
%Comprises multiple operations.
|
||||
%E.g. bank transfer.
|
||||
%E.g. a bank transfer from A to B is a transaction involving two operations: withdraw money from A & credit B with the same money amount.
|
||||
\vfill
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{\underline{A}tomicity}: Transactions either complete entirely or fail.
|
||||
|
||||
No transaction ever seen as in-progress.
|
||||
|
||||
\item \textbf{\underline{C}onsistency}: Transactions always generate a valid state.
|
||||
|
||||
The database maintains its invariants across transactions.
|
||||
|
||||
\item \textbf{\underline{I}solation}: Concurrent transactions are seen as sequential.
|
||||
|
||||
Transactions are serializable, or sequentially consistent.
|
||||
|
||||
\item \textbf{\underline{D}urability}: Committed transactions are never forgotten.
|
||||
\end{itemize}
|
||||
\vfill\centering
|
||||
|
||||
Reads are fast, writes are slow.
|
||||
|
||||
\vfill\raggedright
|
||||
|
||||
Example: relational databases.
|
||||
\end{frame}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}[fragile]{Concurrent writes in ACID}{Consistency vs. Availability}
|
||||
|
||||
|
||||
\begin{columns}
|
||||
\column{.5\columnwidth}
|
||||
\begin{block}{}
|
||||
\begin{lstlisting}
|
||||
transaction AcqDoses(y):
|
||||
x <- SELECT #vaccines;
|
||||
UPDATE #vaccines = (x + y);
|
||||
\end{lstlisting}
|
||||
\end{block}
|
||||
\vspace{5ex}
|
||||
|
||||
Supports compound operations.
|
||||
\column{.5\columnwidth}
|
||||
\centering
|
||||
\includegraphics[width=\columnwidth]{figures/conflict_acid.pdf}
|
||||
\end{columns}
|
||||
|
||||
\end{frame}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}{Availability-first: the BASE model}{Consistency vs. Availability}
|
||||
|
||||
|
||||
Some apps prefer availability, e.g. Amazon products' reviews.
|
||||
\vfill
|
||||
|
||||
The BASE model trades Consistency \& Isolation for Availability.
|
||||
|
||||
|
||||
%Some applications do not care about strong consistency and prefer being highly available (e.g. Amazon's product reviews).
|
||||
|
||||
%In order to achieve higher availability, the BASE model relaxes consistency constraints of the ACID model: "eventual consistency".
|
||||
\vfill
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{\underline{B}asic \underline{A}vailability}:
|
||||
The data store thrives to be available.
|
||||
|
||||
\item \textbf{\underline{S}oft-state}:
|
||||
Replicas can disagree on the valid state.
|
||||
|
||||
\item \textbf{\underline{E}ventual consistency}:
|
||||
In the absence of write queries,
|
||||
the data store will eventually converge to a single valid state.
|
||||
\end{itemize}
|
||||
\vfill\centering
|
||||
|
||||
Writes are fast, reads are slow.
|
||||
|
||||
\vfill\raggedright
|
||||
|
||||
Examples: key-value \& object stores.
|
||||
|
||||
\end{frame}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}{Concurrent writes in BASE}{Consistency vs. Availability}
|
||||
|
||||
\begin{columns}
|
||||
\column{.5\columnwidth}
|
||||
\begin{block}{Object}
|
||||
\begin{itemize}
|
||||
\item Unique key
|
||||
\item Arbitrary value
|
||||
\item Metadata
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\vspace{5ex}
|
||||
|
||||
Conflict resolution = client's job!
|
||||
\vspace{5ex}
|
||||
|
||||
No compound operations.
|
||||
\column{.5\columnwidth}
|
||||
\centering
|
||||
\includegraphics[width=\columnwidth]{figures/conflict_base.pdf}
|
||||
\end{columns}
|
||||
|
||||
% KV storage is another example, distinction is minor here
|
||||
|
||||
% Object = unique key, arbitrary value, metadata.
|
||||
|
||||
% Object storage only provides semantics to investigate causal order of queries *for individual objects*. No compound operations, no transactions.
|
||||
|
||||
% Much easier to distribute, and "scale-out".
|
||||
|
||||
% Write is fast, read is slow (gotta collect all object versions).
|
||||
|
||||
% \todo{vaccines example with BASE model}
|
||||
|
||||
\end{frame}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}{Strong Eventual Consistency w/ CRDTs}{Consistency vs. Availability}
|
||||
|
||||
\centering\small
|
||||
|
||||
\fullcite{defago_conflict-free_2011}
|
||||
|
||||
\vfill\raggedright\normalsize
|
||||
|
||||
\begin{block}{Strong Eventual Consistency (SEC)}
|
||||
\begin{itemize}
|
||||
\item CRDTs specify distributed operations
|
||||
\item Conflicts will be solved according to specification
|
||||
\item Proven \& bound eventual convergence
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
|
||||
\vfill\centering
|
||||
\includegraphics[width=.5\columnwidth]{figures/crdt.pdf}
|
||||
|
||||
\end{frame}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}[fragile]{Concurrent writes with CRDTs}{Consistency vs. Availability}
|
||||
|
||||
\begin{columns}
|
||||
\column{.5\columnwidth}
|
||||
\begin{block}{}
|
||||
\begin{lstlisting}
|
||||
CRDT Counter(x0):
|
||||
history = {}
|
||||
op. incr(y):
|
||||
history U= {(UUID(), y)}
|
||||
op. decr(y):
|
||||
history U= {(UUID(), -y)}
|
||||
op. read():
|
||||
x = x0
|
||||
for (_, y) in history:
|
||||
x += y
|
||||
return x
|
||||
\end{lstlisting}
|
||||
\end{block}
|
||||
\vspace{2ex}
|
||||
|
||||
Operations commute?
|
||||
|
||||
$\implies$ screw total order!
|
||||
\column{.5\columnwidth}
|
||||
\centering
|
||||
\includegraphics[width=\columnwidth]{figures/conflict_crdt.pdf}
|
||||
\end{columns}
|
||||
|
||||
\end{frame}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}{A complex CRDT: the DAG}{Consistency vs. Availability}
|
||||
|
||||
\centering
|
||||
\only<1>{\includegraphics[height=\textheight]{figures/dag_crdt.png}}%
|
||||
\only<2>{
|
||||
Just to say I swept a lot under the rug.
|
||||
\vfill
|
||||
|
||||
For details, go read:
|
||||
|
||||
\fullcite{defago_conflict-free_2011}
|
||||
\vfill
|
||||
|
||||
For an implementation, check \textbf{AntidoteDB}.
|
||||
}
|
||||
|
||||
\end{frame}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{frame}{State of the practice}{Path dependency to the ``cloud''}
|
||||
|
||||
\begin{block}{The BASE model is fashionable because}
|
||||
\centering
|
||||
|
||||
``\emph{High-performance} object storage for \emph{AI analytics} with PBs of \emph{IoT data streams} at the \emph{edge}, using \emph{5G}.''
|
||||
% \begin{itemize}
|
||||
% \item Highest performance
|
||||
% \item IoT data streams are inherently distributed
|
||||
% \end{itemize}
|
||||
\end{block}
|
||||
|
||||
\vfill\centering
|
||||
|
||||
\includegraphics[width=.9\columnwidth]{figures/minio_edge.png}
|
||||
|
||||
\vfill\raggedright
|
||||
|
||||
|
||||
%\begin{block}{}
|
||||
\begin{itemize}
|
||||
\item Always backed by cloud: high performance network links.
|
||||
\item Edge nodes always seen as clients or data sources, not peers.
|
||||
\end{itemize}
|
||||
%\end{block}
|
||||
|
||||
% There is \textbf{always a central cloud cluster} in these use-cases.
|
||||
|
||||
% Hidden constraint: \textbf{high performance inter-node connectivity}.
|
||||
|
||||
|
||||
|
||||
\end{frame}
|
||||
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% \begin{frame}{A brief history of storage}
|
||||
|
||||
% We keep it short because we'll follow chronological order in the next section too.
|
||||
|
||||
% \end{frame}
|
||||
|
||||
|
||||
% \begin{frame}{In the beginning, there were \emph{monoliths}}
|
||||
|
||||
% \includegraphics[width=.5\columnwidth]{figures/stonehenge.jpg}
|
||||
|
||||
% Web applications used to be monolithic:
|
||||
|
||||
% \begin{itemize}
|
||||
% \item One or two servers;
|
||||
% \item Availability was not an obsession;
|
||||
% \item Latency was acceptable.
|
||||
% \end{itemize}
|
||||
|
||||
% Relational databases were queens.
|
||||
|
||||
% \end{frame}
|
||||
|
||||
|
||||
% \begin{frame}{Then came \emph{expectations}}
|
||||
% Then, the whole world went online, and suddenly: expectations!
|
||||
|
||||
% \begin{itemize}
|
||||
% \item ``Milliseconds matter.'' (Algolia slogan)
|
||||
% \item Critical networked services (healthcare, logistics) need 100\% availability
|
||||
% \end{itemize}
|
||||
|
||||
% $\implies$ Microservices \& horizontal scalability.
|
||||
|
||||
% \todo{Develop on the `herd not sheep' paradigm a bit.}
|
||||
|
||||
% \end{frame}
|
||||
|
||||
|
||||
% \begin{frame}{Distributing state/storage: the remaining unknown}
|
||||
|
||||
% The microservices orchestration game works well for \emph{stateless} services.
|
||||
|
||||
% However, any application requires \emph{state}, persistent data.
|
||||
|
||||
% And this is tough. As we will now see.
|
||||
|
||||
% (Not that it's not well studied: distributed storage has always been fashionable.)
|
||||
|
||||
% \end{frame}
|
||||