Ваша теория звучит правдоподобно.
Проверка недостаточной пропускной способности сети
Вот удобная таблица , показывающая максимальную наблюдаемую пропускную способность для различных уровней ценообразования. Посмотрите на наблюдаемую максимальную пропускную способность для вашего SKU, затем перейдите на свой блейд Redis на портале Azure и выберите Metrics. Установите агрегацию на Max и посмотрите на сумму чтения и записи в кэш. Это ваша общая пропускная способность. Наложите сумму этих двух значений на период времени, в течение которого вы обнаружите ошибки, и посмотрите, не связана ли проблема с пропускной способностью сети. Если это так, увеличьте масштаб.
Проверка загрузки сервера
Также на вкладке Metrics вы можете посмотреть нагрузку на сервер. Это процент того, что Redis занят и не может обрабатывать запросы. Если вы наберете 100%, Redis не сможет отвечать на новые запросы, и у вас возникнут проблемы с таймаутом. Если это так, увеличьте масштаб.
Повторное использование ConnectionMultiplexer
Вы также можете исчерпать соединения с сервером Redis, если вы раскручиваете новый экземпляр StackExchange.Redis.ConnectionMultiplexer для каждого запроса. Пределы обслуживания для количества доступных соединений на основе вашего SKU составляют здесь на странице цен. Вы можете увидеть, превышаете ли вы максимально допустимые соединения для вашего SKU на вкладке Metrics, выберите max aggregation и выберите Connected Clients в качестве показателя c.
Исчерпание темы
Это не похоже на вашу ошибку, но я добавлю ее для полноты в выпуски этой галереи Redis Rogue, и она вступит в игру с Azure Веб-приложениями. По умолчанию пул потоков будет начинаться с 4 потоков, которые можно сразу выделить для работы. Когда вам нужно более четырех потоков, они раздаются со скоростью один поток на 500 мс. Таким образом, если вы сбросите тонну запросов в веб-приложении за короткий промежуток времени, вы можете закончить работу с очередями и в конечном итоге отбросить запросы еще до того, как они попадут в Redis. Чтобы проверить, является ли это проблемой, go выберите Метрики для вашего веб-приложения, выберите Потоки и установите агрегацию на макс. Если за короткий промежуток времени вы видите огромный всплеск, который соответствует вашей проблеме, вы нашли виновника. Решения включают в себя правильное использование async / await. И когда это не даст вам больше пользы, используйте ThreadPool.SetMinThreads с более высоким значением, предпочтительно таким, которое близко или превышает максимальное использование потока, которое вы видите в своих пакетах.