Author: Michael Rogers Date: To: tech Subject: [Tech] Misrouting
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.