ExRingRing

A consistent hash ring implementation in Elixir with Clean Architecture.

⚠️ EXPERIMENTAL / UNDER ACTIVE DEVELOPMENT ⚠️

It is currently in early development and NOT READY FOR PRODUCTION USE.

Features

Installation

def deps do
[
{:ex_ring_ring, "~> 0.1.0"}
]
end

Quick Start

# Create nodes and a ring
nodes = ExRingRing.list_to_nodes([:a, :b, :c, :d, :e])
ring = ExRingRing.make(nodes)
# Find which node owns an item
{:ok, node} = ExRingRing.find_node(ring, "my_key")
node.key # => :a (deterministic)
# Collect N nodes for replication
nodes = ExRingRing.collect_nodes(ring, "my_key", 3)
# Add and remove nodes at runtime
ring = ExRingRing.add_node(ring, ExRingRing.Domain.Entities.Node.make(:f))
ring = ExRingRing.remove_node(ring, :c)

Guides

License

Apache License 2.0