Skip to content

Latest commit

 

History

History
65 lines (44 loc) · 2.42 KB

README.md

File metadata and controls

65 lines (44 loc) · 2.42 KB

Dragonfly Hashring

GitHub release LICENSE

Consistent hash ring with virtual nodes shared by the Dragonfly scheduler, the Dragonfly client and the Dragonfly SDKs. Positions are SipHash-2-4 values with a zero key, so the Go module and the Rust crate place keys bit-for-bit identically and every component selects the same seed peer or scheduler for the same task.

Packages

Package Description
d7y.io/hashring Go module for scheduler and SDK
dragonfly-hashring Rust crate for client and SDK

Usage

Go:

import "d7y.io/hashring"

ring := hashring.New()
ring.Add("default-seed-client-0")
ring.Add("default-seed-client-1")

vnode, _ := ring.Get(taskID)
name := vnode.Name()

Rust:

use dragonfly_hashring::VNodeHashRing;

let mut ring = VNodeHashRing::new();
ring.add("default-seed-client-0".to_string());
ring.add("default-seed-client-1".to_string());

let name = ring.get(&task_id).unwrap().name();

Both constructors use DefaultVNodesPerNode virtual nodes per node, pass hashring.WithVNodesPerNode(n) or call VNodeHashRing::with_vnodes_per_node(n) to override it.

Documentation

You can find the full documentation on the d7y.io.

Community

Join the conversation and help the community grow. Here are the ways to get involved:

Contributing

You should check out our CONTRIBUTING and develop the project together.