Hey all,

Right now the balancer only supports decision-making on continuous scales;
these scales are represented as cost functions. Often there is no
continuity to the nature of the decisions the balancer must make, though —
for example, "should this region replica be colocated with these others?"
is a yes or no question.

These cost functions also are not evaluated in a vacuum — raising the
multiplier of one implicitly makes all others less important. When making
discrete decisions, it does not make sense to have this implicit
deprioritization, particularly if your cluster is configured appropriately
(i.e., it has more racks than replicas, etc). Further, comparing something
like "replica host colocation cost" to "read request cost" is a real
apples:oranges situation... it forces you to find some magic incantation of
balancer costs that will ultimately keep the balance triggering when
necessary, but not superfluously. I think this is a tough situation to put
operators in; better would be if we could just solve for something like
replica distribution, and *then* balance based only on the more fuzzy
things like read cost.

I also believe that we could achieve better reliability via new features if
the balancer had such a mechanism for making clear, binary decisions ahead
of cost-based balancing. It would make it possible, for example, to isolate
tables from one another without the complexity overhead and resource waste
of managing RSGroups. This may technically be possible today via cost
functions, but you would need a rocket scientist to manage your balancer,
and most don't have one on staff.

I've written up a larger proposal here:
https://docs.google.com/document/d/1jA8Ghs86v7b-53j5DcsdbPnOXxbHjewkIBFi1E4S1pY/edit?usp=sharing
and have a corresponding pull request (
https://github.com/apache/hbase/pull/6651) which introduces a framework for
what I've called "balancer conditionals", as well as the first conditional
implementation which will distribute replicas throughout a cluster
(considering all replicas, including secondary+secondary colocation, which
is not supported in the current cost function based approach).

Thank you for reading, I am curious to know others' thoughts on this
subject!
Ray Mattingly

Reply via email to