We evaluate our heuristics using three metrics:
For brevity, we use the terms core size, load, and coverage to indicate average core size, maximum load, and average coverage, respectively. Where we do refer to these terms in the context of a particular host, we say so explicitly.
A good heuristic will determine cores with small size, low load, and
high coverage. Coverage is the most critical metric because it
determines how well it does in guaranteeing service in the event of a
catastrophe. Coverage may not equal 1 either because there was no
host that was available to cover an attribute
of
, or
because the heuristic failed to identify such a host
. As shown in the
following sections, the second case rarely happens with our
heuristics.
Note that, as a single number, the coverage of a given Core does
not fully capture its resilience. For example, consider host
with two attributes and host
with 10 attributes. If
Core
covers only one attribute, then Core
has a coverage of 0.5. If Core
has the same coverage,
then it covers only 5 of the 10 attributes. There are more ways to
fail all of the hosts in Core
than those in
Core
. Consequently, we also use the number of cores
that do not have a coverage of 1.0 as an extension of the coverage
metric.