Also called highest random weight hashing. For each key, every node gets a score from hashing the key together with the node's name, and the node with the highest score holds the key. Adding a node only takes the keys it now scores highest for, and removing one only moves its own keys, each to its second-best node. There is no ring to keep and no virtual nodes, at the cost of computing one score per node on every lookup.
The table in the panel shows each node's score for six sample users. Each dot in a node is one user record, coloured by country. Add or remove a node and the records that change node glide to their new place, ringed so you can count them. A node turns red when it serves well above its share of requests.
1. Total data
2. Adding one node
3. Removing one node
4. Lookup work
Step 1 is the storage estimate from the back-of-the-envelope chapter of Alex Xu's System Design Interview, Vol. 1. Steps 2 and 3 follow from every node being equally likely to hold a key's top score. Step 4 counts the hashes rendezvous computes; the ring figure is log2 of its token count, for comparison.
Both score a fixed set of rows or partitions rather than every key, and keep the result as a table.
GitHub's engineering blog, written by the engineers who built GLB, and the Apache Ignite project's official documentation. Quoted phrases are short attributed quotations; everything else is described in our words.