В лучшем proxy-сервере Squid (также работающем под Windows)
есть хороший механизм ограничения скорости загрузки. Единственная беда
- про написано много, но по-английски, а об устройстве - вообще только
2 сообщения от разработчиков в списке рассылки. Поэтому постараюсь
рассказать про него, что понял сам.
Итак, основные моменты.
Каждый пул определяется двумя параметрами: размером буфера и скоростью
его заполнения. Всего существует 3 класса пулов:
Ограничена общая скорость загрузки.
Ограничена общая скорость загрузки и скорость загрузки индивидуального хоста (биты 25 -32 IP-адреса).
Ограничена
общая скорость загрузки, скорость загузки подсети (биты 17-24
IP-адреса) и скорость загрузки индивидуального хоста (биты 25 -32
IP-адреса).
Важно пояснить, что для пулов второго и
третьего класса каждое соединение проходит через все ограничения: общее
-> подсеть (только для третьего класса) -> хост. Для более
наглядного представления IP-адресов в двоичной форме скачайте себе LanCalculator.
Немного
об устройстве. Каждый объект (страница, картинка, скрипт, таблица
стилей и т.п.) имеет свой размер. Когда клиент запрашивает данные, они
сначала попадают в буфер и только потом передаются ему.
Если
объем запрашиваемых данных меньше или равен размеру буфера, то клиент
получает их с максимальной скоростью (максимальная скорость равна
размеру буфера).
Если объем запрашиваемых данных больше
размера буфера, то первую часть (размер буфера) клиент получит с
максимальной скоростью, а остаток - с минимальной (скоростью заполнения
буфера).
Что мы имеем в результате.
Если размер буфера и его скорость заполнения равны, то клиент всегда качает с максимальной скоростью.
Если
размер буфера больше скорости заполнения, то файлы объемом меньше
размера буфера клиент получает на максимальной скорости, а больше - на
максимальной.
Если скорость заполнения буфера больше размера
буфера, то клиент всегда получает данные на максимальной скорости
(объем буфера), но Squid не подкачивает данные, пока клиент полностью
не опустошит буфер.
Перейдем к конфигурированию. Поиск
необходимого пула будет происходить только до первого совпадения,
поэтому при объявлении пулов необходимо соблюдать нужный порядок.
Сначала объявляем ACL (списки доступа), по которым мы будем определять принадлежность клиентов к определенному пулу.
delay_pools 3 # Всего будет 3 пула delay_class 1 1 # 1й пул первого класса delay_class 2 1 # 2й пул первого класса delay_class 3 3 # 3й пул третьего класса
Определяем принадлежность юзеров к пулу. Принадлежность
нужно определять по одному ACL на строку. Если написать в одну строку
несколько ACL, то в пул попадет только первый, а остальные - нет. По крайней мере на Squid 2.5.STABLE10 работает именно так.
delay_parameters 1 16000/16000 # 128K на всех delay_parameters 2 32000/32000 # 256K на всех delay_parameters 3 32000/32000 16000/16000 -1/-1 #256K на всех, каждой подсети 128K
Приветствую. Немного непонятна фраза: > Если размер буфера и его скорость заполнения равны, то клиент всегда качает с максимальной скоростью. что тут понимается под "максимальной скоростью"? Максимальная скорость заполнения буфера? Спасибо
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]