Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
wentorai avatar

Distributed Systems Guide

  • 2 installs
  • 269 repo stars
  • Updated June 19, 2026
  • wentorai/research-plugins

Research and design distributed systems covering consistency models, consensus algorithms, replication, and CAP/PACELC tradeoffs.

About

Covers distributed systems theory and patterns: consistency models, consensus (Raft), replication, fault tolerance, and CAP theorem classification of real systems. A developer uses it when researching or designing distributed systems.

  • Presents a consistency hierarchy and CAP/PACELC classification of real databases
  • Includes a Raft consensus implementation sketch

Distributed Systems Guide by the numbers

  • 2 all-time installs (skills.sh)
  • Ranked #3,774 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
  • Data as of Aug 1, 2026 (Skillselion catalog sync)
npx skills add https://github.com/wentorai/research-plugins --skill distributed-systems-guide

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs2
repo stars269
Last updatedJune 19, 2026
Repositorywentorai/research-plugins

What it does

Research and design distributed systems covering consistency models, consensus algorithms, replication, and CAP/PACELC tradeoffs.

Files

SKILL.mdMarkdownGitHub ↗

Distributed Systems Guide

A skill for researching and designing distributed systems, covering consensus algorithms, replication strategies, consistency models, fault tolerance, and performance analysis. Provides theoretical foundations and practical implementations relevant to systems research.

Consistency Models

Consistency Hierarchy

Strongest
  |  Linearizability (atomic, real-time ordering)
  |  Sequential consistency (program order respected)
  |  Causal consistency (causally related ops ordered)
  |  PRAM / FIFO consistency (per-process order)
  |  Eventual consistency (converges if updates stop)
Weakest

CAP Theorem and PACELC

The CAP theorem states that during a network partition, a distributed system must choose between consistency and availability:

SystemPartition BehaviorNormal BehaviorClassification
ZooKeeperConsistent (sacrifice A)Low latency, consistentCP / PC/EC
CassandraAvailable (sacrifice C)Low latency, eventualAP / PA/EL
SpannerConsistent (sacrifice A)Higher latency, consistentCP / PC/EC
DynamoDBConfigurable per-readTunable consistencyAP or CP
CockroachDBConsistent (sacrifice A)SerializableCP / PC/EC

Consensus Algorithms

Raft Implementation Sketch

from enum import Enum
from dataclasses import dataclass, field
import random

class NodeState(Enum):
    FOLLOWER = "follower"
    CANDIDATE = "candidate"
    LEADER = "leader"

@dataclass
class LogEntry:
    term: int
    index: int
    command: str

@dataclass
class RaftNode:
    """
    Simplified Raft consensus node for educational purposes.
    Implements leader election and log replication state machine.
    """
    node_id: str
    state: NodeState = NodeState.FOLLOWER
    current_term: int = 0
    voted_for: str = None
    log: list = field(default_factory=list)
    commit_index: int = 0
    last_applied: int = 0

    # Leader state
    next_index: dict = field(default_factory=dict)
    match_index: dict = field(default_factory=dict)

    def start_election(self, peers: list[str]) -> dict:
        """Transition to candidate and request votes."""
        self.state = NodeState.CANDIDATE
        self.current_term += 1
        self.voted_for = self.node_id

        last_log_index = len(self.log) - 1 if self.log else -1
        last_log_term = self.log[-1].term if self.log else 0

        return {
            "type": "RequestVote",
            "term": self.current_term,
            "candidate_id": self.node_id,
            "last_log_index": last_log_index,
            "last_log_term": last_log_term,
        }

    def handle_vote_request(self, term: int, candidate_id: str,
                              last_log_index: int,
                              last_log_term: int) -> dict:
        """Process a RequestVote RPC."""
        if term < self.current_term:
            return {"term": self.current_term, "vote_granted": False}

        if term > self.current_term:
            self.current_term = term
            self.state = NodeState.FOLLOWER
            self.voted_for = None

        # Check if candidate's log is at least as up-to-date
        my_last_term = self.log[-1].term if self.log else 0
        my_last_index = len(self.log) - 1 if self.log else -1

        log_ok = (last_log_term > my_last_term or
                  (last_log_term == my_last_term and
                   last_log_index >= my_last_index))

        vote_granted = (
            (self.voted_for is None or self.voted_for == candidate_id)
            and log_ok
        )

        if vote_granted:
            self.voted_for = candidate_id

        return {"term": self.current_term, "vote_granted": vote_granted}

    def append_entry(self, command: str) -> LogEntry:
        """Leader appends a new entry to its log."""
        entry = LogEntry(
            term=self.current_term,
            index=len(self.log),
            command=command,
        )
        self.log.append(entry)
        return entry

