Добавить в корзинуПозвонить
Найти в Дзене
hoster.by

5 способов улучшить производительность ресурса и подготовить онлайн-проект к увеличению нагрузки

«С моей компанией такого не случится» Наверняка примерно так думают руководители компаний накануне серьезных сбоев. Неподготовленность к запуску нового сервиса, партнерской акции или старту продаж лимитированной линейки может обернуться ошибками 404 и 503. Перегрузки системы чреваты различными потерями, включая финансовые. Вот пример из мировой практики: одной крупной сети магазинов самообслуживания 16 часов простоя ресурса стоили $11 000 000. В зоне риска только крупные компании и новые запуски? Нет. Нехватка мощности или банальный недочет в настройках системы может вызвать ошибку сервера или замедлить ресурс любого масштаба. И чем же опасна недоступность ресурса? Упущенная выгода. Пользователя, который не может оформить заявку или сталкивается с медленной работой сервиса, можно потерять навсегда. А вместе с ним — и потенциальные оплаты в длительной перспективе. Слив бюджета. Вложились в рекламу, а ресурс прилег на пике кампании? Считайте, деньги потрачены впустую. Имиджевые потер

«С моей компанией такого не случится» Наверняка примерно так думают руководители компаний накануне серьезных сбоев. Неподготовленность к запуску нового сервиса, партнерской акции или старту продаж лимитированной линейки может обернуться ошибками 404 и 503. Перегрузки системы чреваты различными потерями, включая финансовые. Вот пример из мировой практики: одной крупной сети магазинов самообслуживания 16 часов простоя ресурса стоили $11 000 000. В зоне риска только крупные компании и новые запуски? Нет. Нехватка мощности или банальный недочет в настройках системы может вызвать ошибку сервера или замедлить ресурс любого масштаба. И чем же опасна недоступность ресурса? Упущенная выгода. Пользователя, который не может оформить заявку или сталкивается с медленной работой сервиса, можно потерять навсегда. А вместе с ним — и потенциальные оплаты в длительной перспективе. Слив бюджета. Вложились в рекламу, а ресурс прилег на пике кампании? Считайте, деньги потрачены впустую. Имиджевые потери. Столкнувшись со сбоями в работе ресурса, клиенты и партнеры сделают выбор в пользу конкурентов. А заодно поделятся своим опытом с другими. Потеря позиций в SEO. Целевой трафик — один из самых доступных для проекта. Однако поисковики крайне щепетильны к работе сайта и учтут в поисковой выдаче даже короткий сбой или небольшое снижение скорости загрузки страниц. Риски безопасности. Ресурс, который не справляется с нагрузкой, может оказаться более уязвим к киберугрозам. Например, DDoS может не только положить сайт, но и послужить маскировкой для других атак. Причины недоступности онлайн-проектов Для анализа нагрузки на систему можно посмотреть, какие процессы, запущенные на сервере, потребляют больше всего ресурсов. Это могут быть базы данных, выполнение кода, веб-сервер, системные процессы и службы, а также cron-задания. Следовательно, и причинами сбоя или недоступности проекта часто может стать нехватка мощности, ошибки в работе БД и приложения. Или вовремя не перевыпущенный SSL: бесплатный сертификат по умолчанию активируется только на 3 месяца. А еще вывести из строя ресурс могут вредоносные боты, DDoS и другие кибератаки. Таким образом, оптимизировать нагрузку на систему можно на уровне инфраструктуры, приложения или БД, а также конфигурации сервера. И при этом важно уделить внимание и кибербезопасности. Давайте рассмотрим способы, которые помогут повысить производительность системы и избежать критических последствий. 1. Кэширование Ускорить работу ресурса и при этом снизить нагрузку на сервер можно, отправив редко обновляемый контент в кэш. Тогда системе не придется раз за разом генерировать одни и те же компоненты, а пользователи смогут быстрее взаимодействовать с сервисом. Например, в веб-сервере Nginx можно настроить кэширование элементов сайта, которые редко меняется: допустим, страницы каталога. А ускорить приложение можно при помощи Redis и Memcached. Еще настроить кэширование можно и для баз данных с поддержкой MySQL Query Cache. Тогда БД сохранит в RAM часто запрашиваемые результаты, например для команд SELECT. И при выполнении таких запросов система сначала будет проверять наличие результатов в кэш. А в случае совпадения выведет данные без полной обработки команды и, следовательно, сэкономит время и ресурсы серверы. 2. Оптимизация работы баз данных Повысить эффективность запросов к БД и ускорить выполнение команд можно при помощи распределения и оптимизации запросов. Начнем с первого — для этого можно реализовать горизонтальное масштабирование с главным сервером и репликами. Write Master — один Мастер-сервер обрабатывает все операции на изменение данных, например добавление заказов. Read Replicas — несколько серверов, которые копируют данные с Мастера и принимают запросы только на чтение. Например, поиск и просмотр статей. Весьма эффективно для интернет-магазинов, где 80—90% команд — это чтение. Повысить производительность БД также можно за счет оптимизации запросов. И в этом поможет правильное использование индексов, которые содержат значения столбцов и ссылки на нужные строки. А потому ускоряют фильтрацию, например для условий WHERE, JOIN, ORDER BY. Но в то же время замедляют команды на запись и удаление: insert, update, delete. Поэтому нужно использовать индексы с точными критериями и для часто используемых полей. Допустим, 90% пользователей вашего ресурса проживает в Беларуси, и вы планируете провести офлайн-встречу в столице. В таком случае нет смысла использовать поле для стран. А вот создание индекса city поможет быстрее выделить среди пользователей минчан. Минимизация запросов к БД Прием эффективен, например, для устранения проблемы N+1 — когда для получения данных код сначала обращается к какому-то набору записей, а затем проводит дополнительные запросы к каждой из них. Исправить ситуацию можно при помощи жадной загрузки (eager loading). И тогда вместо множества запросов будут использоваться всего два. Например, у нас есть две таблицы: users — с пользователями и orders — c заказами. Неправильный запрос вида users = User.query.all() for user in users: print(user.orders) приведет к выполнению множества дополнительных команд: SELECT * FROM users; SELECT * FROM orders WHERE user_id = 1; SELECT * FROM orders WHERE user_id = 2; И так далее — вплоть до полной проверки всех пользователей в первой таблице. Если там таковых 1000, то будет выполнено 1 + 1000 запросов, что существенно замедлит систему и потребует больше мощности. Решить проблему и вывести данные можно одним жадным запросом: users = User.objects.prefetch_related('orders') И тогда система выполнит не 1001, а всего 2 запроса: SELECT * FROM users; SELECT * FROM orders WHERE user_id IN (1, 2, 3, ..., 1000); 3. Оптимизация работы приложения на бэкенде и фронтенде Повысить производительность системы также можно и на уровне приложения: за счет асинхронности задач, оптимизации кода и фронтенда. Асинхронность Если на сервере выполняются тяжеловесные процессы, посетители ресурса могут столкнуться с 500-ми ошибками из-за банального таймаута. Чтобы этого избежать, можно реализовать асинхронность: сложные операции отправить на бэкенд, а пользователям выводить контент на фронтенде. Не самые срочные задачи перенесите в фоновые процессы. Например, отправку на email подтверждения заказов и уведомления, генерацию PDF-чеков, интеграции с 1С/CRM и длительную обработку данных. Используйте брокеры сообщений RabbitMQ и Redis для очереди процессов и системы воркеров: Celery для Python, Sidekiq для Ruby, Laravel Queues для PHP. Например, можно показывать пользователю на фронтенде анимацию запуска сервиса, пока этот самый сервис действительно запускается на бэкенде. Профилирование Прием, при помощи которого можно определить и устранить наиболее медленные участки загрузки программы — они же узкие места. Выбор инструмента зависит от языка. Например, Xdebug и Blackfire используются для PHP, а Py-Spy и cProfile — для Python. Оптимизация Frontend Для улучшения производительности ресурса можно оптимизировать и элементы фронтенда. Например, ускорить работу интернет-магазина можно при помощи автоматического сжатия изображений и их конвертации в современные форматы WebP при загрузке товаров. Lazy Loading — еще один способ повысить производительность системы. Благодаря этому подходу можно загружать медиаконтент постепенно и по мере необходимости, а не весь сразу. Например, у вас есть карточка товара с фотографиями или статья с картинками. При использовании Lazy Loading такие изображения начнут загружаться не моментально при открытии страницы, а лишь когда пользователь до них доберется. Браузерное кэширование Повысить отзывчивость сайта или приложения можно и за счет повторного использования ранее загруженного контента. Таким образом сохраненный в браузере кэш уменьшает сетевой трафик и время, необходимое на загрузку и вывод страниц сайта. Это можно обеспечить за счет корректной настройки HTTP-заголовков. Например, в Cache-control можно указать: сохранять ли кэш вообще и если да, то как именно. А ETag проверит актуальность сохранненых данных относительно посещенных ранее страниц сайта. 4. Апгрейд инфраструктуры Миграция в облако Верный шаг для повышения доступности проектов с динамической нагрузкой. Напомним, облачная инфраструктура создается при помощи платформы виртуализации на нескольких физических серверах. И таким образом реализуется отказоустойчивость на программном и аппаратном уровнях. При этом у нас вы можете разместить проект сразу в двух дата-центрах и тем самым обеспечить еще более высокий уровень надежности. Резервирование данных и оборудования Если используете физические серверы или размещаете проект локально, позаботьтесь о критически важных моментах: Обязательно храните резервные копии на отдельном сервере. Резервируйте оборудование, подключив дополнительный сервер и создав кластер. При нехватке ресурсов переходите на более мощные физические и облачные серверы с быстрыми NVMe-дисками. Балансировка нагрузки Снизить нагрузку на систему поможет и балансировка трафика. Ее можно настроить при помощи haproxy, веб-сервера nginx, других сервисов или наших решений. Например, при помощи облачного маршрутизатора и правил NAT можно включить балансировку сетевого трафика. И тогда виртуальный роутер будет распределять запросы между диапазоном указанных ip-адресов. Также балансировка нагрузки доступна в нашем сервисе для комплексной защиты веб-проектов — hoster Guard. Мониторинг инфраструктуры Следите за нагрузкой системы. Осмысленно настраивайте пороговые значения для метрик и получайте уведомления на удобные для вас каналы. Тогда вы сможете узнать о нехватке мощности раньше, чем у пользователей начнутся сбои. Держать руку на пульсе системы помогут различные инструменты. Мониторинг облачной инфраструктуры. Сервис для клиентов нашего облака. Показывает на понятных дашбордах все метрики сервера: CPU, RAM, Disk и другие. При этом можно включить алерты и при достижении указанных пределов получать SMS и email-уведомления. Администрирование серверов. Доверьте контроль за доступностью вашего ресурса опытным инженерам. Наши специалисты настраивают резервные копии, диагностируют ошибки и восстанавливают работоспособность при сбоях. А еще вы получаете от 250 Гб дискового пространства для хранения бэкапов. Системы мониторинга. Обеспечить мониторинг не только серверов, а всей IT-инфраструктуры помогут Prometheus в связке с Grafana, а также Nagios, Elasticsearch (ELK, EFK), Monitorix, CloudWatch, Stackdriver и множество других решений. А наши специалисты всегда помогут с установкой и настройкой. 5. Нагрузочное тестирование Лучший способ проверить готовность к скачкам нагрузки — это испытать систему заранее. Поэтому, прежде чем запускать рекламу, проведите нагрузочное тестирование. Для этого выберите подходящее время и предупредите команду. Супер, если в штате есть разработчик и администратор, которые помогут исправить нюансы. Если нет — мы на связи. Цель тестирования — выяснить максимальную пропускную способность системы и найти проблемные зоны до реального пика нагрузки. В этом помогут различные инструменты: JMeter, Locust, k6, Gatling, облачные сервисы Loader.io и BlazeMeter. В ходе тестирования имитируйте реальное поведение пользователей: просмотр каталога, поиск товара, добавление в корзину и оформление заказа. При этом уделите особое внимание самым сложным операциям: поиску и подбору, работе корзины, проведению оплаты. Проводите тестирование на полной и актуальной продакшен-версии ресурса, включая кэш и базы данных. При этом важно проверить отказоустойчивость: например, что будет если упадет один сервер БД или бэкенда? Безопасность: защита от DDoS и других кибератак Данные пользователей и сами онлайн-проекты — всегда под прицелом хакеров. При этом в разгар сезонных акций повышается активность DDoS и других кибератак. Позаботиться о безопасности ресурса поможет наше комплексное решение для защиты веб-проектов hoster Guard. Сервис включает множество модулей и возможностей. WAF (Web Application Firewall) защищает от SQL-инъекций, XSS, и других распространенных киберугроз. AntiDDoS обеспечивает ресурсу надежную защиту от объемных и прикладных DDoS-атак. Когда можно определить регион кибератаки, помогут геоблокировки. Rate Limiting. Для защиты от ботов и скриптов поможет ограничение количества запросов с одного IP к форме авторизации, добавлению в корзину, полю поиска и другим. Защита от взлома. Умная captcha защитит ресурс от автоматического подбора паролей и других действий ботов. Индивидуальная настройка. А при помощи черных и белых списков, ACL и других модулей можно самостоятельно указать параметры для блокировки запросов исходя из особенностей трафика вашего проекта. Также не забывайте следить о сроке действия SSL-сертификата. Отключение SSL делает ресурс уязвимым и может привести к его недоступности. Как вариант — можно перейти на сертификаты от GlobalSign, которые выпускаются сразу на год. Формула высокой доступности ресурса Подведем итог. Чтобы обеспечить сайту или приложению с непрогнозируемой нагрузкой высокую доступность, рекомендуем: Позаботиться о запасе мощности инфраструктуры Реализовать отказоустойчивость и резервирование данных Обеспечить балансировку нагрузки и кэширование на всех уровнях Подключить инструменты защиты Оптимизировать работу приложения И мы поможем решить вам все эти задачи при помощи наших сервисов. Облачная инфраструктура Отказоустойчивость, гибкость и масштабируемость — всё это про размещение в облаке. Можно увеличить мощность в любой момент, например на время акции, а потом — вернуть параметры конфигурации назад. И при этом оплачиваются только используемые ресурсы. Сервис включает автоматические резервные копии. В качестве дополнительной услуги можно скачивать папки и файлы из бэкапов. А еще можно подключить мониторинг облачной инфраструктуры, чтобы следить за нагрузкой и получать уведомления при достижении пороговых значений. IT-аутсорсинг Доверьте обслуживание серверов опытным инженерам. Услуга включает проактивный мониторинг с предотвращением сбоев, настройку бэкапов и оптимизацию производительности. Наши специалисты также могут установить систему мониторинга на выбор для всей вашей инфраструктуры. При этом вы можете доверить нам на сопровождение контейнерные приложения, облачные сервисы и множество других решений и технологий. hoster Guard Наше комплексное решение для защиты сайтов и приложений от взломов, вредоносных ботов, DDoS и большинства других кибератак. Сервис поддерживает геоблокировки и индивидуальную настройку фильтрации запросов. Благодаря множеству модулей и удобному управлению вы сможете обеспечить своему проекту надежную защиту от киберугроз. А за счет балансировки нагрузи и блокировки нежелательного трафика, включая ботов и парсеров, повысите производительность ресурса. ]]>