Расчёт динамической скорости пользователей
код #2 расширенный алгоритм
Цель:
Поделить свободный канал между пользователями, стараясь не вызывать перегрузок. Желательно что бы пользователи на тестах скорости видели запредельные скорости.
Решение:
Средняя скорость загрузки за 1 минуту — обьем поделен на расчётное время в текущей сессии.
Эмпирически было установлено что если пользователь за 1-у минуту не перекачивает 19.8-24Мбайт, то он пользуется тестом скорости ( speedtest), 330-450Кбайт.
Так же такая загрузка (даже меньше) при обычном и даже активном веб-сёрфинге (тестировал Я — непрерывно открывал закладки в течении 1-ой минуты).
У Меня пользователи которые получают «гарантированную» скорость и нарезаются динамически используют один канал.
Алгоритм:
Классифицируем пользователей на 4-и класса:
- red-те кто непрерывно сосёт трафик
- yellow-те кто качают, но не делали этого слишком активно раньше
- brown-те кто не качают в данный момент ( не достигают порога, но непрерывно сосёт трафик )
- green-те кто не качают ( не достигают порога)
Это нужно что бы каждому человеку выставить нужную скорость
<!--?php define("HOST", "localhost"); define("DB", "test_db"); define("USER", "user"); define("PASS", "password"); try { $dbh = new PDO('mysql:host='.HOST.';dbname='.DB.'', USER, PASS); } catch (PDOException $e) { print "Error!: " . $e--->getMessage() . ""; die(); } ?>
SQL:
-- -- Структура таблицы `speed_counter` -- DROP TABLE IF EXISTS `speed_counter`; CREATE TABLE IF NOT EXISTS `speed_counter` ( `ip` INT(50) NOT NULL, `in_last` BIGINT(20) NOT NULL, `out_last` BIGINT(20) NOT NULL, `time_last` BIGINT(20) NOT NULL, `in_speed` FLOAT(20,2) NOT NULL, `out_speed` FLOAT(20,2) NOT NULL, `in_speed2` FLOAT(20,2) NOT NULL, `out_speed2` FLOAT(20,2) NOT NULL, `in_load` FLOAT(20,2) NOT NULL, `out_load` FLOAT(20,2) NOT NULL, `interface` VARCHAR(12) NOT NULL, `speed_car_in` BIGINT(20) NOT NULL, `speed_car_out` BIGINT(20) NOT NULL, UNIQUE KEY `ip` (`ip`) ) ENGINE=MyISAM; -- -- Дамп данных таблицы `speed_counter` --
Код, engine.php:
<?php /* * функция чтения массива * array() */ function read_speed_array(&$dbh){ $sth=$dbh->prepare('SELECT * from `speed_counter`'); $sth->setFetchMode(PDO::FETCH_ASSOC); $sth->execute(); $ips=array(); while($row=$sth->fetch()){ $ips[$row['ip']]=array( 'in_last'=$row['in_last'], 'in_last2'=$row['in_last2'], 'out_last'=$row['out_last'], 'out_last2'=$row['out_last2'], 'in_speed'=$row['in_speed'], 'out_speed'=$row['out_speed'], ); } } /* * функция расчёта коэффициентов скорости из массива * array() */ function calc_coefficient_speed_array(){ } /* * функция расчёта скорости из массива * array() */ function calc_speed_array(){ } ?>
После столь продолжительного копания в моём коде рекомендую посмотреть интересный ресурс шарж с фотографии, шарж с фото.
не знаю когда закончу
но напишу