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