245 views • Distributed Systems
Reaching consensus is extremely important in any distributed network. For example, we cannot have two data nodes in a cluster where one thinks that
$1000 while the other thinks it is
So, we need the nodes to talk to each other and reach a consensus and converge on the true value of
price. Reaching consensus is easy when there are no failures - no network failures, or process failures.
Reaching a consensus
The core idea of the Exponential Information Gathering Algorithm is to gather a large amount of information from the network and then apply some decision rules to reach a consensus.
EIG algorithms require an EIG Tree that is like a Trie and is constructed level by level. If there are
n nodes in the network and the level of the tree is
k then the leaf of the tree contains all k-length permutations of
If a node
a received a message from a path
b, c, d then the incoming message (value) is stored along the path
d at the node
Thus, at each level of the tree, the number of children of each node reduces by 1. The root of the tree is labeled EMPTY, and it has
n children, say A, B, and C.
Each node in the next level will have 2 children. A will contain
B will contain
C will contain
CB. Thus we see at level 2 the leaves contain all 6 2-length permutations of A, B, and C.
We assume at max
f nodes would fail and hence the algorithm runs for
f + 1 rounds. In each round, a new level of EIG Tree is constructed. Each node independently constructs the level but every single node will have formed the exact same EIG Tree.
i, sends its value to the entire network including itself. Upon receiving the value
j, the nodes update their own trees and add nodes
tree[j] = v.
At the end of round 1, every node will have an EIG tree of depth 1.
i, sends all pairs
(x, v) from the
k - 1 level in the network where
i is not in
x. This would lead to the construction of the permutation tree.
f + 1 rounds, each node will have the exact same copy of the EIG Tree of depth
f + 2.
The algorithm stops after the
f + 1 rounds, and each node simply traverses through the entire EIG Tree to find all distinct values it holds.
If the number of values is 1, the node decides that as the final value. If the distinct values are many, then the node may choose the default value.
This decision-making is use-case specific, so defaulting to the old value can mean that the transaction is aborted and the node is reverting to the old value.
Depending on the usecase, we may choose another decision strategy like picking the smallest value or the largest value or the oldest value, or the newest value.
So long as we have a total ordering of the values, we can define our own decision strategy.
If you like what you read subscribe you can always subscribe to my newsletter and get the post delivered straight to your inbox. I write essays on various engineering topics and share it through my weekly newsletter.
618 views • 28 likes • 2022-09-16
Distributed Transactions are the heart and soul of Distributed Systems and getting all the participating nodes to agree ...
379 views • 16 likes • 2022-09-14
Byzantine Agreement is an important problem to address in a Distributed Network. It is all about being tolerant of the n...
245 views • 6 likes • 2022-09-12
Exponential Algorithms have to be the worst possible way to solve Distributed Consensus; but are they really that bad? ...
432 views • 14 likes • 2022-09-09
Reaching a consensus is extremely critical in a Distributed System as we would have situations day-in and day-out where ...
A set of courses designed to make you a better engineer and excel at your career; no-fluff, pure engineering.
Being a passionate engineer, I love to talk about a wide range of topics, but these are my personal favourites.
Arpit's Newsletter read by 17000+ engineers
🔥 Thrice a week, in your inbox, an essay about system design, distributed systems, microservices, programming languages internals, or a deep dive on some super-clever algorithm, or just a few tips on building highly scalable distributed systems.
Powered by this tech stack.