Каскадный эффект при частых повторных попытках

Каскадный эффект возникает, когда клиент начинает часто повторять запросы, у которых время выполнения превышает установленный таймаут.

Механизм возникновения

Время выполнения запроса превышает таймаут клиента. Клиент начинает повторять запросы, но оригинальные запросы продолжают выполняться на сервере. Каждый следующий повторный запрос выполняется дольше предыдущего, так как сервер обрабатывает больше запросов одновременно. В какой-то момент задержка запросов постоянно превышает таймаут клиента. Клиент продолжает повторять запросы, увеличивая нагрузку и ещё больше повышая задержку.

Особенности YDB

В акторной модели YDB отмена запросов, которые уже выполняются, имеет ограничения. Особенно это проявляется при клиентских таймаутах — когда клиент закрывает gRPC стрим до получения ответа, запрос может продолжать выполняться на сервере.

Восстановление нормальной работы

Шард может восстановить нормальную работу только при временном полном снятии нагрузки, перезапуске шарда или разделении шарда по нагрузке.

Рекомендации

Избегайте повторных попыток при таймаутах или используйте их с осторожностью. Применяйте экспоненциальную задержку с достаточно большими интервалами. Убедитесь, что нагрузка действительно снижается перед повторными попытками. Агрессивные повторные попытки в состоянии перегрузки приводят к противоположному эффекту — нагрузка на шард возрастает в разы.
Для получения дополнительной информации о правильной обработке ошибок см. Обработка ошибок.