I have an array of mirrors that I am using to help us distribute some of our Free Software releases. Currently, when I output the links on our download page, I am using something like this:
my @mirrors = (
'http://foo.mirror.org',
'http://www.users-domain.com/proj/foo',
'http://osdn.dl.sf.net/sourceforge/foo',
'http://unc.dl.sf.net/sourceforge/foo',
'http://umn.dl.sf.net/sourceforge/foo',
'http://heanet.dl.sf.net/sourceforge/foo',
'http://aleron.dl.sf.net/sourceforge/foo',
);
print $cgi->a({-href =>
"$mirrors[rand @mirrors]/$file-$stable.rpm",
-title =>"$stable RPM"}, 'rpm');
So far, this works for randomizing the links we have on our download page. What I'd like to do though, as some mirrors have a throttling limit and a monthly bandwidth quota enforced by their providers, is find a way to "weight" the randomization, so that some of the elements in @mirrors are chosen "more often" than the others. In the example pseudocode above, the Sourceforge mirrors would be weighted higher than the users' home DSL connections who are helping out by being "part-time" mirror sites.
What is the best way to go about handling this?