Added some brainstorming thoughts.
This commit is contained in:
parent
ffc10b03c2
commit
7b21b4f304
4 changed files with 78 additions and 33 deletions
|
@ -2,6 +2,8 @@
|
||||||
\usepackage[margin=1in]{geometry}
|
\usepackage[margin=1in]{geometry}
|
||||||
\usepackage{pervasives}
|
\usepackage{pervasives}
|
||||||
|
|
||||||
|
\newcommand{\dual}[1]{#1^d}
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
\begin{center}
|
\begin{center}
|
||||||
{\Large Quorum Systems}
|
{\Large Quorum Systems}
|
||||||
|
@ -11,17 +13,7 @@
|
||||||
|
|
||||||
{\input{sections/quorum_systems.tex}}
|
{\input{sections/quorum_systems.tex}}
|
||||||
{\input{sections/read_write_quorum_systems.tex}}
|
{\input{sections/read_write_quorum_systems.tex}}
|
||||||
{\input{sections/recursive_quorum_systems.tex}}
|
{\input{sections/brainstorm.tex}}
|
||||||
|
|
||||||
\TODO[michael]{Prove that for every read-write quorum system, there exists a coterie with at least as good load.}
|
|
||||||
\TODO[michael]{Prove that if P dominates Q, then P has equal or lower load.}
|
|
||||||
\TODO[michael]{The above shows that the optimal load quorum system is a non-dominated coterie. Maybe this is useful? We can generate every NDC?}
|
|
||||||
\TODO[michael]{Understand how domination relates to subsumption.}
|
|
||||||
\TODO[michael]{Understand dual-major, dual-minor, and self-dual.}
|
|
||||||
\TODO[michael]{Extend these notions to read-write quorums.}
|
|
||||||
\TODO[michael]{Enumerate all read-write quorums on four nodes and see the ones we can and can't subsume.}
|
|
||||||
\TODO[michael]{Prove that if I have the read quorums R, then the write quorums are bar(R).}
|
|
||||||
|
|
||||||
|
|
||||||
\bibliographystyle{plain}
|
\bibliographystyle{plain}
|
||||||
\bibliography{references}
|
\bibliography{references}
|
||||||
|
|
61
notes/sections/brainstorm.tex
Normal file
61
notes/sections/brainstorm.tex
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
\begin{itemize}
|
||||||
|
\item
|
||||||
|
Recursive quorum systems are all non-dominated bicoteries. We can view the
|
||||||
|
tree as a way to generate an arbitrary set of read quorums. Then we just
|
||||||
|
bubble down dual to compute write quorums.
|
||||||
|
|
||||||
|
\item
|
||||||
|
The theory of coteries and decomposition has been very well studied. The
|
||||||
|
one thing that seems a little less studied is the relationship between load
|
||||||
|
and bicoteries. Can we find a nice way to find an optimal load bicoterie?
|
||||||
|
This is probably hard, but maybe something about bicoteries makes this
|
||||||
|
easier than for coteries.
|
||||||
|
|
||||||
|
\item
|
||||||
|
If we wanted to develop a library for bicoteries, we would like to (a)
|
||||||
|
allow people to form arbitrary bicoteries, (b) compute an optimal strategy
|
||||||
|
for a bicotier, (c) efficiently pick quorums based on the strategy, and (d)
|
||||||
|
efficiently determine if something is a superset of a quorum. We can do (a)
|
||||||
|
with a library of dual-able operators like or and and along with some
|
||||||
|
builtins for things like grids. (b) we can use LP with specializations. We
|
||||||
|
might have to do something smart to get ``good' strategies (e.g.,
|
||||||
|
balanced). For (d), we can just evaluate the tree or its dual or maybe use
|
||||||
|
something more efficient like BDDs? For (c) I'm not completely sure. For
|
||||||
|
some quorum systems, the number of quorums is exponential, so we wouldn't
|
||||||
|
want to represent them explicitly. Ideally we could also find an optimal
|
||||||
|
load bicoterie, but that's probably not going to happen. The library can
|
||||||
|
also help compute fault tolerance and maybe load under failure and whatnot.
|
||||||
|
How to compute fault tolerance with duplicates?
|
||||||
|
|
||||||
|
\item
|
||||||
|
Maybe we can run some practical experiments to show how important a good
|
||||||
|
bicoterie is. Maybe we'll find it's not that important.
|
||||||
|
|
||||||
|
\item
|
||||||
|
Is there anything smart about reconfiguring or changing coteries on the
|
||||||
|
fly? For example, grids are not good to go from 6 to 7 nodes. With
|
||||||
|
bicoteries, we probably want to adjust on the fly as the read and write
|
||||||
|
ratios change.
|
||||||
|
|
||||||
|
\item
|
||||||
|
Maybe we can introduce the idea that not all nodes have the same capacity.
|
||||||
|
Some have higher load than others. We could bake that into the nodes like,
|
||||||
|
a = Node("a", cap=1000).
|
||||||
|
|
||||||
|
\item
|
||||||
|
Maybe some nodes are also co-located, so the fault tolerance is a little
|
||||||
|
different. How can we compute fault tolerance with duplicates anyway?
|
||||||
|
|
||||||
|
\item
|
||||||
|
Just for fun, we could probably cross compile to javascript and show how to
|
||||||
|
subsume other quorum systems with our library. We should be able to subsume
|
||||||
|
all if we use duplicates.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\TODO[michael]{Prove that for every read-write quorum system, there exists a coterie with at least as good load.}
|
||||||
|
\TODO[michael]{The above shows that the optimal load quorum system is a non-dominated coterie. Maybe this is useful? We can generate every NDC?}
|
||||||
|
\TODO[michael]{Understand how domination relates to subsumption.}
|
||||||
|
\TODO[michael]{Understand dual-major, dual-minor, and self-dual.}
|
||||||
|
\TODO[michael]{Extend these notions to read-write quorums.}
|
||||||
|
\TODO[michael]{Enumerate all read-write quorums on four nodes and see the ones we can and can't subsume.}
|
||||||
|
\TODO[michael]{Prove that if I have the read quorums R, then the write quorums are bar(R).}
|
|
@ -23,7 +23,6 @@ g(\vec{x})$. In other words, $f \leq g$ if $\setst{\vec{x}}{g(\vec{x})}
|
||||||
\subseteq \setst{\vec{x}}{f(\vec{x})}$. Consider two quorum systems $Q_1$ and
|
\subseteq \setst{\vec{x}}{f(\vec{x})}$. Consider two quorum systems $Q_1$ and
|
||||||
$Q_2$, $Q_1$ dominates $Q_2$ if and only if $f_{Q_2} < f_{Q_1}$.
|
$Q_2$, $Q_1$ dominates $Q_2$ if and only if $f_{Q_2} < f_{Q_1}$.
|
||||||
|
|
||||||
\newcommand{\dual}[1]{#1^d}
|
|
||||||
Let the dual $\dual{f}$ of $f$ be $\dual{f}(x) = \bar{f}(\bar{x})$. $\dual{f}$
|
Let the dual $\dual{f}$ of $f$ be $\dual{f}(x) = \bar{f}(\bar{x})$. $\dual{f}$
|
||||||
is the function we get if we swap and with or. Note that $\dual{f}$ corresponds
|
is the function we get if we swap and with or. Note that $\dual{f}$ corresponds
|
||||||
to the sets that intersect every set in $f$. We say a monotone function $f$
|
to the sets that intersect every set in $f$. We say a monotone function $f$
|
||||||
|
@ -68,10 +67,11 @@ higher the throughput it can support.
|
||||||
which is optimal.
|
which is optimal.
|
||||||
\end{example}
|
\end{example}
|
||||||
|
|
||||||
\cite{naor1998load} prove that if a quorum system dominates another, it has
|
\cite{naor1998load} shows how to use a linear program to compute load.
|
||||||
lower or equal load. This shows that there always is a non-dominated coterie
|
\cite{naor1998load} also proves that if a quorum system dominates another, it
|
||||||
that has the lowest possible load. If we're trying to optimize for load, this
|
has lower or equal load. This shows that there always is a non-dominated
|
||||||
tells us that we limit ourselves to non-dominated coteries.
|
coterie that has the lowest possible load. If we're trying to optimize for
|
||||||
|
load, this tells us that we limit ourselves to non-dominated coteries.
|
||||||
|
|
||||||
The \defword{resilience} or \defword{fault tolerance} of a quorum system $Q$ is
|
The \defword{resilience} or \defword{fault tolerance} of a quorum system $Q$ is
|
||||||
the largest number $f$ such that for every subset $F \subseteq X$ with $|F| =
|
the largest number $f$ such that for every subset $F \subseteq X$ with $|F| =
|
||||||
|
|
|
@ -1,25 +1,17 @@
|
||||||
\section{Read-Write Quorum Systems}
|
\section{Read-Write Quorum Systems}
|
||||||
\NOTE[mwhittaker]{%
|
|
||||||
These definitions are adapted from the quorum system definitions. We should
|
|
||||||
double check that they all make sense or find the definitions in some paper.
|
|
||||||
}
|
|
||||||
|
|
||||||
Given a set $X = \set{x_1, \ldots, x_n}$, a \defword{read-write quorum system}
|
Given a set $X = \set{x_1, \ldots, x_n}$, a \defword{read-write quorum system}
|
||||||
over $X$ is a pair of sets $Q = (R, W)$ of subsets of $X$ such that every $r
|
over $X$ is a pair of sets $Q = (R, W)$ of subsets of $X$ such that every $r
|
||||||
\in R$ intersects every $w \in W$. The elements $r \in R$ are called
|
\in R$ intersects every $w \in W$. The elements $r \in R$ are called
|
||||||
\defword{read quorums}, and the elements $w \in W$ are called \defword{write
|
\defword{read quorums}, and the elements $w \in W$ are called \defword{write
|
||||||
quorums}.
|
quorums}. Read-write quorum systems are also called bicoteries.
|
||||||
|
%
|
||||||
\TODO[mwhittaker]{%
|
$(R, W)$ is a coterie if both $R$ and $W$ are minimal. $(R_1, W_1)$ dominates
|
||||||
How do we define coteries for read-write quorums? Obviously, we don't want
|
$(R_2, W_2)$ if $R_1$ dominates $R_2$ and $W_1$ dominates $W_2$. Again, we can
|
||||||
one read quorum being a strict subset of another read quorum, and we don't
|
view a read-write quorum system $(R, W)$ as a pair of monotone functions $f_R$
|
||||||
want a write quorum being a strict subset of another write quorum, but can a
|
and $f_W$. $(f_R, f_W)$ is a read-write quorum sytem if $f_R \leq \dual{f_W}$.
|
||||||
read quorum be a strict subset of a write quorum and vice-versa?
|
It is a non-dominated coterie if $f_R = \dual{f_W}$. Thus, to generate a
|
||||||
}
|
non-dominated bicoterie, let $f_R$ be an arbitrary set of quorums and let $f_W$
|
||||||
|
be $\dual{f_R}$.
|
||||||
\TODO[mwhittaker]{%
|
|
||||||
Once we define coteries, we can define domination.
|
|
||||||
}
|
|
||||||
|
|
||||||
Let $\sigma_R: R \to [0, 1]$ and $\sigma_W: W \to [0, 1]$ be a discrete
|
Let $\sigma_R: R \to [0, 1]$ and $\sigma_W: W \to [0, 1]$ be a discrete
|
||||||
probability distribution over the read and write quorums of $Q$. We call
|
probability distribution over the read and write quorums of $Q$. We call
|
||||||
|
|
Loading…
Reference in a new issue