Как снизить нагрузку на высокопосещаемый проект? Виталий Гаврилов

advertisement
Как снизить нагрузку
на высокопосещаемый
проект?
Технический директор «Ленвендо»
Виталий Гаврилов
+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
Download