Биллинговая система Nodeny

Главная категория => Разработка => Тема начата: Efendy от 21 Августа 2009, 12:45:29



Название: Совершенствование динамического шейпера
Отправлено: Efendy от 21 Августа 2009, 12:45:29
Динамический шейпер теперь может работать по времени. Что есть динамическйи шейпер? Это предоставление определенной скорости в зависимости от потребленного клиентом трафика. Например, особо наглым качальщикам постепенно ее понижать ее.

Добавлена фича, учитывающая время суток. Причем может работать как отдельно так и совместно с контролем трафика. Например в тарифе в поле "скрипт" (это уже есть в новой версии) указываются такие строки:

Цитировать
<time 0,1,2,3,4>0:0-10000
<time 18,19,20>0:20000-512:50000-256:100000-128
<time 21>0:20000-400:50000-300
0:0-1024

Как расшифровываются эти строки? В теге <time> указывается час суток, в которые будет действовать данная строка. Часы перечисляются через запятую. Так первое правило будет срабатывать с 0 до 4 часа ночи. Далее все идет по правилам динамического шейпа как ранее.
Т.е:

с 0 до 4 часа ночи каждый абонент тарифа получит 10000 кбит скорости вне зависимости от рафика
с 18 до 20 - скорость указанную в тарифе, но при превышении 20 Гб скорость будет установлена в 512 кбит, 50 Гб - 256 кбит, 100 гб - 128 кбит
в 21 час вереча будет работать правило: скорость тарифа, но при превышении 20Гб - 400 кбит, 50гб -300 килобит
во все остальное время клиентам будет выдана скорость 1024 кбит вне зависимости от трафика.

Отдельно хочу отметить, что фичу заказал один из клиентов и теперь будет получать 50% от продаж этой фичи


Название: Re: Совершенствование динамического шейпера
Отправлено: elite от 21 Августа 2009, 16:55:28
Ну тогда было бы интересно, чтобы с 0 до 4 часа ночи трафик не учитывался ;)


Название: Re: Совершенствование динамического шейпера
Отправлено: Efendy от 21 Августа 2009, 17:12:27
это надо ядро править. Здесь же речь о noserver


Название: Re: Совершенствование динамического шейпера
Отправлено: elite от 21 Августа 2009, 17:16:17
это надо ядро править. Здесь же речь о noserver
ну а так получается, что ночью народ накачает без ограничения скорости, а днем скорость хреновая будет - тоже нехорошо )
а что по поводу моего ТЗ на динамический шейпер?


Название: Re: Совершенствование динамического шейпера
Отправлено: Efendy от 21 Августа 2009, 19:01:19
а что по поводу моего ТЗ на динамический шейпер?
шейпить разные направления? Так оно и без динамического шейпит только первое


Название: Re: Совершенствование динамического шейпера
Отправлено: goletsa от 21 Августа 2009, 19:54:31
это надо ядро править. Здесь же речь о noserver
ну а так получается, что ночью народ накачает без ограничения скорости, а днем скорость хреновая будет - тоже нехорошо )
а что по поводу моего ТЗ на динамический шейпер?
При верном выставлении лимитов все нормально выходит.

Тех кто качает терабайтами единицы.


Название: Re: Совершенствование динамического шейпера
Отправлено: elite от 21 Августа 2009, 19:55:08
а что по поводу моего ТЗ на динамический шейпер?
шейпить разные направления? Так оно и без динамического шейпит только первое
нет
динамический шейпер, который анализирует трафик за последние Х мин, если средняя скорость за этот промежуток времени превышает Y Мбит/с, то шейпер уменьшает скорость абоненту, когда абонент перестает качать, скорость восстанавливается


Название: Re: Совершенствование динамического шейпера
Отправлено: Efendy от 21 Августа 2009, 20:07:34
Для этого надо модифицировать ядро - аккумулировать этот трафик. Я уже рассказывал, что трафик за сутки формируется по окончании этих суток. Напомню для чего это делано. В сетях с числом абонентов несколько десятков тысяч (я испытывал NoDeny как раз на такой) идет интенсивная запись трафика. Особенно это усугубляется, если пишется вся детализация. Это гигабайты информации (не трафика, а информации о нем) записываются в БД. Записать детализацию - это задача более-менее оптимизирована, поскольку запись идет insert с большим хвостом данных, которые записываются скопом. Другой вопрос, если надо апдейтить суточную статистику - здесь не надо вставлять данные, здесь надо к текущим значениям добавлять полученные в последнем срезе. Это возможно, конечно. Но это дополнительная нагрузка на СУБД. А поскольку главный лозунг сетестроителя "секономить", мне пришлось буквально вылизать ядро чтобы оно при максимальном эффекте требовало средних ресурсов. Ради добавления одной фичи, я пока не могу пойти на увеличения нагрузки (хоть и незначительной, но все же) - это ниша NoDeny в первую очередь быть надежной системой, а лояльное использование вычислительных мощностей - одна из составляющих надежности


