Как снизить нагрузку на высокопосещаемый проект? Технический директор «Ленвендо» Виталий Гаврилов +7 (812) (Санкт-Петербург) +7 (495) (Москва)
Какими бывают высокопосещаемые ресурсы тел.: +7 (812) Высокодинамичные ресурсы Интернет СМИ Доски объявлений Часть Интернет - магазинов, активно использующих функции социального маркетинга Низкодинамичные ресурсы Интернет-магазины Интернет-сервисы (например, kupikupon.ru) Что мы сейчас не рассматриваем Социальные сети, twitter и т.д. Системы агрегации динамической информации (например, news.yandex.ru)
Особенности высокодинамичных ресурсов тел.: +7 (812) Высокая (от нескольких обновлений в минуту до сотен обновлений в секунду) скорость обновления информации Четкое разделение страниц на списки информации, элементы информации, прочие статические страницы с низкой частотой обновления Возможность выделения полностью динамической и условно статической частей в компоновке html страницы Использование внешних сервисов (обычно функций предоставляемых соцсетями) для увеличения заинтересованности посетителя
Особенности высокодинамичных ресурсов тел.: +7 (812)
Особенности низкодинамичных ресурсов тел.: +7 (812) Четкое разделение страниц на списки информации и элементы информации Возможность выделения полностью динамической и условно статической частей в компоновке html страницы Использование внешних сервисов (обычно функций предоставляемых соцсетями) для увеличения заинтересованности посетителя Высокие требования к оперативности обновления информации
Особенности низкодинамичных ресурсов тел.: +7 (812)
Снижение нагрузки на высокодинамичных проектах тел.: +7 (812) Разделение контента на полностью динамический и условно статический контент Перекомпоновка страниц для оптимального использования AJAX Статическое кеширование условно-статического контента
Снижение нагрузки на низкодинамичных проектах тел.: +7 (812) Разделение контента на полностью статический, условно- статический и высокодинамичный контент Управляемое кеширование условно- статического контента
Способы кеширования статического контента тел.: +7 (812) Использование заголовков Cache-Control и Expires (дает разрешение браузеру не перезапрашивать содержимое страницы, не спасает от «скачков» посещаемости) Использование кеширующего прокси сервера в связке с заголовками Cache-Control и Expires (дает устойчивость к «скачкам» посещаемости, не позволяет оперативно управлять обновлением кеша) Использование управляемого статического кеширования (решает все поставленные задачи)
Управляемое статическое кеширование тел.: +7 (812)
Управляемое статическое кеширование (Сервера FE) тел.: +7 (812) Принимают все входящие подключения Фактически самое ненагруженное звено в обработке запроса посетителя Не обладает информацией о связи запроса с элементом динамической информации В большинстве случаев это nginx (
Управляемое статическое кеширование. (Сервера FE) тел.: +7 (812) Nginx умеет Сохранять полученный ответ в файлах по заранее определенному пути (директива proxy_store) Определять наличие сохраненной копии файла Отдавать готовые ответы из сохраненных копий Nginx не умеет Отслеживать корректность отдаваемых данных
Управляемое статическое кеширование. Суть решения тел.: +7 (812) За ведение статического кеша отвечает nginx Из nginx на уровень приложения (в случае если запрос посетителя обрабатывается приложением, а не берется из закешированной копии, передается путь к файлу, в который будет сохранен ответ (файл кеша)) На уровне приложения информация о связке информационных элементов и файла кеша сохраняется в БД (лучше всего подходят NoSQL базы данных) При обновлении элемента информации на уровне приложения отдается команда на удаление файлов кеша по обновленному информационному элементу (можно делать это как прямой командой в nginx, который посредством встроенного perl сможет удалять файлы, так и через диспетчер очереди, в случае нескольких FE серверов)
Управляемое статическое кеширование. Суть решения тел.: +7 (812)
Что не вошло в рамки этой презентации тел.: +7 (812) Способы очистки статического кеша и обработка исключительных ситуаций Как хранить ключи в Redis так, чтобы БД не росла во времени от избытка ключей Прочие тонкие моменты статического кеширования (сжатый и несжатый контент, заголовки с кодировкой и типом данных и т.д.) Для чего еще можно использовать данное решение Как сделать сервисы AMQP и Redis отказоустойчивыми
А как же поисковые системы тел.: +7 (812) Весь внешний контент необходимо по максимуму включать в сохраненные в статическом кеше копии страниц У копии страницы есть время жизни, после которого она удаляется (что приводит к перестроению страницы, и, следовательно, к обновлению данных для поисковых систем) Необходимо помнить об альтернативных способах передачи информации в поисковые системы (RSS ленты и т.д.)
Спасибо за внимание! тел.: +7 (812) III место в рейтинге Best in digital 2013 в номинации « Разработка Highload систем »