В случае, если у вас есть предопределенный список вышестоящих хостов, вы можете посмотреть на Envoy Retry plugin .Этот механизм позволяет определить список предикатов Hosts , которые могут быть связаны с некоторым конкретным условием повторения retry_on
: то есть с конкретным кодом ошибки HTTP;и число серий повторных попыток num_retries
, таким образом, после того, как количество повторных попыток достигнет числа повторных попыток, политика повторных попыток Envoy выберет следующий хост из списка, определенного в retry_host_predicate
.
{
"retry_on": "...",
"num_retries": "{...}",
"per_try_timeout": "{...}",
"retry_priority": "{...}",
"retry_host_predicate": [],
"host_selection_retry_max_attempts": "...",
"retriable_status_codes": []
}
В другом случае, когда ваше перенаправлениехосты заранее не известны, было бы лучше найти способ применения соответствующей логики на уровне приложений, поскольку большинство прокси-серверов HTTP спроектированы таким образом, что обработчики ответов выполняются синхронно, то есть когда обработчик ответов не выполняет ничего другогобудет запланировано в той же теме.Это нормально, если обработчик ответов обрабатывает только данные, уже находящиеся в памяти, и не ожидает удаленных служб.Однако если вы сделаете сетевой запрос от обработчика ответа, весь поток будет заблокирован и абсолютно ничего не будет делать до тех пор, пока удаленная служба не ответит, что приведет к снижению производительности.