Подробное описание Squid delay pools, с примерами

В прокси сервере Squid есть возможность ограничивать скорость, делаеться это при помощи Delay pools. В версии 2.X этих пулов три класса, а в 3.X добавили еще два новых и их стало пять. Но для начала давайте рассмотрим основные параметры.

И так delay_pools это параметр который задает общее количество наших пулов, тоесть если вы собираетесь использовать например три пула, то соответственно вы должны в самом начале написать

delay_pools 3

Далее идет delay_class. Этим параметром мы задаем номер пула и его класс, например мы хотим описать второй пул, который у нас пренадлежит к третьему классу:

delay_class 2 3

Необходимо так же задать на какой лист доступа будет распространяться данный пул при помощи delay_access:

delay_access 1 allow users

где users задеться при помощи acl, а «1» это номер нашего пула.

И последний параметр, это delay_parameters, в котором мы описываем ограничение:

delay_parameters 1 64000/128000

означает, что мы хотим ограничить наших пользователей первого пула скоротью в 512 кбит = 64 кбайта = 64000 байт, при этом первые 128 кбайт каждого запроса будут скачаны на максимальной скорости, затем, скорость будет ограничена до 512 кбит. Для того что бы убрать ограничение используйте значение -1, пример:

delay_parameters 1 -1/-1

означает, что для пула номер один нет никаких ограничений.

Итак, давайте перейдем к классам

Class 1 -ограничивает общюю скорость для всех хостов входящих в определенную группу. Пример:

delay_pools 1
delay_class 1 1
delay_access 1 allow all
delay_parameters 1 64000/128000

тоесть, пул номер один, первого класса, для сети описанной в листе доступа all, ограничивает скорость до 512 кбит/с, при этом первые 128 кбайт будут скачиваться на максимальной скорости, это ограничение общее и действует на всех, у пользователей никаких ограничений нет.

Class 2 — Ограничена общая скорость загрузки и скорость загрузки индивидуального хоста(IPv4 class C)

acl users src 192.168.0.1/24
delay_pools 1
delay_class 1 2
delay_access 1 allow users
delay_parameters 1 -1/-1 64000/128000

Пул номер один, второго класса, для сети описанной в листе доступа users. -1/-1 означает что для сети 192.168.0.1/24 в целом нет ограничений, но есть ограничение 64000/128000 для каждого пользователя.

Class 3 — Ограничена общая скорость загрузки, скорость загузки подсети и скорость загрузки индивидуального хоста (IPv4 class B).

acl users src 192.168.0.1/23
acl office src 172.16.0.1/24
acl bad_office src 172.16.0.15/32
delay_pools 1
delay_class 1 3
delay_access 1 allow users office !bad_office
delay_parameters 1 -1/-1 64000/128000 4000/1000

Пул номер один, третьего класса, для сетей описанных в листе доступа users и office. -1/-1 означает что общая скорость не ограничена, для сетей описанных в листах доступа users и office она ограничена 64000/128000 и каждый IP в данных сетях ограничен 4000/1000. При этом на IP адресс из листа доступа bad_office это правило не распространяеться, так как в параметре delay_access перед ним стоит восклецательный знак

Class 4 — Все то же самое что в Class 3, плюс ограничение для каждого пользователя. Данный пул будет работать только если у вас включен хоть какой-то способ аутентификации(IPv4 class B).

acl users src 192.168.0.1/23
acl auth  proxy_auth  user1 user2 user3
delay_pools 1
delay_class 1 4
delay_access 1 allow users office !bad_office
delay_parameters 1 -1/-1-1/-1 32000/32000 16000/16000

И так, пул номер 1, четвертого класса, для сети 192.168.0.1/23 и пользователей описанных в листе доступа auth. Общего ограничения и на сеть нету, но есть ограничение на IP — 32000/32000 и для пользователей из листа auth 16000/16000. Например если пользователь будет залогинен сразу на нескольких компьютерах, то на всех этих компьютерах его сумарная скорость не привысит 16000/16000, при этом все остальные пользователи из сети 192.168.0.1/23 будут ограничены 32000/32000.

Небольшой пример. Пускай у нас есть оффис, в нем есть три пользователя(user1, user2, user3) для которых должно быть ограничени 128 кбит/с, так же один человек(user4) для которого должно быть ограничени 256 кбит/с и босс(boss1), на которого не должно быть ограничения. Конфигурация будет выглядить так:

acl user_normal proxy_auth  user1 user2 user3
acl user_speed proxy_auth  user4
acl boss proxy_auth  boss1
delay_pools 2
delay_class 1 4
delay_class 2 4
delay_access 1 allow user_normal
delay_access 1 deny all
delay_access 2 allow user_speed
delay_access 2 deny all
delay_parameters 1 -1/-1-1/-1 -1/-1 16000/16000
delay_parameters 2 -1/-1-1/-1 -1/-1 32000/32000

Class 5 — Ограничивает скорость для запросов сгрупированных по их тегу, работает на external_acl’s с тагом reply.

По поводу Class 5, тяжело что-то сказать, но в ближайшее время, я постараюсь дополнить примерами этот раздел.

И еще один параметр, это delay_initial_bucket_level. С первого взгляда он не совсем понятен, но все очень просто, когда пользователь обращаеться первый раз к сквиду, после перезапуска или реконфигурации, то сквид проверяет в delay pools этого пользователя, и помещает его в определенную группу(воронку) ограничения, например 16000/16000, так вот, параметр delay_initial_bucket_level отвечает за первичную заполненость этих групп. Если вы не изменяете этот параметр, то изначально он равен 50%. Как пример, если поставить значение 100%, то все возможные клиенты из листа доступа к которому приминим наш delay pool будут внесены во все группы, это ускорит их первый запрос к серверу, но при этом сервер должен хранить всю, возможно лишнюю, информацию в памяти, это может быть лишним расточительством ресурсов. 50% достаточно оптимальное значений.

В завершении лишь скажу, что для того, что бы пользоваться delay pools, вам необходимо скомпелировать Squid с параметром —enable-delay-pools

Случайные Статьи

Loading…


Количество просмотров :25872

One Comment

  1. Mc.Sim:

    Приветствую!
    Не могу понять параметр delay_initial_bucket_level.
    > delay_initial_bucket_level отвечает за первичную заполненость этих групп
    этих групп — имеется ввиду групп пулов, то есть воронок?
    а так же непонятно — заполненность чем? пользователями, или объектами, которые запросил пользователь?
    А так же неясно общее назначение этого параметра.
    Предположим, что этот параметр управляет заполненностью воронки запрошенными объектами, в таком случае, правильно ли данное утверждение: squid не будет отдавать данные пользователю из воронки, пока она не наполнится полученными данными из интернета на значение заданное параметром delay_initial_bucket_level (по умолчанию — 50%).

    Если данное утверждение верно, то предположим, если объем пула задан 100500 Кб, а пользователь получает только 100Кб и значение delay_initial_bucket_level 50% (то есть 50250 Кб), то пользователь никогда не получит свой объект в 100Кб….

Оставьте коментарий