Используйте ограниченные timeout и retry с backoff, circuit breaker, лимиты конкурентности и идемпотентность. Неопределённый исход записи нужно сверять, а не повторять вслепую.
Методы обеспечения отказоустойчивости при работе с ненадежными внешними API
Используйте ограниченные timeout и retry с backoff, circuit breaker, лимиты конкурентности и идемпотентность. Неопределённый исход записи нужно сверять, а не повторять вслепую.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Система обращается к внешним API, которые могут вести себя непредсказуемо:
- длительно не отвечать (тайм‑ауты);
- возвращать ошибки (техническое обслуживание, ограничения по запросам);
- частично терять передаваемые данные. Требуется спроектировать механизм, позволяющий сервису надёжно взаимодействовать с такими API, обеспечивая корректную обработку запросов даже при временной недоступности или возникновении ошибок.
Ответ
Используйте ограниченные timeout и retry с backoff, circuit breaker, лимиты конкурентности и идемпотентность. Неопределённый исход записи нужно сверять, а не повторять вслепую.
Отделите временные ошибки от постоянных: часть 5xx и сетевых сбоев допускает повтор, ошибки формата или прав обычно требуют исправления запроса. Учитывайте Retry-After и общий deadline, добавляйте jitter, чтобы клиенты не повторяли одновременно.
Circuit breaker временно прекращает вызовы нестабильного сервиса; отдельные пулы и очереди изолируют его влияние. Для изменяющих операций используйте idempotency key и сохранённое состояние. Timeout после отправки не доказывает, что операция не выполнена: запросите её статус или проведите reconciliation. Проверяйте полноту и схему ответа, учитывайте частичные успехи. Логи не должны содержать токены и сырой пользовательский payload.