Задайте общий deadline, независимые таймауты и ограниченную параллельность внешних вызовов. Быстрые результаты не должны ждать бесконечно медленные или нестабильные зависимости.
Есть сервис, который агрегирует данные из пяти внешних систем: одна отвечает быстро, две медленные, одна нестабильная. Как спроектировать интеграцию, чтобы сервис оставался отказоустойчивым и предсказуемым по времени ответа?
Задайте общий deadline, независимые таймауты и ограниченную параллельность внешних вызовов. Быстрые результаты не должны ждать бесконечно медленные или нестабильные зависимости.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Задайте общий deadline, независимые таймауты и ограниченную параллельность внешних вызовов. Быстрые результаты не должны ждать бесконечно медленные или нестабильные зависимости.
Сначала уточните поведение пятой системы и обязательность каждого источника: в условии описаны только четыре из пяти. Для необязательных данных допускайте частичный ответ или кеш с меткой свежести; для обязательных — явную ошибку в пределах deadline. Добавьте bulkhead, circuit breaker и ограниченные retry с jitter лишь для безопасных повторов. У отменённых запросов освобождайте ресурсы. Наблюдайте latency и ошибки отдельно по источникам, а также общий p95/p99. Если SLA источника не укладывается в синхронный ответ, используйте фоновое обновление или асинхронный результат.