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

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

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

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

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

Спасибо,


person Cybermaxs    schedule 18.05.2011    source источник


Ответы (2)


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

--ab

person andrewbadera    schedule 22.05.2011

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

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

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

person David Pokluda    schedule 18.05.2011
comment
Это типичная архитектура для кеш-памяти appfabric. Мне нужна стратегия обновления данных: внутри запроса страницы, когда срок действия данных истек? По фоновому потоку (и сохраняя грязную копию моих данных для возврата)? Специальным сервисом (но как работать с бизнес-правилами)? Я перечислил возможные решения. Любые идеи ? - person Cybermaxs; 19.05.2011