To facilitate load balancing, nodes estimate their own load and the loads of other nodes in the system. Each node estimates its current load using a 1-second moving window which tracks bandwidth usage. While we could use more sophisticated techniques, we found them unnecessary since the rate of update traffic in Quake II was nearly constant ([18] report similar findings for a different game). Nodes periodically exchange load information with those which they are maintaining replicas with.
In addition, we use Mercury to enable nodes to discover ``lightly
loaded'' nodes by adding an extra Mercury hub with a load
attribute. Nodes periodically publish load information to Mercury and
subscribe when they wish to discover nodes with load a particular
value. Load publications are small and infrequent compared to game
traffic, so overhead is low for small or medium group sizes; for
larger groups, an anycast primitive similar to that used
in [13] could be used. Mercury can also provide
information about the average load in the system. We can use this
information to adaptively set the
and
thresholds. For example, we currently set them based on a window
around the estimated average load.