Название: Re: Совершенствование динамического шейпера
Отправлено: elite от 21 Августа 2009, 20:22:24
Для этого надо модифицировать ядро - аккумулировать этот трафик. Я уже рассказывал, что трафик за сутки формируется по окончании этих суток. Напомню для чего это делано. В сетях с числом абонентов несколько десятков тысяч (я испытывал NoDeny как раз на такой) идет интенсивная запись трафика. Особенно это усугубляется, если пишется вся детализация. Это гигабайты информации (не трафика, а информации о нем) записываются в БД. Записать детализацию - это задача более-менее оптимизирована, поскольку запись идет insert с большим хвостом данных, которые записываются скопом. Другой вопрос, если надо апдейтить суточную статистику - здесь не надо вставлять данные, здесь надо к текущим значениям добавлять полученные в последнем срезе. Это возможно, конечно. Но это дополнительная нагрузка на СУБД. А поскольку главный лозунг сетестроителя "секономить", мне пришлось буквально вылизать ядро чтобы оно при максимальном эффекте требовало средних ресурсов. Ради добавления одной фичи, я пока не могу пойти на увеличения нагрузки (хоть и незначительной, но все же) - это ниша NoDeny в первую очередь быть надежной системой, а лояльное использование вычислительных мощностей - одна из составляющих надежности
Ну может тогда добавить еще массив Utraf_prev? И динамический шейпер будет работать не с Utraf, а с Utraf-Utraf_prev
А раз в Х мин делать Utraf_prev=Utraf


Название: Re: Совершенствование динамического шейпера
Отправлено: Efendy от 21 Августа 2009, 20:31:15
Да, можно, подоху, суммировать в скрипте. Но если рестартанет скрипт, то данные о трафике потеряются. В целом идея неплохая, подумаю


Название: Re: Совершенствование динамического шейпера
Отправлено: elite от 21 Августа 2009, 22:30:12
Да, можно, подоху, суммировать в скрипте. Но если рестартанет скрипт, то данные о трафике потеряются. В целом идея неплохая, подумаю
Ну вот над этим я и думаю :) Ну разве что в бд сливать Utraf_prev


Название: Re: Совершенствование динамического шейпера
Отправлено: goletsa от 31 Августа 2009, 06:12:12
Для того чтобы учитывать только входящий трафик при регулировании скорости достаточно ли изменить:

Код:
C  $Utraf{$p->{uid}}=$p->{in1}+$p->{out1};
На  $Utraf{$p->{uid}}=$p->{in1}; #+$p->{out1};

Или я не в том месте трогаю?


Название: Re: Совершенствование динамического шейпера
Отправлено: elite от 31 Августа 2009, 07:24:05
Для того чтобы учитывать только входящий трафик при регулировании скорости достаточно ли изменить:

Код:
C  $Utraf{$p->{uid}}=$p->{in1}+$p->{out1};
На  $Utraf{$p->{uid}}=$p->{in1}; #+$p->{out1};

Или я не в том месте трогаю?

да


Название: Re: Совершенствование динамического шейпера
Отправлено: goletsa от 31 Августа 2009, 16:11:45
Лаконично.
Но на какой вопрос? :)


Название: Re: Совершенствование динамического шейпера
Отправлено: elite от 31 Августа 2009, 18:03:00
Для того чтобы учитывать только входящий трафик при регулировании скорости достаточно ли изменить:

Код:
C  $Utraf{$p->{uid}}=$p->{in1}+$p->{out1};
На  $Utraf{$p->{uid}}=$p->{in1}; #+$p->{out1};
вот так вот :)


Название: Re: Совершенствование динамического шейпера
Отправлено: Aivanzipper от 25 Ноября 2009, 13:56:58
А возможно проводить анализ, например, каждые 5 минут? И, соответственно, если порог превышен резать скорость. А то сутки как-то многовато....


Название: Re: Совершенствование динамического шейпера
Отправлено: Efendy от 25 Ноября 2009, 14:15:10
трафик проверяется даже чаще чем 5 минут. Просто за основу берется трафик за сутки. Ставится ограничение столько-то мегабайт в сутки.


Название: Re: Совершенствование динамического шейпера
Отправлено: Aivanzipper от 25 Ноября 2009, 14:45:22
я правильно понимаю? :

