Хотел сделать данную статью завершающей о squid. Но не получилось. Будет еще Данная статья будет узкотематическая. В статье рассмотрю возможности ограничения скорости локальных клиентов, т.н. часто применяемое понятие delay pools. Начну с теории.
Как работает ограничение скорости (delay pools) в squid
Дословно, delay pools переводится как пул задержки. Почему он так переводится, потому что так и есть Пул с данными наполняется по мере расходования наполненного содержимого. При этом, если пул наполнен “до завязки”, то squid задерживает поступление данных. Т.о. фактически, squid ограничивает не отдаваемую скорость, а ту скорость, с которой он наполняет пул. Для бОльшего понимания, давайте рассмотрим пул в качестве аналогии в виде дырявого ведра или бассейна. При этом, сверху ведра расположен squid, который заливает в ведро поток байтов из шланга определенного диаметра. Диаметр шланга – это некая аналогия ограничителя скорости. А снизу ведра/бассейна – локальные клиенты, которые “орашаются” потоком байтов через дыры в дне ведра. При этом, ведро имеет некоторый объем, который squid может наполнить байтами.
Когда клиент делает запрос на получение какого-либо объекта – прокси-серверу (будь то картинка, html страница или любой другой объект), squid сначала помещает/заливает данный объект в ведро (??? очень спорное утверждение). Если объект больше объема ведра, то в ведро помещается его часть, только после наполнения ведра, объект отдается клиенту. (с какой скоростью происходит первичное наполнение?) По мере опустошения ведра клиентом, остаток объекта дозаливается. При этом, squid “ставит в очередь” поступающие данные и не посылает новые новые запросы удаленному серверу запрашиваемому сайту. Т.о. объем ведра определяет количество байтов, которые доступны клиенту на максимальной скорости, пока ведро не опустошится. После чего клиент получает данные, согласно диаметра шланга squid Так же, если объем запрашиваемого объекта меньше объема ведра, то клиент получает этот объект с максимальной скоростью (??? тоже очень сомнительно). То есть с той скоростью, с которой клиент обменивается со squid (но не более диаметра шланга???). При этом, данные ведра можно “каскадировать”. Количество уровней каскадирования определяет класс пула.
После некоторого недопонимания работы squid, долгого чтения мануалов и практических опытов, показавших реальную схему работы, предыдущий абзац перефразирован в следующий вид: Читать далее, SQUID и delay pools