Устойчивость сайтов и веб‑приложений к нагрузкам
Для эффективного ведения бизнеса сайт должен выдерживать нагрузку и работать без перебоев. Однако причин для сбоев из‑за нагрузки немало: это низкое качество хостинг-провайдеров, простой, резкий рост посещаемости, к которому проект не был готов, а также DoS‑атаки.
Под устойчивостью к нагрузкам понимается способность приложения качественно работать при высоком количестве запросов со стороны пользователей. Наиболее важными показателями нагрузки сервиса являются пиковые значения количества просмотров в минуту и список наиболее востребованных сервисов.
Повысить устойчивость сайта к нагрузкам можно несколькими способами. Самое простое — это повышение быстродействия системы (высокая скорость обработки запросов позволяет за единицу времени обслужить большее количество посетителей). Когда этих мер недостаточно, то производится масштабирование системы (увеличение количества серверов). Это может быть как относительно простое вертикальное масштабирование (увеличение ресурсов одного сервера), так и более сложное горизонтальное (обеспечение согласованной работы нескольких экземпляров приложения на кластере серверов или в облаке). Вертикально можно масштабировать любые приложения, но у этой схемы есть лимит: более чем в несколько раз повысить производительность не получится, хотя для подавляющего большинства проектов этого вполне достаточно. Предела не имеет горизонтальное масштабирование, но это способ подходит только для тех сайтов, которые были при разработке адаптированы под такую схему работы.
Отдельно стоит сказать про DoS‑атаки (атаки типа «отказ в обслуживании»). Производятся они путём создания огромного числа обращений к сайту, в результате чего сайт либо «тормозит», либо вообще прекращает справляться с обработкой запросов. Провайдеры виртуальных хостингов с атакуемыми сайтами поступают очень просто — их отключают до тех пор, пока атака не прекратится. На выделенных серверах от слабых и даже средних по силе атак можно без проблем защититься своими силами. Действительно сильные атаки стоят очень немалых денег для их заказчика, но и защита от них требует технически более сложных решений или обращения в специализированные компании.
Тематические статьи
Под быстродействием веб‑приложений понимается метрика, отражающая средний временной интервал от запроса пользователя до готовности страницы к взаимодействию в браузере. Быстродействие зависит от серверного оборудования и настройки серверного ПО, а также от качества реализации бэкенд- и фронтенд-частей сайта. Воспринимаемая пользователями скорость работы определяется суммой времязатрат на работу серверного оборудования, бэкенда и фронтенда. В каждом из этих направлений есть набор хороших практик и оптимизаций, которые позволяют улучшить быстродействие.
Если к сайту или веб‑приложению предъявляются требования к быстродействию и устойчивости к высоким нагрузкам, то встаёт вопрос о выборе между кластерным и облачным решением. Оба варианта способны обеспечить отличное масштабирование, поэтому выбор чаще всего основан на экономических критериях.
Если простым языком, то серверное кеширование — это ряд технологий, которые позволяют «запоминать» один раз полученные или созданные данные, а затем многократно использовать их повторно, что способствует увеличению скорости отклика и снижает нагрузку на серверное оборудование.
Сайт может работать быстрее, если выполнены следующие рекомендации по оптимизации JS‑кода. Если же этого не сделать, то сайт будет недостаточно быстро отображаться на стороне клиента.
Сайт может загружаться и отображаться быстрее, если выполнить следующие рекомендации по оптимизации HTML‑разметки, без которых скорость загрузки и отрисовки будет ниже.
Время загрузки и отрисовки сайта в браузере можно заметно снизить, если воспользоваться следующими советами.
nginx — это простой, быстрый и надёжный сервер. Применение nginx очень эффективно для отдачи статического контента и в качестве прокси‑сервера перед динамическими сайтами.
Redis — сетевое журналируемое хранилище данных типа «ключ — значение», которое обрабатывает данные в оперативной памяти и обладает механизмами снимков и журналирования для обеспечения постоянного хранения. Хранилище поддерживает строки, списки, хеши, обычные и сортируемые множества, потоки (streams) и другие типы данных.
Sphinx и Elasticsearch — это поисковые «движки», которые обеспечивают более быстрый поиск и фильтрацию по сравнению с реляционными базами данных, а также предоставляют возможность использования многих полезных функций поиска: учитывают морфологию языка, осуществляют фасеточный поиск, работают со стоп‑словами, поддерживают выборочную индексацию и позволяют настроить формулу определения релевантности документов.