Мы работаем над веб-приложением, которое распределено по 3 веб-серверам с балансировкой нагрузки.Большая часть данных, которые мы получаем через NHibernate, хранится в System.Web.Caching.Cache
.
System.Web.Caching.Cache
многое делает для повышения отзывчивости приложения, но есть несколько проблем, которые мы точно не знаем, как решить, например,
когда пользователь запрашивает данные на сервере server1, эти данные кэшируются на сервере server1, но для следующего запроса балансировщик нагрузки может направить их на сервер server2.Эти данные, которые они запрашивали на сервере server1, больше недоступны, и server2 должен будет снова запросить их у базы данных.
Если пользователь делает что-то на сервере server1 для аннулирования кэшированных данных, кешсбрасывается на server1.Однако исходный кэш по-прежнему доступен на server2 и server3, поэтому, когда пользователь отправляет последующий запрос и направляется на один из других серверов, ему будут представлены недопустимые данные.
У нас есть приложения, которые обновляют данные (например, данные о производительности) на регулярной основе.Когда данные производительности обновляются, мы хотим удалить их из кеша, чтобы, когда пользователь снова запрашивает данные, ему представляются самые последние данные.Как мы можем заставить эти приложения очищать кэш на 3 веб-серверах?
Каковы лучшие способы решения этих проблем?
Должны ли мы хранить кэш на отдельном сервере, например, для HttpContext.Session
с сервером SessionState?
Есть ли у нас способ установить зависимость кэша от кэша на двух других серверах?
Можно ли реализовать зависимость кэша от реальных таблиц или строк базы данных?При этих изменениях кеш сбрасывается?- или мы могли бы настроить триггер базы данных, чтобы как-то очистить кеш?