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

Reply via email to