2.4 KiB
Distribution Crate — Design Notes
Design decisions behind non-obvious mechanisms in the distribution crate.
Transmit Budget (dissemination.rs)
The transmit budget controls how many times a membership update gets piggybacked onto protocol messages before being evicted from the dissemination queue.
It is computed as Λ * ceil(log₂(n)) where Λ (lambda) is a configurable multiplier
and n is the cluster size. The logarithmic scaling ensures that in a 10-node cluster
each update is sent ~4Λ times, while in a 1000-node cluster it gets ~10Λ sends — enough
redundancy for epidemic-style convergence without flooding the network.
Each time an update is piggybacked onto a Ping or Ack message, its remaining budget decrements by 1. When the budget reaches zero the update is evicted from the queue. Higher-priority updates (e.g. deaths) are piggybacked first, so critical state changes propagate faster than routine alive announcements.
Re-Replication (kademlia/repair.rs — RepairQueue)
In the Kademlia directory, each actor's location entry is STOREd on the r closest nodes
(by XOR distance to the actor address). When one of those replica holders dies, the
replication factor drops below r.
Re-replication restores the target replication factor: surviving nodes that detect the death extract all directory entries the dead node held and re-STORE them on the next-closest node that didn't already have a copy.
In practice: RepairQueue::on_node_death() pulls all entries authored by the dead node
from the local DirectoryShard and queues them. The node's tick loop drains the queue
and issues STORE RPCs to the new r-closest nodes, restoring the replication invariant.
Periodic Republish (kademlia/repair.rs — RepublishTracker)
Topology churn — nodes joining and leaving — gradually shifts which nodes are "r-closest" to a given actor address in XOR space. Without periodic republishing:
- A new node that joins closer to an actor than existing replicas would never learn about that actor's entry.
- Entries could become stranded on nodes that are no longer among the closest, making lookups slower or requiring more hops.
RepublishTracker has each node periodically re-STORE the directory entries for its own
locally-spawned actors at a configurable interval. This ensures entries migrate to the
current r-closest nodes as the topology evolves, without waiting for a failure event to
trigger repair.