Highload-сценарии
В данном разделе описаны highload-сценарии, с которыми сталкивался в разработке, в том числе: rate limiting, кэширование, идемпотентность, очереди, нагрузочные прогоны и т.д.
Что использовано в проекте
Nginxrate 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, сравнивал публичные и авторизованные сценарии, отмечал границы деградации.
Более подробно: Нагрузочное тестирование