17
Как снизить нагрузку на высокопосещаемый проект? Технический директор «Ленвендо» Виталий Гаврилов +7 (812) 322-95-87 (Санкт-Петербург) +7 (495) 646-85-55 (Москва) [email protected]

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

Embed Size (px)

Citation preview

Page 1: Как снизить нагрузку на высокопосещаемый проект

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

Технический директор «Ленвендо»

Виталий Гаврилов

+7 (812) 322-95-87 (Санкт-Петербург)  +7 (495) 646-85-55 (Москва)     [email protected]

Page 2: Как снизить нагрузку на высокопосещаемый проект

Какими бывают высокопосещаемые ресурсы

тел.: +7 (812) 322-95-87 [email protected]

Высокодинамичные ресурсы

√ Интернет СМИ√ Доски объявлений√ Часть Интернет - магазинов, активно использующих функции

социального маркетинга

Низкодинамичные ресурсы

√ Интернет-магазины√ Интернет-сервисы (например, kupikupon.ru)

Что мы сейчас не рассматриваем

√ Социальные сети, twitter и т.д.√ Системы агрегации динамической информации (например,

news.yandex.ru)

Page 3: Как снизить нагрузку на высокопосещаемый проект

Особенности высокодинамичных ресурсов

тел.: +7 (812) 322-95-87 [email protected]

Высокая (от нескольких обновлений в минуту до сотен обновлений в секунду) скорость обновления информации

Четкое разделение страниц на списки информации, элементы информации, прочие статические страницы с низкой частотой обновления

Возможность выделения полностью динамической и условно статической частей в компоновке html страницы

Использование внешних сервисов (обычно функций предоставляемых соцсетями) для увеличения заинтересованности посетителя

Page 4: Как снизить нагрузку на высокопосещаемый проект

Особенности высокодинамичных ресурсов

тел.: +7 (812) 322-95-87 [email protected]

Page 5: Как снизить нагрузку на высокопосещаемый проект

Особенности низкодинамичных ресурсов

тел.: +7 (812) 322-95-87 [email protected]

Четкое разделение страниц на списки информации и элементы информации

Возможность выделения полностью динамической и условно статической частей в компоновке html страницы

Использование внешних сервисов (обычно функций предоставляемых соцсетями) для увеличения заинтересованности посетителя

Высокие требования к оперативности обновления информации

Page 6: Как снизить нагрузку на высокопосещаемый проект

Особенности низкодинамичных ресурсов

тел.: +7 (812) 322-95-87 [email protected]

Page 7: Как снизить нагрузку на высокопосещаемый проект

Снижение нагрузки на высокодинамичных проектах

тел.: +7 (812) 322-95-87 [email protected]

Разделение контента на полностью динамический и условно статический контент

Перекомпоновка страниц для оптимального использования AJAX

Статическое кеширование условно-статического контента

Page 8: Как снизить нагрузку на высокопосещаемый проект

Снижение нагрузки на низкодинамичных проектах

тел.: +7 (812) 322-95-87 [email protected]

Разделение контента на полностью статический, условно-статический и высокодинамичный контент

Управляемое кеширование условно-статического контента

Page 9: Как снизить нагрузку на высокопосещаемый проект

Способы кеширования статического контента

тел.: +7 (812) 322-95-87 [email protected]

Использование заголовков “Cache-Control” и “Expires”(дает разрешение браузеру не перезапрашивать содержимое страницы, не спасает от «скачков» посещаемости)

Использование кеширующего прокси сервера в связке с заголовками “Cache-Control” и “Expires”(дает устойчивость к «скачкам» посещаемости, не позволяет оперативно управлять обновлением кеша)

Использование управляемого статического кеширования(решает все поставленные задачи)

Page 10: Как снизить нагрузку на высокопосещаемый проект

Управляемое статическое кеширование

тел.: +7 (812) 322-95-87 [email protected]

Посетитель

Internet

FE 1

FE 2

FE K

Посетитель

Посетитель

Посетитель

BE 1

BE 2

BE N

DB1

DB2

DB3

Page 11: Как снизить нагрузку на высокопосещаемый проект

Управляемое статическое кеширование (Сервера FE)

тел.: +7 (812) 322-95-87 [email protected]

Принимают все входящие подключения

Фактически самое ненагруженное звено в обработке запроса посетителя

Не обладает информацией о связи запроса с элементом динамической информации

В большинстве случаев это nginx (www.nginx.ru)

Page 12: Как снизить нагрузку на высокопосещаемый проект

Управляемое статическое кеширование. (Сервера FE)

тел.: +7 (812) 322-95-87 [email protected]

Nginx умеет

Сохранять полученный ответ в файлах по заранее определенному пути (директива proxy_store)

Определять наличие сохраненной копии файла

Отдавать готовые ответы из сохраненных копий

Nginx не умеет

Отслеживать корректность отдаваемых данных

Page 13: Как снизить нагрузку на высокопосещаемый проект

Управляемое статическое кеширование. Суть решения

тел.: +7 (812) 322-95-87 [email protected]

За ведение статического кеша отвечает nginx

Из nginx на уровень приложения (в случае если запрос посетителя обрабатывается приложением, а не берется из закешированной копии, передается путь к файлу, в который будет сохранен ответ (файл кеша))

На уровне приложения информация о связке информационных элементов и файла кеша сохраняется в БД (лучше всего подходят NoSQL базы данных)

При обновлении элемента информации на уровне приложения отдается команда на удаление файлов кеша по обновленному информационному элементу (можно делать это как прямой командой в nginx, который посредством встроенного perl сможет удалять файлы, так и через диспетчер очереди, в случае нескольких FE серверов)

Page 14: Как снизить нагрузку на высокопосещаемый проект

Управляемое статическое кеширование. Суть решения

тел.: +7 (812) 322-95-87 [email protected]

FE 1

Локальный кешЛокальный кеш

BE 1

Посетитель

Redis

Контент-менеджер

FE 2BE 2

AMQP

Обработчик очереди заданий

Удаление файлов

Page 15: Как снизить нагрузку на высокопосещаемый проект

Что не вошло в рамки этой презентации

тел.: +7 (812) 322-95-87 [email protected]

Способы очистки статического кеша и обработка исключительных ситуаций

Как хранить ключи в Redis так, чтобы БД не росла во времени от избытка ключей

Прочие тонкие моменты статического кеширования (сжатый и несжатый контент, заголовки с кодировкой и типом данных и т.д.)

Для чего еще можно использовать данное решение

Как сделать сервисы AMQP и Redis отказоустойчивыми

Page 16: Как снизить нагрузку на высокопосещаемый проект

А как же поисковые системы

тел.: +7 (812) 322-95-87 [email protected]

Весь внешний контент необходимо по максимуму включать в сохраненные в статическом кеше копии страниц

У копии страницы есть время жизни, после которого она удаляется (что приводит к перестроению страницы, и, следовательно, к обновлению данных для поисковых систем)

Необходимо помнить об альтернативных способах передачи информации в поисковые системы (RSS ленты и т.д.)

Page 17: Как снизить нагрузку на высокопосещаемый проект

www.lenvendo.ru

Спасибо за внимание!

тел.: +7 (812) 322-95-87 [email protected]

III место в рейтинге Best in digital 2013

в номинации «Разработка Highload систем»