Ограничьте время попытки и исключайте нездоровый экземпляр из выбора. Безопасный запрос можно повторить на другом инстансе в пределах общего deadline, но гарантировать успех при любом отказе нельзя.
Решение проблемы таймаута при отказе инстанса
Ограничьте время попытки и исключайте нездоровый экземпляр из выбора. Безопасный запрос можно повторить на другом инстансе в пределах общего deadline, но гарантировать успех при любом отказе нельзя.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В схеме взаимодействия:
- web‑приложение посылает запрос через шлюз + сервис‑дискавери (GW+SD);
- шлюз перенаправляет запрос к одному из экземпляров users‑api;
- выбранный экземпляр либо завис, либо не отвечает в отведённое время (таймаут).
Требуется описать подход, позволяющий при сбое отдельного экземпляра обеспечить пользователю корректный ответ, несмотря на возникший таймаут.
Ответ
Ограничьте время попытки и исключайте нездоровый экземпляр из выбора. Безопасный запрос можно повторить на другом инстансе в пределах общего deadline, но гарантировать успех при любом отказе нельзя.
Нужны health checks, балансировка, circuit breaker и ограниченный retry budget с backoff/jitter. Для изменяющей операции повтор допустим только с идемпотентностью: timeout не доказывает, что первый инстанс ничего не сделал. Если запас времени исчерпан, верните контролируемую ошибку или допустимый fallback. Не создавайте retry storm во всех слоях сразу.