Оптимизация кэширования больших двоичных объектов для глобальных сетей (SharePoint Server 2010)
Применимо к: SharePoint Server 2010
Последнее изменение раздела: 2016-11-30
В этой статье описывается использование кэширования больших двоичных объектов в Продукты Microsoft SharePoint 2013 для глобальных сетей.
Кэширование обычно используется для повышения пропускной способности в конвейере визуализации — с момента получения запроса на сервере и до начала обратной передачи ответа на клиентский компьютер. Это играет большую роль в общей производительности сайта, однако в данной статье делается упор на следующих аспектах кэширования:
влияние конфигурации сервера на кэширование на клиенте;
контроль размера элементов, которые передаются по сети с сервера на клиент.
Общие сведения о кэшировании больших двоичных объектов
Кэширование больших двоичных объектов представляет собой механизм, доступный только вместе с функциями публикации SharePoint Server 2010. Это делает его идеальным средством для использования на сайтах корпоративных порталов, которые основаны на шаблоне "Портал для совместной работы", и сайтов Интернета, основанных на шаблоне "Портал публикации". Кэширование больших двоичных объектов позволяет задать директивы кэширования, связанные с элементами, предоставляемыми из списков сайта публикации, например из библиотеки "Страницы" и "Изображения семейства веб-сайтов". Когда браузер на клиентском компьютере обнаруживает директиву кэширования, он определяет, что получаемый им элемент можно сохранить локально и не запрашивать снова до истечения срока действия директивы кэширования. Это важно для географически распределенной среды, поскольку позволяет сократить число запрашиваемых и пересылаемых по сети элементов.
Если кэширование больших двоичных объектов в SharePoint Server 2010 включено, происходит две вещи. Во-первых, каждый раз при запросе кэшируемого элемента SharePoint Server 2010 производит поиск его локальной копии на жестком диске веб-сервера, получившего запрос. Если такая копия существует, файл передается в потоковом режиме напрямую с локального диска пользователю. Если копии на локальном диске нет, элемент копируется из базы данных SQL, где он хранится, и затем отправляется пользователю, направившему запрос. После этого на все запросы элемента элемент будет предоставляться напрямую с веб-сервера, пока не истечет срок действия кэширования элемента. Это ведет к повышению производительности фермы серверов за счет сокращения состязания за ресурсы на сервере базы данных.
Во-вторых, при кэшировании больших двоичных объектов происходит добавление заголовка кэшируемости к элементу, когда тот передается клиенту. Этот заголовок сообщает браузеру, в течение какого времени элемент должен храниться в кэше. Например, если у рисунка значение кэшируемости равняется трем дням и если этот рисунок будет запрашиваться снова в течение следующих трех дней, браузер будет использовать копию изображения из своего локального кэша, а не запрашивать его у сервера.
Использование Fiddler для сбора данных о кэшировании больших двоичных объектов
При тестировании сайта и проверке, какие элементы кэшируются и каким образом, можно использовать бесплатное отладочное приложение под названием Fiddler (Возможно, на английском языке) (http://www.fiddlertool.com). На следующем снимке экрана показано окно приложения Fiddler, в котором проверяется простой сайт SharePoint, используемый для публикации. Сайт создан с помощью шаблона "Портал для совместной работы" по умолчанию. На страницу был добавлен дополнительный текст, а на главную страницу было помещено несколько изображений.
В приложении Fiddler имеется несколько важных блоков.
Столбец # слева указывает, что из браузера на сервер в общей сложности поступило 44 HTTP-запроса на визуализацию страницы.
В столбце Result (Результат) показан результирующий код HTTP, возвращенный из запроса элемента. 200 означает, что элемент был успешно извлечен.
В столбце URL (URL-адрес) указывается конкретный запрашивавшийся элемент.
В столбце Body (Тело) указывается размер каждого элемента.
В столбце Caching (Кэширование) показана директива кэширования, связанная с каждым элементом. Данные в столбце Caching (Кэширование) показывают, что у некоторых элементов есть связанная директива кэширования, то есть у них имеется атрибут max-age, больше нуля. Директивы кэширования выражаются в секундах. Это значит, что у показанной страницы для нескольких элементов задано кэширование в течение 365 дней (60 секунд в минуте, 60 минут в часе, 24 часов в сутках = 60x60x24 = 86 400x365 = 31 536 000).
Обратите внимание, что все элементы с такой директивой кэша размещаются в каталоге _layouts. Такая настройка кэширования для этих элементов обусловлена настройкой виртуального каталога _layouts/images в службах IIS. При создании нового веб-приложения SharePoint Server 2010 автоматически создает несколько виртуальных каталогов, которые сопоставляются с папками на физических дисках веб-сервера. После создания виртуального каталога _layouts/images добавляется директива кэширования, которая применяется ко всему каталогу. На следующем снимке экрана показана конфигурация каталога в оснастке "Диспетчер служб IIS".
Поскольку у всех этих элементов имеется связанная с ними директива кэширования, отличная от нуля, при следующем запросе страницы браузер будет использовать копию элемента из локального кэша браузера вместо повторного запроса элемента у сервера. На следующем снимке экрана показано приложение Fiddler при запросе страницы во второй раз.
Как показывают данные в Fiddler, число запрошенных элементов серьезно сократилось — с 44 до 11. Важно отметить, что число сделанных запросов может зависеть от способа запроса страницы. Если используется кнопка "Обновить" в браузере, все элементы, вероятно, будут запрошены снова, независимо от наличия локальной копии в кэше. И наоборот, если страница запрашивается при переходе на нее по ссылке или ярлыку, запрашиваться будут только элементы, отсутствующие в кэше.
Данные Fiddler также показывают, что браузер делает запрос к серверу на другие изображения на главной странице, которые уже имеются в локальном кэше. Это отражается в коде ответа 304. Это означает, что браузер выполнил условный запрос элемента. Ответ 304 означает, что версия элемента на сервере не менялась и совпадает с версией на клиенте, поэтому загружать ее снова не нужно. Несмотря на то, что файл не загружается по сети, он порождает обмен данными с сервером для определения актуальности локальной копии. В географически распределенных средах обмен данными с сервером может требовать много ресурсов. Поэтому необходимо максимально сократить такой обмен. Этого можно добиться, добавив директиву кэширования, отличную от нуля, к каждому из оставшихся элементов (кроме страницы, которая всегда возвращается сервером). Функция кэширования больших двоичных объектов добавляет такую директиву.
Настройка кэширования больших двоичных объектов с помощью файла Web.config
Для настройки кэширования больших двоичных объектов используется файл Web.config для веб-приложения, в котором будет использоваться кэширование. Откройте файл Web.config в текстовом редакторе, таком как "Блокнот", и найдите запись BlobCache. По умолчанию она имеет вид:
<BlobCache location="" path="\.(gif|jpg|jpeg|jpe|jfif|bmp|dib|tif|tiff|ico|png|wdp|hdp|css|js|asf|avi|flv|m4v|mov|mp3|mp4|mpeg|mpg|rm|rmvb|wma|wmv)$" maxSize="10" enabled="false" />
Атрибуты в элементе BlobCache
имеют следующие значения.
location
Указывает расположение жесткого диска веб-сервера, на котором будут храниться кэшированные элементы.path
Регулярное выражение, описывающее виды файлов, которые нужно кэшировать.maxSize
** **Допустимый размер кэша в ГБ.enabled
Значениеtrue
включает кэширование больших двоичных объектов.
Следующий дополнительный атрибут, не включенный по умолчанию, используется для установки истечения срока действия кэширования для отдельных элементов.
max-age
Время в секундах, в течение которого элементы должны сохраняться в кэше на клиентском компьютере.
Если атрибут max-age имеет ненулевое значение, для кэшируемых элементов задается срок действия кэширования, поэтому браузеру больше не нужно загружать такие элементы и даже проверять, имеются ли у него последние версии. Например, предположим, необходимо включить кэширование и выделить на жестком диске веб-сервера 100 МБ пространства для хранения элементов. Их срок действия должен истекать через день, а в дополнение к стандартным кэшируемым типам файлов нужно добавить HTC-файлы. Для этого нужно указать следующие атрибуты BlobCache
:
<BlobCache location="C:\blobcache" path="\.(gif|jpg|png|css|js|htc)$ " maxSize="100" max-age="86400" enabled="true"/>
Обратите внимание, что это изменение в файле Web.config нужно сделать на каждом веб-сервере в ферме. В большинстве случаев кэширование больших двоичных объектов начнется автоматически, но безопаснее использовать команду iisreset по окончании внесения изменений. На следующем снимке экрана показано окно приложения Fiddler для запроса той же страницы, что и ранее, но в этот раз для нее включено кэширование больших двоичных объектов в соответствии с описанием выше.
Обратите внимание, что у всех элементов в библиотеке /SiteCollectionImages код состояния HTTP теперь равен 200, что означает их успешную загрузку. Кроме того, со всеми ними теперь связана директива кэширования, которая указывает, что их срок действия истечет через одни сутки (86 400 с). Если страница будет запрошена еще раз, Fiddler покажет, что ни одно из изображений не было запрошено снова; общее число запросов на предоставление этой страницы, таким образом, сократилось с 44 до 3, и два из оставшихся трех запросов относятся к процедуре проверки подлинности NTLM, которая происходит между веб-сервером и клиентским приложением. На следующем рисунке показано окно Fiddler при повторном запросе страницы.
Дополнительные замечания при использовании кэширования больших двоичных объектов
При использовании кэширования больших двоичных объектов следует иметь в виду следующее.
Оно требует дополнительных усилий по настройке, поскольку требует изменения файла Web.config на каждом веб-сервере. Однако преимущества стоят этих усилий.
Проанализируйте содержимое сайта и определите, имеются ли другие типы файлов, которые также следует предоставлять из кэша. Хороший пример — это HTC-файлы. Поскольку HTC-файлы используются в большинстве сайтов публикации, этот тип стоит добавить в список типов кэшируемых файлов.
Кэширование больших двоичных объектов работает только с элементами, которые хранятся в библиотеках SharePoint, его нельзя использовать для кэширования контента из других источников.
Некоторые списки не поддерживаются для анонимных пользователей по умолчанию. При наличии таких пользователей, обращающихся к сайту, для следующих списков необходимо задать разрешения вручную, чтобы включить кэширование элементов из них.
Галерея главных страниц
Библиотека стилей
При использовании кэширования больших двоичных объектов нужно помнить о двух других параметрах конфигурации. Первый относится к очистке кэша больших двоичных объектов. Если для определенного сайта необходимо очистить кэш, перейдите в это семейство веб-сайтов и выберите меню Действия сайта…Параметры сайта…Изменение параметров узла. В списке задач "Администрирование семейства веб-сайтов" выберите Кэш объектов семейства веб-сайтов. В разделе "Очистить кэш на диске" установите флажок Очистить кэш на диске данного сервера и нажмите кнопку OK.