Какая была максимальная пользовательская нагрузка

Ответ

Максимальная нагрузка, с которой я работал — около 50k активных пользователей в час, с пиковыми значениями до 1.5k RPS.

Оптимизации:

  • Кеширование API-запросов (React Query)
  • Ленивая загрузка компонентов и чанкинг (React.lazy)
  • CDN для статики (например, через Cloudflare)
  • Дебаунс для поисковых запросов

Пример оптимизации RPS:

// Дебаунс поиска
const debouncedSearch = _.debounce((query) => {
  fetchResults(query);
}, 300);

Метрики мониторились через Sentry + Grafana.

Ответ 18+ 🔞

Ну и вот, представляешь, сижу я как-то на проекте, который внезапно стал популярным, как шаурма в три часа ночи. И тут — бац! — нагрузка под 50 тысяч живых пользователей в час наваливается, а пики запросов так вообще до полутора тысяч в секунду доходят. Ебать мои старые костыли, я чуть со стула не упал! Удивление пиздец, честно.

Ну, а что делать? Пришлось мозги включать, блядь. Стал всё оптимизировать, как одержимый.

Что я там накрутил, чтобы всё не легло:

  • Кеширование запросов. Взял React Query, чтобы каждый чих в API не дергать. Зачем сто раз одно и то же грузить, если можно один раз засунуть в память и потом оттуда тырить? Логика же, ёпта.
  • Ленивая загрузка. Компоненты тяжелые, как чемодан без ручки, — React.lazy в помощь. Пусть грузятся только тогда, когда они реально нужны, а не все скопом при старте. Чанкинг — наше всё.
  • Статику на CDN. Картинки, скрипты — всё это погнал через Cloudflare. Пусть летят к пользователям с ближайшего сервака, а не плетутся через полпланеты.
  • Дебаунс для поиска. А то наш народ такой — букву вбил, уже результат хочет. Чтобы сервер не ебал сотню запросов на одно слово, поставил задержку. Три сотки миллисекунд — и нормально.

Вот, например, как поиск приструнил:

// Дебаунс поиска
const debouncedSearch = _.debounce((query) => {
  fetchResults(query);
}, 300);

Сидит теперь пользователь, печатает, а запрос улетает только когда он хоть немного остановится. Красота, блядь.

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