diff --git a/doc/talks/2023-01-18-tocatta/Makefile b/doc/talks/2023-01-18-tocatta/Makefile index a1f76e15..554f7b97 100644 --- a/doc/talks/2023-01-18-tocatta/Makefile +++ b/doc/talks/2023-01-18-tocatta/Makefile @@ -12,10 +12,16 @@ ASSETS=assets/consistent_hashing_1.pdf \ assets/lattice6.pdf_tex \ assets/lattice7.pdf_tex \ assets/lattice8.pdf_tex \ - assets/lattice9.pdf_tex \ - assets/latticeA.pdf_tex \ - assets/latticeB.pdf_tex \ - assets/latticeC.pdf_tex \ + assets/latticeB_1.pdf_tex \ + assets/latticeB_2.pdf_tex \ + assets/latticeB_3.pdf_tex \ + assets/latticeB_4.pdf_tex \ + assets/latticeB_5.pdf_tex \ + assets/latticeB_6.pdf_tex \ + assets/latticeB_7.pdf_tex \ + assets/latticeB_8.pdf_tex \ + assets/latticeB_9.pdf_tex \ + assets/latticeB_10.pdf_tex \ assets/deuxfleurs.pdf talk.pdf: talk.tex $(ASSETS) diff --git a/doc/talks/2023-01-18-tocatta/assets/lattice8.svg b/doc/talks/2023-01-18-tocatta/assets/lattice8.svg index 3bada791..c94a69b2 100644 --- a/doc/talks/2023-01-18-tocatta/assets/lattice8.svg +++ b/doc/talks/2023-01-18-tocatta/assets/lattice8.svg @@ -25,8 +25,8 @@ inkscape:document-units="mm" showgrid="false" inkscape:zoom="1.4734708" - inkscape:cx="451.65469" - inkscape:cy="272.14655" + inkscape:cx="399.39712" + inkscape:cy="248.39311" inkscape:window-width="1920" inkscape:window-height="999" inkscape:window-x="0" @@ -433,8 +433,8 @@ $write(\{a\})$: + $read()$: $\sqsupseteq \{a\} \to$ OK $\not\sqsupseteq \{a\}$ + y="41.972523">$\sqsupseteq \{a\}$ + + $\to \{\}$ return OK - - + return $\{\}\sqcup\{a\}=\{a\}$ $write(\{b\})$: - $\not\sqsupseteq \{b\}$ - $\not\sqsupseteq \{b\}$ - $\not\sqsupseteq \{b\}$ + y="83.577797">$\to \{a\}$ diff --git a/doc/talks/2023-01-18-tocatta/assets/latticeB_1.svg b/doc/talks/2023-01-18-tocatta/assets/latticeB_1.svg new file mode 100644 index 00000000..92232a1b --- /dev/null +++ b/doc/talks/2023-01-18-tocatta/assets/latticeB_1.svg @@ -0,0 +1,576 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $\{\}$ + $\{a,b,c\}$ + + $\{a\}$ + $\{b\}$ + $\{c\}$ + + + $\{a,c\}$ + $\{a,b\}$ + $\{b,c\}$ + + + + + + + + + + + + + + + + + + + + $write(\{a\})$: + $\not\sqsupseteq \{a\}$ + $\not\sqsupseteq \{a\}$ + $\not\sqsupseteq \{a\}$ + + + + $write(\{b\})$: + $\not\sqsupseteq \{b\}$ + $\not\sqsupseteq \{b\}$ + $\not\sqsupseteq \{b\}$ + + diff --git a/doc/talks/2023-01-18-tocatta/assets/latticeB_10.svg b/doc/talks/2023-01-18-tocatta/assets/latticeB_10.svg new file mode 100644 index 00000000..34c24e0d --- /dev/null +++ b/doc/talks/2023-01-18-tocatta/assets/latticeB_10.svg @@ -0,0 +1,715 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $\{\}$ + $\{a,b,c\}$ + + $\{a\}$ + $\{b\}$ + $\{c\}$ + + + $\{a,c\}$ + $\{a,b\}$ + $\{b,c\}$ + + + + + + + + + + + + + + + + + + + $write(\{a\})$: + $\sqsupseteq \{a\} \to$ OK + $\not\sqsupseteq \{a\}$ + $\not\sqsupseteq \{a\}$ + + + + $write(\{b\})$: + $read()$: + $\not\sqsupseteq \{b\}$ + $\sqsupseteq \{b\} \to$ OK + $\not\sqsupseteq \{b\}$ + + + $\to \{a\}$ + return $\{a\}$ + + $\to \{\}$ + + $\to \{\}$ + $read()$: + ; + return $\{b\}$ + + $\to \{b\}$ + ${\Large\textbf{??!}}$~~~~~$\{a\} \not\sqsubseteq \{b\}$ + + diff --git a/doc/talks/2023-01-18-tocatta/assets/latticeC.svg b/doc/talks/2023-01-18-tocatta/assets/latticeB_2.svg similarity index 86% rename from doc/talks/2023-01-18-tocatta/assets/latticeC.svg rename to doc/talks/2023-01-18-tocatta/assets/latticeB_2.svg index c815af94..c07cba2b 100644 --- a/doc/talks/2023-01-18-tocatta/assets/latticeC.svg +++ b/doc/talks/2023-01-18-tocatta/assets/latticeB_2.svg @@ -3,12 +3,12 @@ @@ -283,24 +283,24 @@ inkscape:label="Layer 2"> $\{\}$ $\{a,b,c\}$ $\{a\}$ $\{b\}$ $\{c\}$ @@ -346,35 +346,35 @@ style="fill:#000000"> $\{a,c\}$ $\{a,b\}$ $\{b,c\}$ @@ -433,20 +433,20 @@ $write(\{a\})$: $\sqsupseteq \{a\} \to$ OK $\sqsupseteq \{a\} \to$ OK + y="33.02087">$\not\sqsupseteq \{a\}$ $\sqsupseteq \{a\}$ - return OK - return OK + y="41.972523">$\not\sqsupseteq \{a\}$ $write(\{b\})$: $\sqsupseteq \{b\}$ + y="75.619804">$\not\sqsupseteq \{b\}$ $\sqsupseteq \{b\} \to$ OK + y="84.598038">$\not\sqsupseteq \{b\}$ $\sqsupseteq \{b\} \to$ OK + y="93.54969">$\not\sqsupseteq \{b\}$ diff --git a/doc/talks/2023-01-18-tocatta/assets/latticeA.svg b/doc/talks/2023-01-18-tocatta/assets/latticeB_3.svg similarity index 89% rename from doc/talks/2023-01-18-tocatta/assets/latticeA.svg rename to doc/talks/2023-01-18-tocatta/assets/latticeB_3.svg index 400ccff8..198d1f5d 100644 --- a/doc/talks/2023-01-18-tocatta/assets/latticeA.svg +++ b/doc/talks/2023-01-18-tocatta/assets/latticeB_3.svg @@ -3,12 +3,12 @@ @@ -283,24 +283,24 @@ inkscape:label="Layer 2"> $\{\}$ $\{a,b,c\}$ $\{a\}$ $\{b\}$ $\{c\}$ @@ -346,35 +346,35 @@ style="fill:#000000"> $\{a,c\}$ $\{a,b\}$ $\{b,c\}$ @@ -433,20 +433,14 @@ - $write(\{a\})$: $\sqsupseteq \{a\} \to$ OK $\sqsupseteq \{a\} \to$ OK + y="33.02087">$\not\sqsupseteq \{a\}$ $\sqsupseteq \{a\}$ - return OK + y="41.972523">$\not\sqsupseteq \{a\}$ $\not\sqsupseteq \{b\}$ $\not\sqsupseteq \{b\}$ + y="84.598038">$\sqsupseteq \{b\} \to$ OK $\sqsupseteq \{b\} \to$ OK + y="93.54969">$\not\sqsupseteq \{b\}$ + diff --git a/doc/talks/2023-01-18-tocatta/assets/lattice9.svg b/doc/talks/2023-01-18-tocatta/assets/latticeB_4.svg similarity index 90% rename from doc/talks/2023-01-18-tocatta/assets/lattice9.svg rename to doc/talks/2023-01-18-tocatta/assets/latticeB_4.svg index 8b3c6585..c5f6148d 100644 --- a/doc/talks/2023-01-18-tocatta/assets/lattice9.svg +++ b/doc/talks/2023-01-18-tocatta/assets/latticeB_4.svg @@ -3,12 +3,12 @@ @@ -283,24 +283,24 @@ inkscape:label="Layer 2"> $\{\}$ $\{a,b,c\}$ $\{a\}$ $\{b\}$ $\{c\}$ @@ -346,35 +346,35 @@ style="fill:#000000"> $\{a,c\}$ $\{a,b\}$ $\{b,c\}$ @@ -433,20 +433,14 @@ - $write(\{a\})$: $\sqsupseteq \{a\} \to$ OK $\sqsupseteq \{a\} \to$ OK + y="33.02087">$\not\sqsupseteq \{a\}$ $\not\sqsupseteq \{a\}$ - return OK $write(\{b\})$: + $read()$: $\not\sqsupseteq \{b\}$ $\not\sqsupseteq \{b\}$ + y="84.598038">$\sqsupseteq \{b\} \to$ OK $\sqsupseteq \{b\} \to$ OK + y="93.54969">$\not\sqsupseteq \{b\}$ + diff --git a/doc/talks/2023-01-18-tocatta/assets/latticeB.svg b/doc/talks/2023-01-18-tocatta/assets/latticeB_5.svg similarity index 88% rename from doc/talks/2023-01-18-tocatta/assets/latticeB.svg rename to doc/talks/2023-01-18-tocatta/assets/latticeB_5.svg index 06725d75..c2b668be 100644 --- a/doc/talks/2023-01-18-tocatta/assets/latticeB.svg +++ b/doc/talks/2023-01-18-tocatta/assets/latticeB_5.svg @@ -3,12 +3,12 @@ @@ -283,24 +283,24 @@ inkscape:label="Layer 2"> $\{\}$ $\{a,b,c\}$ $\{a\}$ $\{b\}$ $\{c\}$ @@ -346,35 +346,35 @@ style="fill:#000000"> $\{a,c\}$ $\{a,b\}$ $\{b,c\}$ @@ -433,20 +433,14 @@ - $write(\{a\})$: $\sqsupseteq \{a\} \to$ OK $\sqsupseteq \{a\} \to$ OK + y="33.02087">$\not\sqsupseteq \{a\}$ $\sqsupseteq \{a\}$ - return OK - return OK + y="41.972523">$\not\sqsupseteq \{a\}$ $write(\{b\})$: + $read()$: $\sqsupseteq \{b\} \to$ OK $\sqsupseteq \{b\} \to$ OK + y="93.54969">$\not\sqsupseteq \{b\}$ + + + $\to \{a\}$ diff --git a/doc/talks/2023-01-18-tocatta/assets/latticeB_6.svg b/doc/talks/2023-01-18-tocatta/assets/latticeB_6.svg new file mode 100644 index 00000000..980823fc --- /dev/null +++ b/doc/talks/2023-01-18-tocatta/assets/latticeB_6.svg @@ -0,0 +1,632 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $\{\}$ + $\{a,b,c\}$ + + $\{a\}$ + $\{b\}$ + $\{c\}$ + + + $\{a,c\}$ + $\{a,b\}$ + $\{b,c\}$ + + + + + + + + + + + + + + + + + + + $write(\{a\})$: + $\sqsupseteq \{a\} \to$ OK + $\not\sqsupseteq \{a\}$ + $\not\sqsupseteq \{a\}$ + + + + $write(\{b\})$: + $read()$: + $\not\sqsupseteq \{b\}$ + $\sqsupseteq \{b\} \to$ OK + $\not\sqsupseteq \{b\}$ + + + $\to \{a\}$ + return $\{a\}$ + + $\to \{\}$ + + diff --git a/doc/talks/2023-01-18-tocatta/assets/latticeB_7.svg b/doc/talks/2023-01-18-tocatta/assets/latticeB_7.svg new file mode 100644 index 00000000..154c0b7d --- /dev/null +++ b/doc/talks/2023-01-18-tocatta/assets/latticeB_7.svg @@ -0,0 +1,654 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $\{\}$ + $\{a,b,c\}$ + + $\{a\}$ + $\{b\}$ + $\{c\}$ + + + $\{a,c\}$ + $\{a,b\}$ + $\{b,c\}$ + + + + + + + + + + + + + + + + + + + $write(\{a\})$: + $\sqsupseteq \{a\} \to$ OK + $\not\sqsupseteq \{a\}$ + $\not\sqsupseteq \{a\}$ + + + + $write(\{b\})$: + $read()$: + $\not\sqsupseteq \{b\}$ + $\sqsupseteq \{b\} \to$ OK + $\not\sqsupseteq \{b\}$ + + + $\to \{a\}$ + return $\{a\}$ + + $\to \{\}$ + $read()$: + ; + + diff --git a/doc/talks/2023-01-18-tocatta/assets/latticeB_8.svg b/doc/talks/2023-01-18-tocatta/assets/latticeB_8.svg new file mode 100644 index 00000000..21766415 --- /dev/null +++ b/doc/talks/2023-01-18-tocatta/assets/latticeB_8.svg @@ -0,0 +1,671 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $\{\}$ + $\{a,b,c\}$ + + $\{a\}$ + $\{b\}$ + $\{c\}$ + + + $\{a,c\}$ + $\{a,b\}$ + $\{b,c\}$ + + + + + + + + + + + + + + + + + + + $write(\{a\})$: + $\sqsupseteq \{a\} \to$ OK + $\not\sqsupseteq \{a\}$ + $\not\sqsupseteq \{a\}$ + + + + $write(\{b\})$: + $read()$: + $\not\sqsupseteq \{b\}$ + $\sqsupseteq \{b\} \to$ OK + $\not\sqsupseteq \{b\}$ + + + $\to \{a\}$ + return $\{a\}$ + + $\to \{\}$ + + $\to \{\}$ + $read()$: + ; + + diff --git a/doc/talks/2023-01-18-tocatta/assets/latticeB_9.svg b/doc/talks/2023-01-18-tocatta/assets/latticeB_9.svg new file mode 100644 index 00000000..b60f8afe --- /dev/null +++ b/doc/talks/2023-01-18-tocatta/assets/latticeB_9.svg @@ -0,0 +1,699 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $\{\}$ + $\{a,b,c\}$ + + $\{a\}$ + $\{b\}$ + $\{c\}$ + + + $\{a,c\}$ + $\{a,b\}$ + $\{b,c\}$ + + + + + + + + + + + + + + + + + + + $write(\{a\})$: + $\sqsupseteq \{a\} \to$ OK + $\not\sqsupseteq \{a\}$ + $\not\sqsupseteq \{a\}$ + + + + $write(\{b\})$: + $read()$: + $\not\sqsupseteq \{b\}$ + $\sqsupseteq \{b\} \to$ OK + $\not\sqsupseteq \{b\}$ + + + $\to \{a\}$ + return $\{a\}$ + + $\to \{\}$ + + $\to \{\}$ + $read()$: + ; + return $\{b\}$ + + $\to \{b\}$ + + diff --git a/doc/talks/2023-01-18-tocatta/talk.pdf b/doc/talks/2023-01-18-tocatta/talk.pdf index e4acf75e..6a70fcd7 100644 Binary files a/doc/talks/2023-01-18-tocatta/talk.pdf and b/doc/talks/2023-01-18-tocatta/talk.pdf differ diff --git a/doc/talks/2023-01-18-tocatta/talk.tex b/doc/talks/2023-01-18-tocatta/talk.tex index db6d26ef..4c3e4eeb 100644 --- a/doc/talks/2023-01-18-tocatta/talk.tex +++ b/doc/talks/2023-01-18-tocatta/talk.tex @@ -49,7 +49,7 @@ \title{Garage} \subtitle{a lightweight and robust geo-distributed data storage system} -\author{Deuxfleurs Association} +\author{Alex Auvolat, Deuxfleurs Association} \date{Inria, 2023-01-18} \begin{document} @@ -59,7 +59,7 @@ \includegraphics[width=.3\linewidth]{../../sticker/Garage.pdf} \vspace{1em} - {\large\bf Deuxfleurs Association} + {\large\bf Alex Auvolat, Deuxfleurs Association} \vspace{1em} \url{https://garagehq.deuxfleurs.fr/} @@ -68,7 +68,7 @@ \end{frame} \begin{frame} - \frametitle{Who we are} + \frametitle{Who I am} \begin{columns}[t] \begin{column}{.2\textwidth} \centering @@ -82,21 +82,6 @@ ~ \end{column} \end{columns} - \vspace{1em} - - \begin{columns}[t] - \begin{column}{.2\textwidth} - ~ - \end{column} - \begin{column}{.6\textwidth} - \textbf{Quentin Dufour}\\ - PhD; co-founder of Deuxfleurs - \end{column} - \begin{column}{.2\textwidth} - \centering - \adjincludegraphics[width=.5\linewidth, valign=t]{assets/quentin.jpg} - \end{column} - \end{columns} \vspace{2em} \begin{columns}[t] @@ -546,7 +531,7 @@ \vspace{1em} - \textbf{CRDTs only}\\(conflict-free replicated data types) + \textbf{Limited objects such as CRDTs}\\(conflict-free replicated data types) \vspace{1em} Part of the complexity is \textbf{reported to the consumer of the API}\\~ @@ -647,6 +632,13 @@ \end{itemize} \end{frame} +\begin{frame} + \frametitle{Performance gains in practice} + \begin{center} + \includegraphics[width=.8\linewidth]{assets/endpoint-latency-dc.png} + \end{center} +\end{frame} + \begin{frame} \frametitle{What can we implement without consensus?} \begin{itemize} @@ -664,7 +656,7 @@ \end{frame} \begin{frame} - \frametitle{Understanding CRDTs and quorums} + \frametitle{CRDTs and quorums: read-after-write consistency} \begin{figure} \centering \def\svgwidth{.8\textwidth} @@ -676,15 +668,11 @@ \only<6>{\import{assets/}{lattice6.pdf_tex}}% \only<7>{\import{assets/}{lattice7.pdf_tex}}% \only<8>{\import{assets/}{lattice8.pdf_tex}}% - \only<9>{\import{assets/}{lattice9.pdf_tex}}% - \only<10>{\import{assets/}{latticeA.pdf_tex}}% - \only<11>{\import{assets/}{latticeB.pdf_tex}}% - \only<12>{\import{assets/}{latticeC.pdf_tex}}% \end{figure} \end{frame} \begin{frame} - \frametitle{Read-after-write consistency:} + \frametitle{CRDTs and quorums: read-after-write consistency} \textbf{Property:} If node $A$ did an operation $write(x)$ and received an OK response,\\ \hspace{2cm} and node $B$ starts an operation $read()$ after $A$ received OK,\\ \hspace{2cm} then $B$ will read a value $x' \sqsupseteq x$. @@ -718,7 +706,25 @@ \end{frame} \begin{frame} - \frametitle{Monotonical read consistency:} + \frametitle{CRDTs and quorums: monotonic-reads consistency} + \begin{figure} + \centering + \def\svgwidth{.8\textwidth} + \only<1>{\import{assets/}{latticeB_1.pdf_tex}}% + \only<2>{\import{assets/}{latticeB_2.pdf_tex}}% + \only<3>{\import{assets/}{latticeB_3.pdf_tex}}% + \only<4>{\import{assets/}{latticeB_4.pdf_tex}}% + \only<5>{\import{assets/}{latticeB_5.pdf_tex}}% + \only<6>{\import{assets/}{latticeB_6.pdf_tex}}% + \only<7>{\import{assets/}{latticeB_7.pdf_tex}}% + \only<8>{\import{assets/}{latticeB_8.pdf_tex}}% + \only<9>{\import{assets/}{latticeB_9.pdf_tex}}% + \only<10>{\import{assets/}{latticeB_10.pdf_tex}}% + \end{figure} +\end{frame} + +\begin{frame} + \frametitle{CRDTs and quorums: monotonic-reads consistency} \textbf{Property:} If node $A$ did an operation $read()$ and received $x$ as a response,\\ \hspace{2cm} and node $B$ starts an operation $read()$ after $A$ received $x$,\\ \hspace{2cm} then $B$ will read a value $x' \sqsupseteq x$. @@ -735,14 +741,8 @@ \end{enumerate} \vspace{1em} - This makes reads slower in some cases, and is \textbf{not implemented in Garage}. -\end{frame} -\begin{frame} - \frametitle{Performance gains in practice} - \begin{center} - \includegraphics[width=.8\linewidth]{assets/endpoint-latency-dc.png} - \end{center} + This makes reads slower in some cases, and is \textbf{not implemented in Garage}. \end{frame} \begin{frame}