Кэширование AppFabric для крупных веб-сайтов - PullRequest
5 голосов
/ 18 мая 2011

Наше веб-приложение развернуто в веб-ферме (более 20 серверов). Сайт имеет огромный трафик (миллионы просмотров страниц в день). В первом выпуске это приложение использует CacheManager EntLib (кеширование блоков приложения Entreprise). Мы называем это «Кэш локального сервера». Есть много преимуществ, но у нас все еще есть главный недостаток: каждый сервер управляет своим собственным кешем и имеет доступ к базе данных (не распространяется).

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

  • с временем отклика страницы GetAndLock / PutAndUnLock (он же распределенная блокировка) сильно зависит
  • с Get / Put + простая блокировка на стороне сервера, у нас так много запросов с локальным кешем; никаких преимуществ.

Так что же такое стратегии кэширования для крупных веб-сайтов?

Спасибо

Ответы [ 2 ]

4 голосов
/ 19 мая 2011

Я бы сказал, что кэш только для чтения данных, насколько это возможно.Для этого вы можете использовать AppFabric Caching Service.Вы можете настроить кластер, скажем, 5 серверов кеша.Затем все ваши 20 интерфейсных серверов будут общаться с этим кластером кэша для получения кэшированных данных.Вы также можете воспользоваться хранением наиболее частых данных непосредственно во внешнем интерфейсе (локальный кеш).Например, наша конфигурация такова:

  • интерфейс (16 машин) с LocalCache для хранения 150 000 наиболее часто используемых элементов
  • кластер кэша (4 машины) с режимом HighAvailability, в котором хранятся все данныекэшировать
  • базу данных (1 компьютер) со всеми данными

Это усложняет данные, которые вы хотите обновить.Каждый раз, когда вы вводите блокировки, ваша производительность будет ухудшаться.

1 голос
/ 22 мая 2011

Как я уже упоминал в MSDN, немедленная согласованность обходится дорого. Вы должны принять некоторые компромиссы в последовательности или выложить много денег, чтобы быть немедленно последовательными. Использование изолированной модели чтения / записи, которую мы обсуждали в MSDN, наряду с очередями, вероятно, обеспечит вам наилучшую производительность / согласованность за доллар. Несколько уровней кеша, предложенные Дэвидом, также превосходны, в зависимости от вашей общей архитектуры / дизайна. Использование собственной локальной in-proc или localhosted реализации кеша также имеет большую ценность - я сам не фанат OOTB локального кэша AppFabric.

- абы

...