Выбор ответа Senior Надёжность и наблюдаемость обновлено

Ретраи на каждом уровне

Вопрос

Клиент вызывает сервис A, A вызывает B, B вызывает C. Клиент, A и B при ошибке делают до 3 попыток каждый (всего 3 вызова, включая первый). C всегда отвечает ошибкой. Сколько вызовов получит C на одно действие пользователя?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: 27. Клиент делает 3 вызова A, каждый вызов A делает 3 вызова B, каждый вызов B делает 3 вызова C: 3 × 3 × 3 = 27.

Варианты ответа

  1. 3
  2. 9
  3. 81
  4. 27правильный ответ

Разбор

Клиент делает 3 вызова A, каждый вызов A делает 3 вызова B, каждый вызов B делает 3 вызова C: 3 × 3 × 3 = 27. Ответ 3 учитывает только ретраи B, 9 забывает про клиента, 81 добавляет лишний уровень ретраев, которого у C нет. Это retry storm: ретраи многократно умножают нагрузку на уже больной сервис. Лечится ретраями только на одном уровне, бюджетом ретраев и circuit breaker.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.