Собирал информацию по лучшим практикам вокруг выставления таймаутов и наткнулся на любопытную заметку от Zalando, где обсуждается:
* как подобрать оптимальные значения таймаутов;
* взаимосвязь таймаутов и ретраев;
* как не похоронить свои системы под лавиной ретраев.
Краткая выжимка:
* set timeout explicitly on any remote calls
* set connection timeout = expected RTT * 3
* set request timeout based on collected metrics and SLA
* fail-fast or return a fallback value
* consider wrapping chained calls into time limiter
* retry on 5xx error and do not retry on 4xx
* think about implementing a circuit breaker when retrying
* be polite and ask the API owner for permission to enable retries
* support Idempotency-Key header in your API
——
Для тех, кто захочет чуть углубиться в тематику еще немного ссылок:
1. Xороший ретрай, плохой ретрай, или История одного падения - лонг рид от Яндекс про ретраи, очень подробно и с картинками;
2. Understanding Fail-Safe and Fail-Fast Strategies - сравнение стратегий и как их использовать в реальных системах;
3. What is Backoff For? - про бекофы и когда они могут помочь, а когда нет (кстати отличный блог!).