Definition · RebalanceA rebalance moves a fraction m of the stored data between nodes, because the shard count changed, because a node was added or lost, or because the placement became uneven. The throttle B is the bandwidth the copy is allowed to use, and it is a deliberate limit rather than a property of the hardware: the whole reason to set one is that the node has other work to do.
Where m comes from is the earlier lesson. Under mod N assignment a growth step moves N/(N+1) of the keys — at seven shards going to eight, 87.50% of the dataset — and on a ring it moves 1/(N+1), or 12.50%. The 25% in the lab's defaults is a middling figure that could come from either a ring on a small fleet or a deliberate re-spread; what this lesson does is turn any such fraction into hours and a utilisation.
m = 25%, D = 48 TB, B = 200 MB/s, node budget 800 MB/s
λ at the node = 5 000 /s, service rate μ = 8 000 /s
bytes to move = 0.25 × 48 TB = 12.00 TB
duration = 12 × 10¹² / (200 × 10⁶) = 60 000 s = 16 h 40 min
capacity taken = 200/800 = 1/4 = 25.00%
service during = 8 000 × (1 − 1/4) = 6 000 /s
ρ before = 5 000/8 000 = 62.50%
ρ during = 5 000/6 000 = 83.33%
M/M/1 wait W = 1/(μ − λ)
before = 1/(8 000 − 5 000) = 0.333 ms
during = 1/(6 000 − 5 000) = 1.000 ms 3.00×
The wait figures are not new arithmetic. They are “The M/M/1 Queue” evaluated at two utilisations, and the reason a 21-point rise in ρ triples the wait is the knee that “The Knee: Response Time vs Utilisation” describes: the response time rises without bound as ρ approaches 1, so equal steps in utilisation are not equal steps in latency. A rebalance is a decision to sit further up that curve for a measured number of hours.
Turning the throttle
the same move, at six throttles
throttle duration capacity taken ρ during wait
50 MB/s 2 d 18 h 40 min 6.3% 66.67% 0.400 ms
100 MB/s 1 d 9 h 20 min 12.5% 71.43% 0.500 ms
200 MB/s 16 h 40 min 25.0% 83.33% 1.000 ms
400 MB/s 8 h 20 min 50.0% past capacity
800 MB/s 4 h 10 min 100.0% past capacity
The fourth row is the one to look at. Halving the window from sixteen hours to eight takes half the node's transfer budget, which leaves it serving 4 000 /s against an arrival rate of 5 000 /s. That is not a slower system; it is a queue that grows without bound for as long as the copy runs, and “Transient Overload and Draining the Backlog” is what happens afterwards. The throttle has a hard ceiling and it is reached well before the hardware's.
Example · The same rebalance, priced two ways“Moving 12 TB takes about seventeen hours” is the version that gets said in a planning meeting. The version that describes what will actually happen is “for sixteen hours and forty minutes, every node's utilisation is 83.33% instead of 62.50% and the queueing wait is three times normal” — and if there is a latency objective, that is the sentence it has to be checked against. The duration is the easy half of the cost and it is the half that gets reported.
What this makes cheaper elsewhere
Run the arithmetic on the two fractions from “Rehashing When N Changes” and the argument for consistent hashing stops being theoretical. Growing a seven-shard fleet under mod N moves 7/8 of 48 TB — 42 TB, which at 200 MB/s is 2 d 10 h 20 min at ρ = 83.33% throughout. The same growth step on a ring moves 1/8, or 6 TB, which is eight hours and twenty minutes. The identity 7/8 + 1/8 = 1 is, in the end, a statement about how many days of elevated latency a growth step costs.
It also prices the choice of V from “Virtual Nodes” and the decision to reshard from “Hot Keys and Salting”. A rebalance is the operation that every structural change on this course eventually has to pay for, which is why it is worth computing before the change rather than after it — the duration and the utilisation are both available from numbers you already have.