ограничение трафика среза = (ограничение на трафик в сутки) \ (период среза)
ЕСЛИ (трафик среза) > (ограничение трафика среза) ТО "применить санкции"

т.е. администратор задает только количество мегабайт в сутки?
Сколько раз можно на одного пользователя "применить санкции"? Есть несколько вложенных порогов либо только один?


Название: Re: Совершенствование динамического шейпера
Отправлено: Efendy от 25 Ноября 2009, 16:40:50
Все гораздо проще. Если трафик за текущие сутки больше ограничения ->  применить санкции. Период среза не играет никакого значения. Например стоит указание резать скорость до 512 кбит при достижении 1 гб/сутки, как только клиент скачает 1Гиг (хоть утром, хоть днем, хоть вечером, хоть полгига утром, а полгига днем) - ему урежется скорость до 512кбит


Название: Re: Совершенствование динамического шейпера
Отправлено: Aivanzipper от 25 Ноября 2009, 17:20:36
понятно..

но в таком случае придется уведомлять об этом клиентов, чтобы не появилось недовольных


Название: Re: Совершенствование динамического шейпера
Отправлено: Aivanzipper от 30 Ноября 2009, 09:40:45
Нашел на НАГе:

Цитировать
Активных качальщиков режем таким способом:
Завели для клиентов 4 класса - 0, 1, 2, 3.
Класс 3 - это самый приоритетный, который идет без ограничений.
Для класса 2 завели пайп на 5Мегабит
Для класса 1 завели пайп на 4Мегабита
Для класса 0 завели пайп на 2Мегабита

В билинге ведется учет объема МБ по каждому безлимитчику, как только этот объем превысит, например 40% от теоретического объема тарифного плана - к такому клиенту начинает применяться следующий алгоритм:
Проверяется объем выкачанной абонентом за последний час информации и если он превышает 80% от теоретического - клиенту понижается класс на еденицу, а если не превышает - то класс повышается на еденицу.
Таким образом все активные качальщики сидят в зависимости от наглости в классах 0, 1 и 2 и меньше грузят общий канал.


Вот так было-бы супер!
Не пинайте, предлагаю как идею по дальнейшему совершенствованию.


Название: Re: Совершенствование динамического шейпера
Отправлено: AndyDv от 03 Декабря 2009, 13:26:18
Нашел на НАГе:

Цитировать
Активных качальщиков режем таким способом:
Завели для клиентов 4 класса - 0, 1, 2, 3.
Класс 3 - это самый приоритетный, который идет без ограничений.
Для класса 2 завели пайп на 5Мегабит
Для класса 1 завели пайп на 4Мегабита
Для класса 0 завели пайп на 2Мегабита

В билинге ведется учет объема МБ по каждому безлимитчику, как только этот объем превысит, например 40% от теоретического объема тарифного плана - к такому клиенту начинает применяться следующий алгоритм:
Проверяется объем выкачанной абонентом за последний час информации и если он превышает 80% от теоретического - клиенту понижается класс на еденицу, а если не превышает - то класс повышается на еденицу.
Таким образом все активные качальщики сидят в зависимости от наглости в классах 0, 1 и 2 и меньше грузят общий канал.


Вот так было-бы супер!
Не пинайте, предлагаю как идею по дальнейшему совершенствованию.


Очень здравый алгоритм.


Название: Re: Совершенствование динамического шейпера
Отправлено: Maks от 17 Декабря 2009, 12:12:09
Идея еще жива но просто нет времени на реализацию?
или пока отложена до лучших времен?


Название: Re: Совершенствование динамического шейпера
Отправлено: Александр (AleksHr) от 11 Февраля 2010, 18:57:25
Up! Етот модуль платный или бесплатный и вообще он существует, а то как то не очень понятно по теме...


Название: Re: Совершенствование динамического шейпера
Отправлено: blackjack от 11 Февраля 2010, 20:17:25
тату, а люди є?
н синку, це фантастика.

 ;D ;D


Название: Re: Совершенствование динамического шейпера
Отправлено: Александр (AleksHr) от 11 Февраля 2010, 21:24:26
А если серйозно? Я может быть даже и купил бы... штука очень полезная... класные тарифы можно создать с ее помощю ))).


Название: Re: Совершенствование динамического шейпера
Отправлено: goletsa от 13 Марта 2010, 10:29:15
А теперь хотелка.:)
Можно ли чтобы правила для входящего и исходящего трафика быди разными? А то забитый аплоад (выше чем даунлоад) по графикам в кактусе это просто ненормально.