Paxos vs Raft vs PBFT Comparison

AlgorithmFault ModelToleranceRoundsComplexity
PaxosCrash faultsf < n/22 (normal)Difficult to implement correctly
RaftCrash faultsf < n/22 (normal)Designed for understandability
PBFTByzantine faultsf < n/33O(n^2) message complexity
HotStuffByzantine faultsf < n/33O(n) with pipelining

Replication Strategies

State Machine Replication

class ReplicatedStateMachine:
    """
    State machine replication with configurable consistency.
    Demonstrates read/write quorum intersection for correctness.
    """

    def __init__(self, n_replicas: int, read_quorum: int = None,
                 write_quorum: int = None):
        self.n = n_replicas
        self.R = read_quorum or (n_replicas // 2 + 1)
        self.W = write_quorum or (n_replicas // 2 + 1)

        # Quorum intersection guarantees: R + W > N
        assert self.R + self.W > self.n, (
            f"Quorum intersection violated: R({self.R}) + W({self.W}) "
            f"must be > N({self.n})"
        )

        self.replicas = [{} for _ in range(n_replicas)]
        self.version_clock = 0

    def write(self, key: str, value: str) -> dict:
        """Write to W replicas."""
        self.version_clock += 1
        # Select W replicas (in practice, based on availability)
        targets = random.sample(range(self.n), self.W)
        for i in targets:
            self.replicas[i][key] = (value, self.version_clock)

        return {
            "key": key,
            "version": self.version_clock,
            "acked_by": len(targets),
            "quorum_met": True,
        }

    def read(self, key: str) -> dict:
        """Read from R replicas, return latest version."""
        targets = random.sample(range(self.n), self.R)
        responses = []
        for i in targets:
            if key in self.replicas[i]:
                responses.append(self.replicas[i][key])

        if not responses:
            return {"key": key, "value": None, "found": False}

        # Return the value with the highest version
        latest = max(responses, key=lambda x: x[1])
        return {
            "key": key,
            "value": latest[0],
            "version": latest[1],
            "found": True,
        }

Clock Synchronization and Ordering

Vector Clocks

class VectorClock:
    """Vector clock for tracking causality in distributed systems."""

    def __init__(self, process_id: str, processes: list[str]):
        self.pid = process_id
        self.clock = {p: 0 for p in processes}

    def increment(self):
        """Local event: increment own counter."""
        self.clock[self.pid] += 1

    def send(self) -> dict:
        """Prepare clock for sending with a message."""
        self.increment()
        return dict(self.clock)

    def receive(self, other_clock: dict):
        """Merge received clock: element-wise max, then increment."""
        for p in self.clock:
            self.clock[p] = max(self.clock[p], other_clock.get(p, 0))
        self.increment()

    def happened_before(self, other: dict) -> bool:
        """Check if this clock happened-before other (causal ordering)."""
        return (all(self.clock[p] <= other.get(p, 0) for p in self.clock) and
                any(self.clock[p] < other.get(p, 0) for p in self.clock))

Performance Analysis

Latency and Throughput Modeling

Key metrics for evaluating distributed systems:

  • Tail latency (p99, p999): Critical for real-world SLAs; often dominated by slow replicas
  • Throughput under contention: How performance degrades with conflict rate
  • Scalability: Linear vs sub-linear throughput increase with added nodes
  • Recovery time: Time to restore consistency after node failure

Key Research Papers

  • Lamport, L. (1998). The Part-Time Parliament (Paxos). ACM TOCS.
  • Ongaro, D. and Ousterhout, J. (2014). In Search of an Understandable Consensus Algorithm (Raft). USENIX ATC.
  • Corbett, J. et al. (2013). Spanner: Google's Globally-Distributed Database. ACM TOCS.
  • DeCandia, G. et al. (2007). Dynamo: Amazon's Highly Available Key-value Store. SOSP.

Tools and Frameworks

  • etcd / ZooKeeper: Production consensus stores for coordination
  • Jepsen: Distributed systems correctness testing framework
  • TLA+ / PlusCal: Formal specification and model checking
  • ns-3 / OMNeT++: Network simulation for distributed protocols
  • gRPC / Cap'n Proto: High-performance RPC frameworks
  • FoundationDB: Multi-model distributed database with strong consistency

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.