Project

General

Profile

Actions

Idea #2853

closed

[Keep] Use rendezvous hashing to assign blocks to servers in Go and Python SDKs

Added by Peter Amstutz almost 10 years ago. Updated over 9 years ago.

Status:
Resolved
Priority:
Normal
Assigned To:
Category:
Keep
Target version:
Start date:
11/11/2014
Due date:
Story points:
2.0

Description

See: http://en.wikipedia.org/wiki/Rendezvous_hashing

Some thoughts here from earlier technical discussions:

  • Rendezvous hashing makes it harder to perform weighted block distribution (we may be able to get around this by adding virtual storage nodes). Currently we do not expect to want weighted block distribution. Rather, we want distribution to be equal in steady state, and we want to minimize excess probes during rebalancing.
  • Computing N hashes per block transaction (one for each keep node or virtual node) seems acceptable as long as N isn't huge; the more precise you want your weighting to be, the more hashes you have to compute. Using a fast hash function would be helpful here.
  • If the map of storage nodes is tree structured, you can get O(log n) performance, e.g. compare group1 to group2, then follow the branch and compare group3 to group4, etc. However, this makes it impossible to add an arbitrary number of storage nodes with equal weight.

Subtasks 4 (0 open4 closed)

Task #4492: Fix tests that expect old probe orderResolvedTom Clegg11/11/2014Actions
Task #4491: Replace shuffling in Go SDKResolvedTom Clegg11/11/2014Actions
Task #4490: Replace shuffling in Python SDKResolvedTom Clegg11/11/2014Actions
Task #4495: Review 2853-rendezvousResolvedTom Clegg11/11/2014Actions
Actions

Also available in: Atom PDF