<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Distributed Systems on Johannes Karl Arnold</title><link>https://johannes.arnold.onl/page/notes/distributed-systems/</link><description>Recent content in Distributed Systems on Johannes Karl Arnold</description><generator>Hugo</generator><language>en-US</language><copyright>&amp;copy; Johannes Arnold.</copyright><lastBuildDate>Tue, 22 Jul 2025 08:47:49 +0200</lastBuildDate><atom:link href="https://johannes.arnold.onl/page/notes/distributed-systems/index.xml" rel="self" type="application/rss+xml"/><item><title>Consensus Algorithms</title><link>https://johannes.arnold.onl/page/notes/distributed-systems/consensus/</link><pubDate>Sun, 22 Oct 2023 00:00:00 +0000</pubDate><guid>https://johannes.arnold.onl/page/notes/distributed-systems/consensus/</guid><description>&lt;p&gt;Multiple independent processes need to agree on an outcome.&lt;/p&gt;
&lt;p&gt;A correct consensus protocol fulfills the following criteria:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;Termination&lt;/dt&gt;
&lt;dd&gt;every correct process decides some value&lt;/dd&gt;
&lt;dt&gt;Integrity&lt;/dt&gt;
&lt;dd&gt;if all processes proposed the same value (v), then any correct process must decide (v)&lt;/dd&gt;
&lt;dt&gt;Agreement&lt;/dt&gt;
&lt;dd&gt;Every &lt;em&gt;correct&lt;/em&gt; process must agree on the same value&lt;/dd&gt;
&lt;/dl&gt;</description></item><item><title>Faults and Failures</title><link>https://johannes.arnold.onl/page/notes/distributed-systems/failures/</link><pubDate>Sun, 22 Oct 2023 00:00:00 +0000</pubDate><guid>https://johannes.arnold.onl/page/notes/distributed-systems/failures/</guid><description>&lt;h1 id="types-of-faults" class="relative group"&gt;Types of Faults &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#types-of-faults" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;dl&gt;
&lt;dt&gt;Transient&lt;/dt&gt;
&lt;dd&gt;Occurs only once and then goes away&lt;/dd&gt;
&lt;dt&gt;Intermittent&lt;/dt&gt;
&lt;dd&gt;Irregular, comes and goes&lt;/dd&gt;
&lt;dt&gt;Permanent&lt;/dt&gt;
&lt;dd&gt;Occurs only once and then goes away. Continues to exist (until repair)&lt;/dd&gt;
&lt;/dl&gt;
&lt;h1 id="propagation" class="relative group"&gt;Propagation &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#propagation" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;dl&gt;
&lt;dt&gt;Fault&lt;/dt&gt;
&lt;dd&gt;the cause of an error&lt;/dd&gt;
&lt;dt&gt;Error&lt;/dt&gt;
&lt;dd&gt;part of a system’s state that may lead to a failure&lt;/dd&gt;
&lt;dt&gt;Failure&lt;/dt&gt;
&lt;dd&gt;a system does not operate according to its specifications&lt;/dd&gt;
&lt;/dl&gt;
&lt;ul&gt;
&lt;li&gt;Faults lead to errors, errors lead to failures.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="types-of-failures" class="relative group"&gt;Types of Failures &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#types-of-failures" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;dl&gt;
&lt;dt&gt;Crash failure&lt;/dt&gt;
&lt;dd&gt;A server halts, but is working correctly until it halts&lt;/dd&gt;
&lt;dt&gt;Omission failure&lt;/dt&gt;
&lt;dd&gt;A server fails to respond to incoming requests, fails to receive incoming messages or fails to send messages&lt;/dd&gt;
&lt;dt&gt;Timing failure&lt;/dt&gt;
&lt;dd&gt;A server&amp;rsquo;s response lies outside the specified time interval&lt;/dd&gt;
&lt;dt&gt;Response failure&lt;/dt&gt;
&lt;dd&gt;The server&amp;rsquo;s response is incorrect, value of the response is wrong, or server deviates from the correct flow of control&lt;/dd&gt;
&lt;dt&gt;Arbitrary (Byzantine) Failure&lt;/dt&gt;
&lt;dd&gt;A server may produce arbitrary responses at arbitrary times&lt;/dd&gt;
&lt;/dl&gt;
&lt;h1 id="k-fault-tolerance" class="relative group"&gt;(k)-Fault-Tolerance &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#k-fault-tolerance" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;h2 id="fail-silent" class="relative group"&gt;Fail-Silent &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#fail-silent" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;[
n=k+1
]
Replica produces either correct responses or no response at all.&lt;/p&gt;</description></item><item><title>Logical Time</title><link>https://johannes.arnold.onl/page/notes/distributed-systems/logical-time/</link><pubDate>Sun, 22 Oct 2023 00:00:00 +0000</pubDate><guid>https://johannes.arnold.onl/page/notes/distributed-systems/logical-time/</guid><description>&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Time is a canonical way of establishing ordering between events&lt;/li&gt;
&lt;li&gt;In distributed systems, time is not a global variable because machines have independently running clocks&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h1 id="lamport-timestamps" class="relative group"&gt;Lamport Timestamps &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#lamport-timestamps" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;p&gt;Propose we have two events, (A) and (B). Lamport timestamps allow for a &amp;ldquo;happens before&amp;rdquo; relationship, (A \to B.)&lt;/p&gt;
&lt;p&gt;Each node (p) maintains a counter (LT(p)), which gets incremented when (p) performs an action. When (p) sends a message, it includes (LT(p)). A recieving node (q) then updates its own counter to (\max{LT(p),~LT(q)})&lt;/p&gt;</description></item></channel></rss>