Thought experiment: we have three peers: one fast, one medium, one slow. We answer roughly 1/4 of incoming requests locally, and forward roughly 1/4 to each peer. How many requests should we accept?
If we slow down to the speed of the slowest peer and our neighbours do likewise, the slowest node will determine the speed of the whole network. If we exclude nodes below a certain speed, we waste their resources and don't offer them anonymity. If we misroute whenever a peer is busy and run at the speed of the fastest peer, one ubernode can attract a large share of the network's traffic. We need a compromise - a limited degree of misrouting. Let's define the imbalance factor i = r_max / r_natural, where r_max is the maximum rate at which a peer is allowed to accept requests, and r_natural is the arrival rate of requests that would ideally be routed to that peer. The value of i determines how much misrouting we will allow. Let's say i = 2. In the example above, r_natural is 1/4 for all peers, so r_max is 1/2, meaning that no peer should be given more than 1/2 of the requests on average, no matter how many it's willing to accept. This allows us to run somewhat faster than the slow peer, and our neighbours can run somewhat faster than us, etc - a few slow peers don't drag down the whole network. Any thoughts? Cheers, Michael
