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