Рассылка или акция роняет сервис
Пик создаёте вы сами: сообщение уходит всем сразу, и за несколько минут приходят те, кто обычно заходит за неделю. Среднее значение нагрузки спокойное, а страницы не открываются.
Высоконагруженный B2C-сервис ломается не от числа пользователей в месяц, а от того, сколько их приходит в одну минуту после рассылки, старта продаж или события. Поэтому мы начинаем с профиля пиков, а не с выбора технологий: измеряем, где сервис упирается, проектируем кэш, очереди и порядок деградации и проверяем результат нагрузочным испытанием на вашем профиле. Новый сервис закладываем с нуля, действующий лечим по узким местам.
Обследование и замеры — от 200 000 ₽, 2–3 неделиПроверка нагрузочным испытанием по профилю пика, а не по среднемуИсходный код в вашем репозитории с первого коммита
Пик создаёте вы сами: сообщение уходит всем сразу, и за несколько минут приходят те, кто обычно заходит за неделю. Среднее значение нагрузки спокойное, а страницы не открываются.
Часто виновата не вся система, а одна операция: тяжёлый запрос, блокировка записи или медленный внешний сервис.
Никто не знает, где предел. Он находится испытанием, а не догадкой в день запуска рекламы.
Часть решений нужно принять до первой строки кода: что кэшируется, что идёт через очередь, что отключается при перегрузке. На живом сервисе их менять труднее.
У одного сервиса бывает несколько профилей, и каждый лечится своим приёмом.
Фраза «нужно выдержать много пользователей» не задание. Задание получается из нескольких измеренных или принятых величин.
Сервис с большой базой, куда заходят раз в месяц, нагружен слабее сервиса с небольшой базой, которой разом приходит уведомление. Поэтому на обследовании мы выясняем четыре вещи.
Сценарии берутся из реального профиля запросов: набор операций и их доли переносятся из журналов, а не придумываются равномерным потоком. Нагрузку поднимаем ступенями до отказа и записываем, что отказало первым: процессор приложения, соединения с базой, одна блокировка, очередь или чужой сервис. После исправления повторяем то же испытание на тех же данных. Настоящие персональные данные на стенд не переносятся, их обезличиваем или генерируем.
Число одновременных пользователей на выходе мы называем только по замерам на вашем стенде и не переносим с других проектов.
Каждый приём снимает один вид нагрузки и приносит свой риск.
К нагрузке от людей в массовом сервисе добавляются боты, перебор паролей и сборщики данных.
Вход ломается первым: все приходят в него одновременно, а он обращается и к базе пользователей, и к хранилищу сессий, и часто к сервису отправки кодов.
Серверные сессии в быстром хранилище (Redis или совместимое) позволяют мгновенно закрыть вход конкретного человека, но обращаются к хранилищу при каждом запросе. Подписанные токены с коротким сроком не требуют этого, но досрочно их отозвать труднее. Выбор зависит от того, что важнее: мгновенный отзыв или разгрузка. В обоих случаях права проверяются на сервере на каждый запрос.
Ограничения задаются отдельно для входа, восстановления пароля, отправки кодов, поиска и оплаты, а не одной общей цифрой. Ключ ограничения — не только адрес: за одним адресом могут сидеть многие люди, а перебор идёт с разных адресов. Превышение не превращается в тихую ошибку: пользователь видит понятное сообщение, а команда видит всплеск в мониторинге.
Если событие даёт доступ к ограниченному числу мест, а желающих больше, честнее поставить «зал ожидания»: пускаем порциями, остальные видят своё место. Размер порции подбирается испытанием.
Лучше упрощённая работа основного сценария, чем медленная работа всего.
Остаток товара, лимит купона, число мест: множество запросов обновляют одну запись и ждут друг друга. Решается порядком обновления и короткими транзакциями.
У базы ограничено число подключений. Когда приложение держит их дольше нужного, пик упирается сюда, а процессор простаивает.
История действий и журнал заходов растут быстрее остальных, копирование и обновление структуры затягиваются. Нужны разбиение по времени и правила хранения.
Выгрузка для маркетинга занимает базу в часы пик. Отчёты уходят на реплику или в отдельное хранилище.
Цены — по тарифам. Точная сумма называется только у обследования, дальше вилка, которая сужается. Остановиться можно после любой ступени.
Профиль нагрузки по журналам, замеры узких мест, нагрузочная модель, целевая схема и порядок деградации. На выходе вилка бюджета. Вычитается из первого этапа, если продолжаете с нами.
Сервис с платёжным провайдером, 1С, CRM, рассылками: схема обменов и то, что останавливается при сбое каждой системы.
Устраняем самое дорогое место и доказываем повторным испытанием на тех же данных: кэш, переписанный запрос, очередь для одной операции.
Вынос тяжёлых операций, реплики, виртуальная очередь входа, новая схема хранения событий. Переход этапами.
Перенос боевой нагрузки по этапам, опытная эксплуатация на пиковом событии, регламент проверок восстановления, приёмка.
Мониторинг, обращения, разбор инцидентов, подготовка к известным пикам. Плановые доработки с пакета на 60 000 ₽. Сверх пакета — 5 000 ₽ в час.
Берём журналы, снимаем профиль запросов, находим первые узкие места, спрашиваем бизнес о ближайших рассылках, акциях и запусках.
Принимаем с вами профиль пика, список того, что нельзя ронять, и порядок отключения остального.
Устраняем одно узкое место и повторяем испытание.
Переносим остальное по частям, перед важным событием прогоняем испытание и репетируем отключение функций.
Передаём код, инструкцию по развёртыванию, регламент реагирования и мониторинг.
Сервис с просмотрами и сервис с продажей ограниченного ресурса стоят по-разному. Каждое горячее место добавляет и проектирование, и испытание.
Обещание «работаем всегда» в договорах с пользователями меняет архитектуру. Что именно вы обещаете, разобрано в статье о <a href="../blog/chto-znachit-sla-tri-devyatki/">доступности «три девятки»</a>.
Если нет журналов, мониторинга и тестового стенда, часть обследования уходит на то, чтобы их получить.
Платёжный провайдер, отправка кодов и 1С ограничивают пропускную способность, и чужие ограничения мы не меняем.
Эта страница про сервис для массового пользователя, где главный риск связан с пиками. Если у вас закрытая корпоративная система с долгими отчётами и релизами раз в квартал, смотрите микросервисы и высокую нагрузку. Выбор между монолитом и сервисами описан в статье «Микросервисы или монолит»: для большинства B2C-сервисов на старте достаточно монолита с правильным кэшем и очередью.
Если сервиса ещё нет, начните со веб-сервиса или веб-приложения. Если вы продаёте доступ компаниям, а не людям, это SaaS-платформа. Если нужен кабинет к данным учёта, хватит личного кабинета. Если проблема в обмене с внешними системами, начинают с API и бэкенда. Состояние кода покажет аудит кода и архитектуры.
Порядок подготовки по узким местам: что измерять до запуска, что кэшировать, что откладывать и как репетировать пик.
Какой простой допускает каждая цель по доступности и что проверить до подписания обязательств перед пользователями.
Когда хватает монолита с кэшем и очередью, а когда пора выделять сервис.
Сорок минут созвона: когда и от чего у вас бывают всплески, что в сервисе нельзя ронять и что известно о ближайших запусках. По итогам скажем, с какой ступени начинать и в какую вилку это укладывается.
Начинаем с обследования: 200 000 ₽ за один контур, 350 000 ₽ при нескольких системах. Дальше пилот на узком месте (150 000–400 000 ₽) или на нескольких частях архитектуры (400 000–1 200 000 ₽), вывод в эксплуатацию от 1 500 000 ₽ этапами по 300 000–700 000 ₽. Обследование вычитается из первого этапа, если продолжаете с нами.
Без замеров на вашем стенде число называть нельзя, и мы его не называем. Нагрузка зависит от того, что люди делают в пик, от базы, внешних сервисов и скорости роста пика. Результат испытания записывается как профиль, при котором сервис работает в заданных пределах, и как первое, что отказывает при превышении.
Чаще всего нет. Для первой версии обычно достаточно монолита с кэшем, репликами чтения, очередью и вынесенными в фон тяжёлыми операциями. Сервисы выделяем, когда есть причина: разная скорость изменений, разные требования к нагрузке или несколько команд.
Иногда да: кэш, очередь входа и вынос тяжёлых операций снимают нагрузку без нового оборудования. Если упирается сама мощность, это покажет испытание, и мы так и скажем. Стоимость оборудования и облака мы не называем, она зависит от вашего поставщика.
На уровне приложения: ограничения запросов по ключам, защита входа от перебора, виртуальная очередь, проверка прав на сервере. Защиту от атак на сетевом уровне вы получаете у своего провайдера, мы её как услугу не оказываем.
Да. Сервис работает на ваших серверах или у выбранного вами хостера. Персональные данные граждан России обычно должны храниться на серверах в России, это учитывается при выборе размещения. Юридические вопросы решает юрист заказчика.
Мы в Ростове-на-Дону, работаем с заказчиками по всей России: удалённо и в вашем контуре. Доступ к системам и обследование согласуем на старте с вашей службой безопасности.