Название: Re: Совершенствование динамического шейпера
Отправлено: smallcms от 13 Марта 2010, 12:16:12
Можно.
идёте в noserver.pl
находите строку
Код:
$speed_out=int($2*$speed_out/($speed_in||1));
меняете скажем на 3:
Код:
$speed_out=int($2*$speed_out/($speed_in||3));
теперь исходящий будет равен динамическому входящему, но в 3 раза меньше. спасение для ADSL.  ::)
+ для альтернативных направлений исходящий я режу так:
http://forum.nodeny.com.ua/index.php?topic=245.msg4623#msg4623
пользуйте поиск по форуму.


Название: Re: Совершенствование динамического шейпера
Отправлено: goletsa от 13 Марта 2010, 13:49:21
Хм, чую придется самому по аналогии допиливать.


Название: Re: Совершенствование динамического шейпера
Отправлено: stix от 13 Февраля 2013, 12:53:13
подниму старый топик.

решил заюзать динамический шейпер в одной из сетей.

для теста сделал:

0:200000-10000:400000-5000:600000-1000
0:0-40000

при 200 гбайт - 10 мбит
при 400 гбайт - 5 мбит
при 600 гбайт - 1 мбит

в остальном - 40 мбит

но такая вот шляпа, у тех, у кого уже 800 гбайт набежало или существующий трафик, то шейпер не поменялся.
делаю pipe list

02452:  40.000 Mbit/s    0 ms burst 0

Исходники не смотрел, может быстро кто ответит, там триггер при прохождении порога или сразу должен примениться?


Название: Re: Совершенствование динамического шейпера
Отправлено: Cell от 13 Февраля 2013, 12:58:58
в тарифе "использовать скрипты" галочку поставил?


Название: Re: Совершенствование динамического шейпера
Отправлено: stix от 13 Февраля 2013, 12:59:09
ага

раз pipe
ipfw table 10 list | grep 138.101
192.168.138.101/32 1532

два pipe
ipfw table 11 list | grep 138.101
192.168.138.101/32 1533

ipfw pipe 1532 list
01532:  40.000 Mbit/s    0 ms burst 0
q132604  50 sl. 0 flows (1 buckets) sched 67068 weight 0 lmax 0 pri 0 droptail
 sched 67068 type FIFO flags 0x0 0 buckets 0 active

ipfw pipe 1533 list
01533:  40.000 Mbit/s    0 ms burst 0
q132605  50 sl. 0 flows (1 buckets) sched 67069 weight 0 lmax 0 pri 0 droptail
 sched 67069 type FIFO flags 0x0 0 buckets 0 active

reload тарифов делал
noserver передернул, nofire перечитал, заново создал пайпы с такими же параметрами.

в продакшн системе не охота отладку включать останавливая текущих юзеров


Название: Re: Совершенствование динамического шейпера
Отправлено: Efendy от 13 Февраля 2013, 15:03:50
Если ты написал в 2 строки, то 2я "затирает" 1-ю. Такая форма только для ситуации когда префиксом указывается время. Надо так:

0:0-40000:200000-10000:400000-5000:600000-1000



Название: Re: Совершенствование динамического шейпера
Отправлено: stix от 13 Февраля 2013, 15:45:25
Большое спасибо :)
интересна динамика жалоб и зависимости трафика


Название: Re: Совершенствование динамического шейпера
Отправлено: stix от 14 Февраля 2013, 12:29:42
еще вопрос:
Код:
my $tbl_traf='x'.($year+1900).'x'.($mon+1).'x'.$day; 
&Debug("Для каждого клиента получим его трафик за текущий день.");
%Uday_traf=();
$sth=&Sql("SELECT mid, SUM(`in`) as tin, SUM(`out`) as tout FROM $tbl_traf WHERE class=1 GROUP BY mid");
в оригинале динамический шейпер берет трафик за сутки.

а я хочу на основе трафика за месяц.
достаточно ли здесь поменять логику выборки трафика заюзав Get_need_traf функцию?


Название: Re: Совершенствование динамического шейпера
Отправлено: Efendy от 14 Февраля 2013, 13:22:36
Черт, ну дока ведь помещается на одну страницу:

Цитировать
Динамический шейпер в качестве трафика может рассматривать не только месячный, но и суточный трафик. В этом случае в строке описания необходимо первый ноль заменить на единицу:

1:трафик-скорость:трафик-скорость:трафик-скорость
0 - месячный
1 - суточный


Название: Re: Совершенствование динамического шейпера
Отправлено: stix от 14 Февраля 2013, 13:46:50
вот я Вася, трижды перечитал доку, кроме последнего абзаца и пришлось свой код писать  ;D ;D ;D
+ в карму еще раз