Что такое highload

Что такое highload

Как системы работают с высокими нагрузками.

Сбой сервисов Facebook 5 октября 2021 года показал, что даже в FAANG не всегда могут справиться с высокой нагрузкой (highload).

Если приложение перестало справляться с потоком запросов, страницы возвращают 404, сервисы падают, а пользователи уходят, это и есть highload. Четких критериев highload не существует. При высоких нагрузках речь не всегда идет о тысячах пользователей. У вас может быть не более 100 запросов в сутки, но они будут передавать много данных. Highload для проекта может начинаться даже от 100 пользователей.

Что влияет на highload:

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

Вместе с Михаилом Михалевым, Software Engineer в Amazon и лектором курса «Архитектура высоких нагрузок», разбираемся, как работать с highload.

Как бороться с проблемами

Нельзя предсказать точные объемы онлайна или составить график выхода комплектующих из строя. Когда у вас вырастет количество пользователей, вы можете купить новый сервер. Но если их станет в 100 раз больше, архитектура столкнется с трудностями.

Highload-архитектура решает проблемы с железом, софтом и человеческим фактором, минимизируя стоимость обслуживания и разработки. Архитектор такой системы должен выбрать инструменты, которые сделают ее отказоустойчивой.

Михаил: «Основная задача архитектора любой системы — понимать требования бизнеса и технической стороны. Архитектура не бывает хорошей или плохой. Она бывает подходящей и неподходящей».

Для оценки масштабирования и возможных проблем необходимо оперировать цифрами. Сколько нужно добавить вычислительных ресурсов, если количество данных возрастет в 15 раз? Что, если число пользователей в пиковую загрузку будет в 5 раз больше? Отвечая на эти вопросы, учитывайте, что:

  • пользователи должны иметь постоянный доступ к вашим сервисам (High Availability);
  • пользователи не должны долго ждать ответа от сервера (Latency), например, корзина в магазине не должна обновляться 5 минут;
  • сервис должен иметь возможность расширяться (High Scalability).

Комплектующие, софт, человеческий фактор

Для повышения надежности жестких дисков вы можете объединять их в Redundant Array of Independent Disks (RAID) — логический модуль из нескольких дисков.

Процессоры и RAM могут быть hot-swappable (подлежать замене без отключения оборудования). Если пропадет электроэнергия, в серверной будет дизельный генератор.

Что касается софтверной части, вы можете изолировать процессы и сервисы, чтобы они не утащили за собой систему в случае падения. Также помогает балансировщик — прослойка, которая принимает запрос и (в зависимости от алгоритма) возвращает пользователю адрес свободного сервера или базы данных (БД). Балансировщик может делать это несколькими способами, например, по очереди (Round Robin), отталкиваясь от географической привязки пользователя (GEO DNS) или загрузки источника данных.

Польза от балансировки не ограничивается перераспределением запросов. Она также решает проблемы с масштабированием. Например, вы можете делать резервные копии данных на нескольких серверах сразу и перераспределять их работу в связи с обновлением системы.

Но балансировка может справиться не со всеми трудностями.

Серверы почти всегда имеют разные мощности и часто выходят из строя, а запросы кэшируются. Сложная логика может привести к длительной обработке запроса. В итоге пользователь может попасть на неработающий сервер.

Не храните данные в одной таблице и даже одной БД, проверяйте, логируйте и анализируйте работу всех служб.

Права и доступы следует разграничивать, а все действия пользователей — записывать. Только у пользователей, ответственных за инфраструктуру, должна быть возможность изменять конфигурацию системы и подключать внешние устройства. Для того чтобы отделить критически важные частные сервисы от общедоступных, вы можете создать демилитаризованную зону (DMZ).

Источник: networkguru

Большинство этих проблем решают инструменты облачных платформ, например, Amazon Web Services.

Михаил: «Ключевые тренды последних лет в высоконагруженных приложениях:

  • переход на облачные решения. Они снижают порог входа в хайлоад и позволяют забыть о микроменеджменте масштабируемости.
  • тесная интеграция с анализом данных (от анализа логов до машинного обучения по заказам пользователей). Архитектура приложений усложняется, и важным требованием является поддержка инструментов аналитики и обработки данных».
Ещё статьи
Как упростить разработку.
Data science, web development, gamedev и не только.