Skip to content

Highload-сценарии

В данном разделе описаны highload-сценарии, с которыми сталкивался в разработке, в том числе: rate limiting, кэширование, идемпотентность, очереди, нагрузочные прогоны и т.д.

Что использовано в проекте

  • Nginx rate limiting для динамических и чувствительных маршрутов;
  • application-level rate limiting в Laravel для login, refresh, reset password, export, download и других сценариев;
  • Redis для cache, locks, очередей, idempotency и инфраструктурного state;
  • revision-based кэширование списков в Redis;
  • ETag, Cache-Control, 304 Not Modified для повторных GET-запросов;
  • Idempotency-Key, replay cache и distributed locks для безопасных retry небезопасных операций;
  • отдельные queue worker-процессы для тяжёлых задач;
  • разделение web, queue и realtime-нагрузки по отдельным сервисам;
  • нагрузочные прогоны через k6 для оценки throughput, latency и деградации под пиками.

Какие сценарии это закрывает

  • всплески запросов к API и auth-endpoint-ам;
  • повторные запросы клиента при сетевых сбоях и retry;
  • тяжёлые операции, которые нельзя держать внутри синхронного HTTP-ответа;
  • повторные GET-запросы к спискам и публичным данным;
  • конкурентные обращения к одним и тем же write-операциям;
  • разделение обычной web-нагрузки, фоновых задач и realtime-событий.

Примеры из практики

  • для GET /api/v1/timezones используется точечный fastcgi_cache в Nginx;
  • для списков рецептов и saved recipes используется revision-based cache в Redis;
  • для API применяются ETag, 304 Not Modified и Cache-Control;
  • для POST/PUT/PATCH/DELETE используется idempotency middleware с replay cache и lock-ами;
  • генерация PDF вынесена в очередь с отдельным worker-процессом;
  • realtime-сценарии и очереди работают отдельно от основного web-потока;
  • для части auth, export и download сценариев заданы отдельные лимиты на уровне приложения и web-server.

Кэширование

Для кэширования использовал Redis cache, ETag, 304 Not Modified, Cache-Control и точечный fastcgi_cache в Nginx для публичных endpoint-ов.

Отдельно настраивал прикладное кэширование списков и ответов API, revision-based invalidation и conditional requests.

Более подробно: Кэширование

Очереди и фоновые задачи

Для тяжёлых и асинхронных операций выстраивал queue-driven flow с отдельными worker-процессами.

Сюда входили export jobs, генерация файлов, пост-обработка и настройка retry, timeout и прикладных статусов фоновых операций.

Более подробно: Очереди и фоновые задачи

API Performance

В API-сценариях работал с rate limiting, retry с backoff, Idempotency-Key, replay cache, distributed locks и conditional requests.

Основной фокус был на защите от всплесков запросов, безопасных retry небезопасных операций и корректном поведении API при дублях, сетевых сбоях и конкурентных запросах.

Более подробно: API Performance

Нагрузочное тестирование

Нагрузочные прогоны проводил через k6, проверяя поведение web-сценариев под разным уровнем нагрузки.

По результатам фиксировал baseline по RPS, latency, error rate и dropped_iterations, сравнивал публичные и авторизованные сценарии, отмечал границы деградации.

Более подробно: Нагрузочное тестирование

См. также

Сайт обновлен и проверен: