5. Алгоритмическое обеспечение
5.1. Алгоритм кэширования
5.2. Многопоточность
Алгоритмическое обеспечение проекта выражается в алгоритме работы кэша.
Кэш предназначен для хранения наиболее популярных у клиента proxy сервера документов.Кэш хранит и обрабатывает объекты DocumentInfo, которые обращаются к локальным файлам в каталоге кэша и содержат информацию относительно их даты создания, размера, и числа их вызовов. Объект DocumentInfo создан и вставлен в кэш после успешного получения и сохранения требуемого документа на локальном диске.
Впервые полученные документы всегда помещаются в кэш (они заменяют более старые версии, если такие имеются). Так как дисковое пространство ограничено то, когда нет свободного участка памяти, чтобы вставить новый документ, необходимо очистить кэш. В данном проекте, верхняя граница размера кэша определена параметром верхний уровень воды (High Water Mark). Текущий размер кэшей обозначен параметром текущий уровень воды (Current Water Mark). Во время очистки кэша документы удаляются до тех пор, пока размер кэша не станет ниже параметра нижний уровень воды (Low Water Mark). Верхний и нижний уровень воды могут быть изменены пользователем.
Алгоритм, который выбирает документы для удаления, называется алгоритмом удаления. Алгоритм, который я выбрал, чтобы оптимизировать время загрузки запрашиваемого документа конечным пользователем, основан на Гибридном алгоритме (HYB) предложенном Вустером и Абрамсом (Wooster and Abrams).
Когда вызывается алгоритм удаления, он приписывает индекс каждому кэшируемому документу, после чего производится сортировка документов согласно их индексов и удаление документов с меньшими индексами, пока Current Water Mark не опуститься до уровня Low Water Mark.
Величина индекса, которым помечается документ зависит от сочетания следующих факторов:
2. Оценка пропускной способности соединения с удалённым сервером (Cbwserver (i)).
Первые два фактора - оценки, основанные на времени соединения и пропускной способности соединения, измеренные в течение прошлых соединений с удалённым сервером, сохранённые и обработанные объектом ServersDataBase. Всякий раз, когда происходит получение нового документ с удалённого сервера, измеряется время соединения и пропускная способность (время передачи / размер) для этого документа (обозначаются sclat и scbw соответственно) и обновляются оценки факторов следующим образом:
* Clatserver(i) + Alpha * sclatClatserver(i) = (1-Alpha)
Cbwserver(i) = (1- Alpha)
* Cbwserver(i) + Alpha * scbwГде Alpha - коэффициент сглаживания, по умолчанию равен 1/8. Значение Alpha может быть изменено пользователем.
Необходимо заметить, что статистика по удалённому серверу формируется исходя из статистики документов этого сервера. Это устраняет проблему более низкой значимости пропускной способности для малых документов, чем пропускной способности для больших документов на том же самом сервере. Удалённый сервер, как ожидается, содержит набор документов различных размеров, так что , на измеряемую пропускную способность для всех серверов, как ожидается, в равной степени повлияет вышеупомянутое явление.
За последними двумя факторами следят объекты DocumentInfo. Когда документ сохраняется локально отмечается их размер и текущая дата. Всякий раз, когда происходит удачное обращения в кэш, счетчик обращений к документу увеличивается. Частота обращений к документу - частное числа обращений и времени, на протяжении которого документ находтся в кэше.
Результирующая функция формирования значения индекса значимости документа объединяет в себе все четыре фактора и будет выглядеть следующим образом:
* Clatserver (i) + WCbw * CbWserver (i)) * ( Frefi ^ WFref) / (si ^ Wsi)( WClat
Где WClat, WCbw, WFref и Wsi - настраиваемые веса значимости факторов.
Алгоритм удаления предпочитает удалять документы с более низким значением индексов. Следовательно, документ, вряд ли будет удалён, если значение индекса относительно велико, что возможно, если документ находится на сервере, время соединения с которым велико (то есть большой Clatserver(i)) и пропускная способность соединения мала (то есть мал Cbwserver(i)), и при этом документ часто вызывался (то есть большой Frefi), и размер документа мал (то есть мал si).
Site of Information
Technologies Designed by inftech@webservis.ru. |
|