Почему раздел конфигурации Web outputCache, указывающий на общий кэш Azure, замедляет каждый запрос?

Мой вопрос похож на этот вопрос, но моя проблема связана с общим кэшированием Windows Azure, а не с более новым кэшированием Windows Azure.

Это действительно странная проблема. У меня есть общий кэш Azure, настроенный и работающий в одной размещенной облачной службе. Приложение использует его как для sessionState, так и для caching/outputCache. У этого приложения вообще нет проблем с задержкой. Он развернут в Северо-Центральной части США, как и общий кэш.

У меня также есть второй размещенный сервис, который также развернут в Северо-Центральной части США. Я настроил это второе приложение для использования одного и того же общего кеша. Вот что странно: когда я настраиваю раздел <caching>/<outputCache> в файле web.config, чтобы он указывал на общий кеш, каждый отдельный (MVC4) веб-запрос замедляется примерно до 5-6 секунд. Когда я комментирую этот раздел web.config, веб-запросы выполняются намного быстрее (~ 100 миллисекунд).

Это не похоже на проблему задержки с самим подключением к кешу, потому что я все еще использую тот же общий кеш для sessionState, и это быстро. Также следует отметить, что ни одно из действий MVC4 не использует атрибут OutputCacheAttribute. Задержку можно воспроизвести, просто добавив раздел outputCache в файл web.config и повторно развернув его.

Оба приложения находятся в одних и тех же регионах центра обработки данных, используют одни и те же размеры виртуальных машин, экземпляры и osFamilies. Единственное различие между ними, о котором я могу думать, заключается в том, что первое (тот, у которого нет проблем с задержкой) — это приложение MVC3, а второе — приложение MVC4.

Почему простое добавление раздела конфигурации caching/outputCache, указывающего на общий кэш Windows Azure, замедляет каждый отдельный запрос MVC4?

Обновление 1:

Теперь я могу воспроизвести эту проблему без развертывания в Azure. Я настроил свою локальную установку VS/IIS Express для использования рассматриваемого общего кеша как для сеанса, так и для outputCache. Я получал ответы меньше секунды, пока не изменил этот параметр web.config:

<compilation debug="false" ... <!-- changed this from true to false

При отключении отладочных хуков в разделе system.web я стал получать время отклика 5-6 секунд (воспроизведено). Может ли это быть проблемой с функциями связывания и минимизации в MVC4? ОЧЕНЬ странно, что отключение компиляции отладки увеличивает задержку ответа примерно в 10 раз.....

Обновление 2:

MiniProfiler говорит мне, что да, более 4 секунд этой задержки исходит от одного из моих @Scripts.Render("~/bundles/mybundle") в MVC _Layout.cshtml. Похоже, что параметр outputCache в файле web.config влияет на рендеринг связанных скриптов в режиме выпуска. Но ПОЧЕМУ?


person danludwig    schedule 13.11.2012    source источник


Ответы (2)


Инфраструктура оптимизации в настоящее время не поддерживает поставщиков кэша вывода не по умолчанию, потому что в прошлом это вызывало исключения, поэтому в таких ситуациях кэш сервера отключается, что приводит к высоким накладным расходам, которые вы видите. Я думаю, что теперь, когда мы перешли к VirtualPathProviders, проблемы, с которыми мы сталкивались с поставщиками не по умолчанию, могут быть исправлены, и теперь мы сможем поддерживать этот сценарий.

Я отправил рабочий элемент на наш сайт codeplex, чтобы отслеживать это: ссылка на проблему

Обновление: это должно быть исправлено в https://nuget.org/packages/Microsoft.AspNet.Web.Optimization/1.1.0-Beta1

person Hao Kung    schedule 14.11.2012
comment
Еще раз спасибо Хао, я буду следить за вопросом. На данный момент, какой рекомендуемый обходной путь? Должны ли мы минимизировать и оптимизировать пакеты и исключить поставщика лазурного кэша? Или использовать поставщика кеша Azure и отключить оптимизацию пакета? Если ответ зависит, какие пороговые параметры мы должны использовать для принятия решения? - person danludwig; 16.11.2012

Я могу подтвердить ваши выводы. Если я отключу всю компоновку/минимизацию CSS/Script, я не буду испытывать всплеск и медлительность ЦП. Ясно, что это связано с чем-то связанным со связыванием и/или минификацией.

Это то, что у меня есть в моем _Layout.cshtml. Удаление = отсутствие проблем с процессором. Включение этого вызовет всплески/медленность процессора.

@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryui")
@Scripts.Render("~/bundles/kendoui")
person Bill Christenson    schedule 13.11.2012
comment
Я смог получить немного более быстрое время отклика, получив как jquery, так и jquery UI из (Google) CDN. Возможно, вы захотите попробовать это, это не решит проблему полностью, но должно несколько ускорить ответы. - person danludwig; 14.11.2012