Повтор запроса и backoff
Вопрос
Как правильно повторять неудавшийся запрос?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
повторять только идемпотентные операции и только сетевые ошибки
5xx и таймаут повторять можно, 4xx - почти никогда
интервал растёт экспоненциально, а не фиксированный
добавляют случайный разброс, чтобы клиенты не синхронизировались
нужен предел попыток и общий бюджет времени
для неидемпотентных - ключ идемпотентности на сервере
Что могут спросить следом
- Почему без джиттера повторы делают хуже
- Что делать с 429 и Retry-After
- Как повторять мутацию платежа безопасно
Разбор
Повторять имеет смысл сетевые сбои, таймауты и 5xx; 4xx означает, что запрос неверен,
и повтор ничего не изменит (кроме 429, где надо читать Retry-After).
Интервал - экспоненциальный: 1с, 2с, 4с, плюс случайный разброс, иначе все клиенты после сбоя придут одновременно и добьют сервер. Обязательны предел попыток и общий бюджет времени, иначе экран «загрузка» живёт вечно.
Повторять POST опасно: платёж может пройти дважды. Для этого на сервере - ключ
идемпотентности, который клиент генерирует один раз на операцию.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.