Архив за месяц: Август 2006

Описание настройки Squid delay pools

В лучшем proxy-сервере Squid (также работающем под Windows) есть хороший механизм ограничения скорости загрузки. Единственная беда — про написано много, но по-английски, а об устройстве — вообще только 2 сообщения от разработчиков в списке рассылки. Поэтому постараюсь рассказать про него, что понял сам.

Итак, основные моменты. Каждый пул определяется двумя параметрами: размером буфера и скоростью его заполнения. Всего существует 3 класса пулов:

  1. Ограничена общая скорость загрузки.
  2. Ограничена общая скорость загрузки и скорость загрузки индивидуального хоста (биты 25 -32 IP-адреса).
  3. Ограничена общая скорость загрузки, скорость загузки подсети (биты 17-24 IP-адреса) и скорость загрузки индивидуального хоста (биты 25 -32 IP-адреса).

Важно пояснить, что для пулов второго и третьего класса каждое соединение проходит через все ограничения: общее -> подсеть (только для третьего класса) -> хост. Для более наглядного представления IP-адресов в двоичной форме скачайте себе LanCalculator.

Немного об устройстве. Каждый объект (страница, картинка, скрипт, таблица стилей и т.п.) имеет свой размер. Когда клиент запрашивает данные, они сначала попадают в буфер и только потом передаются ему.

  • Если объем запрашиваемых данных меньше или равен размеру буфера, то клиент получает их с максимальной скоростью (максимальная скорость равна размеру буфера).
  • Если объем запрашиваемых данных больше размера буфера, то первую часть (размер буфера) клиент получит с максимальной скоростью, а остаток — с минимальной (скоростью заполнения буфера).

Что мы имеем в результате.

  • Если размер буфера и его скорость заполнения равны, то клиент всегда качает с максимальной скоростью.
  • Если размер буфера больше скорости заполнения, то файлы объемом меньше размера буфера клиент получает на максимальной скорости, а больше — на минимальной.
  • Если скорость заполнения буфера больше размера буфера, то клиент всегда получает данные на максимальной скорости (объем буфера), но Squid не подкачивает данные, пока клиент полностью не опустошит буфер.

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

Сначала объявляем ACL (списки доступа), по которым мы будем определять принадлежность клиентов к определенному пулу.

acl vasya src 192.168.1.10/32
acl kolya src 192.168.1.11/32
acl petya src 192.168.1.12/32
acl masha src 192.168.1.13/32
acl director src 192.168.1.14/32
acl office1 src 192.168.2.0/24
acl office2 src 192.168.3.0/24
acl office3 src 192.168.4.0/24

Объявляем сами пулы.

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_access 1 allow vasya
delay_access 1 allow kolya
delay_access 1 allow petya
delay_access 1 allow masha
delay_access 1 deny all
delay_access 2 allow director
delay_access 2 deny all
delay_access 3 allow office1
delay_access 3 allow office2
delay_access 3 allow office3
delay_access 3 deny all

Задаем ограничения по скорости.

delay_parameters 1 16000/16000 # 128K на всех
delay_parameters 2 32000/32000 # 256K на всех
delay_parameters 3 32000/32000 16000/16000 -1/-1 #256K на всех, каждой подсети 128K

Вот вроде и все. Будут вопросы — задавайте.

И снова о документации

Бывает, что маленькая сетка становится большой. Потом она подрастает еще и становится просто огромной. В результате, для того, чтобы сделать простейшее действие, приходится делать далеко не одно и непростейшее. И документацию приходится исправлять не раз и не два.

Мрак и ужас? Ан нет! Если документация написана хорошо, то найти концы и связать воедино несколько, казалось бы, разрозненных вещей становится куда проще. Не ленитесь, пишите.

 
« Записывайте на месте: заметка стоит воза воспоминаний

Ральф Эмерсон
»