Разница в производительности между кэшем Redis Azure и кэшем In-role для кэширования вывода
Мы перемещаем сайт asp.net в веб-роль Azure и базу данных Azure Sql. Сайт использует кеш вывода и обычный кеш [xxx] (т.е. HttpRuntime.Cache). Теперь они хранятся классическим способом в памяти экземпляра веб-роли.
Низко висящий плод - сначала начать использовать распределенный кеш для кэширования вывода. Я могу использовать кэш в роли, как совместно расположенный, так и с выделенной ролью кэша, или кэш Redis. У обоих есть готовые поставщики кеша.
Есть ли различия в производительности между этими двумя (у вас с совмещенным / выделенным) методами кэширования?
Следует учитывать, что получение страницы от Redis для каждой загрузки страницы на каждом сервере будет быстрее или медленнее, чем создание страницы с нуля каждые 120 секунд, но в то же время просто получение ее из локальной памяти?
Что будет лучше масштабироваться, когда мы хотим начать кэширование наших собственных данных (например, pocos) в распределенном кеше вместо HttpRuntime.Cache?
-Mathias
1 ответ
Отвечая на каждый ваш вопрос в отдельности:
Есть ли различия в производительности между этими двумя (у вас с совмещенным / выделенным) методами кэширования?
Определенно решение для совместного размещения кэширования работает быстрее, чем выделенный сервер кэширования, так как в случае решения совместного размещения / inproc запрос будет обрабатываться локально в рамках процесса, тогда как решение с выделенным кэшированием будет включать получение данных по сети. Однако, поскольку данные будут храниться в памяти на сервере кеша, получение данных будет все же быстрее, чем получение из БД.
Следует учитывать, что получение страницы от Redis для каждой загрузки страницы на каждом сервере будет быстрее или медленнее, чем создание страницы с нуля каждые 120 секунд, но в то же время просто получение ее из локальной памяти?
Это будет зависеть от количества объектов на странице, т. Е. От времени, необходимого для создания страницы с нуля. Хотя получение из кеша потребует времени в сети, но в основном это доли миллисекунды.
Что будет лучше масштабироваться, когда мы хотим начать кэширование наших собственных данных (например, pocos) в распределенном кеше вместо HttpRuntime.Cache?
Поскольку HttpRuntime.Cache - это внутреннее кэширование, оно ограничено памятью отдельного процесса, поэтому не масштабируется. Распределенный кеш, с другой стороны, является масштабируемым решением, в котором вы всегда можете добавить больше серверов, чтобы увеличить пространство и пропускную способность кеша. Кроме того, решение распределенного кэширования вне процедуры позволяет получить доступ к данным, кэшированным в процессе приложения, для использования любым другим процессом.
Вы также можете посмотреть на NCache для Azure как на решение распределенного кэширования. NCache является нативным решением распределенного кэширования.Net.
Следующие записи в блоге Икбала Кхана помогут вам лучше понять необходимость распределенного кэша для приложений ASP.Net:
- Повышение производительности ASP.NET в Microsoft Azure с помощью выходного кэша
- Как использовать распределенный кеш для ASP.NET Output Cache
Надеюсь, это поможет:-)
-Sameer