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.