Best practices для retry
От: Nnova  
Дата: 11.02.25 11:04
Оценка:
В системе имеется вызов стороннего API, по https, может быть как эндпоинт стороннего поставщика, так свой собственный сервис.
Как известно, https вызов может завершится неудачно, и часто рекомендуется повторять попытки несколько раз, даже термин такой придумали как resilient http calls.
А какие best practices вообще по этому поводу существуют, сколько раз повторять попытки, для каких кодов возврата и прочее
Re: Best practices для retry
От: DiPaolo Россия  
Дата: 11.02.25 11:12
Оценка: +3
exponential backoff, например
https://hexmaster.nl/posts/retry-on-http-requests-with-exponential-backoff/

плюс неплохо бы с докой АПИ свериться. Например, вот тут явно пишут, как обрабатывать определенные статус коды (с тем же exponential backoff):
https://cloud.google.com/memorystore/docs/redis/exponential-backoff

и во еще полезное https://aws.amazon.com/builders-library/timeouts-retries-and-backoff-with-jitter/
Патриот здравого смысла
Отредактировано 11.02.2025 11:14 DiPaolo . Предыдущая версия .
Re: Каких программ вам не хватает?
От: Miroff Россия  
Дата: 20.02.25 06:47
Оценка:
Здравствуйте, Nnova, Вы писали:

N>А какие best practices вообще по этому поводу существуют, сколько раз повторять попытки, для каких кодов возврата и прочее


Да 5хх провторять до успеха с увеличением интервала по Фибоначчи. Для 4xx не повторять вообще. Хорошо работает кольцевой буфер с уникальностью, чтобы ретраи не застилали легитимные запросы и чтобы новые запросы подменяли старые. Когда бизнес-смысл запрос теряется, запрос нужно удалять.

Например у вас есть эндпоинт, который возвращает фамилию президента и вы хотите раз в сутки эти данные у себя обновлять. И этот эндпоинт стал отвечать 502. У вас будут таймауты
1 минута
1 минута
2 минуты
3 минуты
5 минут
8 минут
...
10 часов
а дальше поыток не будет потому что пройдут сутки и придет новый запрос
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.