It's me again asking about hashing again almost 20 years later. I'm
curious how this new feature would be received: a new hashing type,
rendezvous hashing (aka HRW, "highest random weight") alongside
map-based and consistent.

We want a way to bound a given tenant's traffic to a fixed, small
subset of backend servers, irrespective of what fails or scales in the
backend as a means for containing the tenant.

Concretely: with N servers and a per-tenant hash key, rank the
configured server list independently of health, and let a tenant only
ever land on the top Y of that ranking. We would allow health/load to
filter within that fixed set, but must never expand outside it. So
this would pair well with hash-balance-factor settings. The rough
shape I have in mind is a new directive, hash-candidates <count>,
valid only alongside hash-type rendezvous, where <count> sets Y: how
many top-ranked servers from a given key's fixed candidate set.

Consistent hashing doesn't give this property at any virtual node
count. Its fallback path (walking the ring past an unhealthy node) is
health dependent by construction, so there's no fixed, addressable
candidate set per key to point to and say "this tenant can never leave
this set" which is why I think this is worth a new algorithm rather
than tweaks to the existing one.

Impact-wise, this would not be a performance win over chash. One would
only reach for this when they want the containment vs request
distribution:
 - request path: O(N) per lookup (score every configured server),
versus chash's O(log M) tree descent. chash wins here as N grows.
Again only use rendezvous for its containment property.
 - server add/remove: O(1), versus chash's O(m_s) removal / O(m_s log
M) insertion (i.e. no tree to touch at all).

We would trade slower per-request lookup for zero membership-update
cost and a fixed, enumerable per-tenant candidate set. I'd like to get
some feedback on whether that tradeoff is worth a new lb_ops module
and a widened hash-type field.

I'm happy to follow up with more details on complexity and a rough
sketch design (candidate-set directive, backup-server model options,
retry/redispatch interaction) but wanted to gauge interest and
receptiveness to this new feature.


Reply via email to