Система кэширования ESPS четвертого поколения целиком и полностью построена
на основе файловой системы. Имеется только две возможности: полное отсутствие
кэша, либо файловый кэш. Никакие другие возможности (присутствовавшие в
предыдущих версиях) более не поддерживаются (как не оправдавшие себя). В отличие
от предыдущих версий, получаемые объекты сохраняются прямо на диск (по мере
получения их из сети и при одновременной отдаче клиенту порциями), а не в
промежуточную область памяти, в связи с чем данное поколение обладает существенно
меньшей ресурсоемкостью по расходу ОЗУ, а также не имеет никаких проблем с потоковыми
данными большого объема (видео и радио трансляции).
Все данные, относящиеся к файловому кэшу, размещаются в каталоге, указанном
администратором прокси-сервера в файле esps40.ini. Управление кэшем
осуществляется администратором путем издания директив в специальном текстовом
построчном файле, имя которого также содержится в esps40.ini. Каталог кэша
содержит 256 подкаталогов с именами от 00 до FF, каждый из которых, в свою
очередь, также содержит 256 подкаталогов с именами от 00 до FF. Таким образом,
вся система содержит 65536 подкаталогов нижнего уровня, в которых уже хранятся
сами закэшированные объекты. При первом запуске ESPS создает всю эту систему
каталогов (это может занять около минуты), а при последующих запусках только
проверяет "все ли на месте" (в случае необходимости, повторно создавая ошибочно
удаленные администратором подкаталоги, что занимает уже куда меньшее время -
несколько секунд). Поскольку при такой системе кэширования бремя поиска
объектов целиком возлагается на файловую систему, рекомендуется, для повышения
производительности ESPS, размещать кэш на дисках NTFS (а не FAT) и периодически
подвергать их дефрагментации (штатными средствами операционной системы).
Объекты, размещенные в подкаталогах нижнего уровня, отдаются клиентам
без запроса в интернет, если время их хранения не истекло. Новые объекты,
получаемые из сети, складируются в корне директории кэша и перемещаются
в подкаталоги нижнего уровня специальным демоном по мере их готовности
и в случае необходимости (если это не противоречит директивам работы кэша,
изданным администратором прокси-сервера). Каждый объект, находящийся в
подкаталоге нижнего уровня (то есть принятый на хранение) имеет свое
время "жизни", которое кодируется в расширении имени файла: первые два
символа есть число, означающее время хранения, а третий символ - код
единицы измерения (M - минуты, H - часы, D - дни, W - недели). Каждому
вновь полученному из сети объекту, который принят на хранение, назначается
время жизни, равное параметру "Default Save Time", который извлекается
демоном обработки кэша из файла настроек кэша для того URL, который в
наибольшей степени (совпадение максимального количества знаков, отличных
от "*") соответствует URL данного объекта. Дальнейшая обработка кэша
производится таким образом, что по истечении времени хранения какого-либо
объекта, при запросе клиента, объект получается из сети и клиенту отдается
новая его копия, а демон обработки кэша (в ассинхронном режиме, то есть
без потери производительности) сравнивает новый и старый вариант объекта
и при совпадении объектов время хранения увеличивается, а при несовпадении -
уменьшается (в пределах значений "Min Save Time" и "Max Save Time" из настроек
кэша для наиболее "подходящего" URL). Таким образом, реализация кэша в
данной версии ESPS носит адаптивный характер, и эффективность кэширования
(степень экономии внешнего канала) растет со временем, так как часто
меняющиеся объекты хранятся все более короткое время (отсутствует эффект
"залипания"), а редко меняющиеся объекты - хранятся все дольше и дольше.
Еще одной важной особенностью системы кэширования данной версии ESPS
является возможность кэширования объектов, размер которых в заголовке
http не указан. Для управления этом свойством служит параметр "Need Size In Header":
если он равен единице, то такие объекты не кэшируются (такое поведение
характерно для предыдущих версий ESPS и вообще является общепринятым
в мире прокси-серверов), если же указать этому параметру значение ноль, то
будут кэшироваться даже такие объекты, что может повлечь за собой
еще большее увеличение эффективности кэширования (экономию внешнего
канала).