Расчёт динамической скорости пользователей

код #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();
}
?&gt;

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(){
}
?>

После столь продолжительного копания в моём коде рекомендую посмотреть интересный ресурс шарж с фотографии, шарж с фото.


Comments to Расчёт динамической скорости пользователей

  • не знаю когда закончу :( но напишу :)

    wel 26.07.2010 18:29 Ответить

Leave a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Загрузка...
Menu Title