Что происходит с трафиком при недоступности интеграционного компонента
Что проверяют
Считаете ли вы отказ соседа своей проблемой. От кандидата уровня выше среднего ждут не перечисления паттернов, а механики: как именно недоступность чужого сервиса убивает ваш и в каком порядке это происходит.
Как отвечать
Разложите по шагам. Вызов к упавшему компоненту редко возвращает ошибку мгновенно, чаще он висит до таймаута. Каждый висящий вызов держит поток обработчика запросов, пул кончается, и ваш сервис перестаёт отвечать даже по тем ручкам, которые к интеграции отношения не имеют. Это каскадный отказ, и начинается он с отсутствующего или слишком большого таймаута.
Что называть дальше:
- явные таймауты на соединение и на чтение плюс ограничение времени всей операции;
- предохранитель: после серии ошибок вызовы перестают уходить и сразу отдают отказ, а изредка пропускается пробный запрос для проверки;
- изоляция ресурсов, свой пул на каждую интеграцию, чтобы один сосед не съел все потоки;
- повторы только для идемпотентных операций, с ограничением числа попыток и случайной добавкой к паузе;
- деградация: отдать кэш, значение по умолчанию или частичный ответ, если бизнес это допускает;
- перевод в асинхронный режим, когда ответ не нужен прямо сейчас: положить в очередь и обработать позже.
Закончите наблюдаемостью: доля ошибок и хвостовые задержки отдельно по каждой интеграции, тревога на открытый предохранитель.
Где спотыкаются
Сразу называют предохранитель, но не могут объяснить, кого он спасает. Соседу он не помогает никак, он бережёт вызывающего от исчерпания потоков и превращает медленный отказ в быстрый, а это и есть разница между деградацией и падением.
Повторяют запросы без ограничений. Когда сосед лежит от перегрузки, ретраи умножают трафик и не дают ему подняться. Повтор неидемпотентной операции вдобавок плодит дубли: ответ потерялся, а платёж на той стороне прошёл.
Путают отказ и недоступность. Ошибка с кодом приходит быстро и обрабатывается просто, а настоящая беда это отсутствие ответа: соединение открыто, данные не идут, и без таймаута поток стоит до упора.