Benedict created CASSANDRA-7032:
-----------------------------------

             Summary: Improve vnode allocation
                 Key: CASSANDRA-7032
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-7032
             Project: Cassandra
          Issue Type: Improvement
          Components: Core
            Reporter: Benedict
             Fix For: 3.0
         Attachments: TestVNodeAllocation.java

It's been known for a little while that random vnode allocation causes hotspots 
of ownership. It should be possible to improve dramatically on this with 
deterministic allocation. I have quickly thrown together a simple greedy 
algorithm that allocates vnodes efficiently, and will repair hotspots in a 
randomly allocated cluster gradually as more nodes are added, and also ensures 
that token ranges are fairly evenly spread between nodes (somewhat tunably so). 
The allocation still permits slight discrepancies in ownership, but it is bound 
by the inverse of the size of the cluster (as opposed to random allocation, 
which strangely gets worse as the cluster size increases). I'm sure there is a 
decent dynamic programming solution to this that would be even better.

If on joining the ring a new node were to CAS a shared table where a canonical 
allocation of token ranges lives after running this (or a similar) algorithm, 
we could then get guaranteed bounds on the ownership distribution in a cluster. 
This will also help for CASSANDRA-6696.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to