В связи с этим написал эмулятор
<?php
header('Content-type: text/plain');
$providers = array('prov A', 'prov B', 'prov C');
$counters = array(
'client' => 0,
'prov A' => 0,
'prov B' => 0,
'prov C' => 0);
// CURRENT CLIENT'S PROVIDER
$cur_prov = 'prov A';
set_time_limit(0);
for ($i = 1; $i <= 100000; ++$i) {
// each provider has right to fail
foreach ($providers as $prov) {
// if shit happens
if (mt_rand(1, 10) == 5) {
$counters[$prov]++;
// and our client is on THIS provider
if ($cur_prov == $prov) {
$counters['client']++;
// client looking for better provider
while (TRUE) {
// reasonable choice
$x = mt_rand(0, count($providers)-1);
$next_prov = $providers[$x];
if ($cur_prov != $next_prov) {
$cur_prov = $next_prov;
break;
}
}
}
}
}
}
// Results
var_export($counters);
100тыщ достаточно большое число чтобы статистические законы работали.