Обработка перегрузки и повторные попытки при сбоях и временной недоступности зависимостей.
Retry
- Когда применять: при временных сбоях (сеть, таймаут, 5xx от зависимого сервиса); не при клиентских ошибках (4xx) и не при неидемпотентных операциях без idempotency key.
- Политика: экспоненциальный backoff (например, 1s, 2s, 4s) с jitter; ограничение числа попыток (например, 3–5); таймаут на одну попытку.
- Где: вызовы из сервисов к БД, Kafka, gRPC/HTTP к другим сервисам; на стороне клиента (API Gateway → Auth Service) при получении 503/временной ошибки.
- Идемпотентность: мутирующие операции с retry должны поддерживать idempotency key или быть безопасными при повторном выполнении; см. Backend / Idempotency. Потребители Kafka обрабатывают дубликаты по event_id.
Backpressure
- Назначение: при перегрузке не накапливать бесконечную очередь запросов и не усугублять падение зависимостей.
- Реализация: ограничение размера очереди задач; при переполнении — отказ с 503 или отложенная обработка с явным лимитом. У Kafka consumer’ов — контроль скорости обработки (batch size, pause/resume) при росте lag.
- Circuit breaker: при длительной недоступности зависимости прекращать отправку запросов на заданный интервал, затем пробовать снова; снижает нагрузку на падающий сервис и быстрее возвращает ошибку клиенту. Состояния: closed → open (при пороге ошибок) → half-open (пробный запрос) → closed или снова open.
- Rate limiting: на границе (API Gateway) — ограничение RPS по пользователю или по ключу; защита от перегрузки и злоупотреблений; см. API Gateway.
В платформе
- Outbox worker: при сбое публикации в Kafka — retry с backoff; сообщения остаются в outbox до успешной доставки; при длительном сбое Kafka — алерт и ручная проверка.
- gRPC-клиенты: таймауты и retry (при необходимости через middleware); при 503 от backend — retry на стороне вызывающего сервиса по политике.
- Consumer’ы Kafka: идемпотентная обработка по event_id; при падении — переобработка после рестарта; мониторинг lag для выявления отставания.
Связанные страницы
- Fault Tolerance — устойчивость к сбоям
- Backend / Idempotency — идемпотентность операций
- Backend / Error handling — обработка ошибок
- Async jobs and workers — outbox worker и consumers