Моя предыдущая установка была одним веб-сервером и одним сервером базы данных. Я использовал кеширование 2-го уровня nhibernate для кеширования, чтобы избежать множества обращений к базе данных. Это отлично сработало, поскольку я использовал эту сборку
nhibernate.caches.syscache
и добавил этот код, чтобы включить кэширование второго уровня (с использованием обычного поставщика системного кэша):
return configuration
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<ApplicationMap>().Conventions.Add(typeof(Conventions)))
.ExposeConfiguration(
c => {
c.SetProperty("proxyfactory.factory_class", proxyFactory);
c.SetProperty("cache.provider_class", "NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache");
c.SetProperty("cache.use_second_level_cache", "true");
c.SetProperty("cache.use_query_cache", "true");
c.SetProperty("expiration", "86400");
})
.BuildSessionFactory();
Теперь я перешел в новую среду с несколькими веб-серверами и я пытаюсь понять последствия этого (у меня все еще есть один сервер db).
Поскольку кеш хранился на веб-сервере раньше, теперь кажется, что у меня есть 2 параллельных кеша на каждом веб-сервере, которые сами по себе могут не быть синхронизированными и могут вызывать устаревшие обновления и т. д.
Какое лучшее решение, чтобы получить преимущества кэширования, которое у меня было раньше, но также воспользоваться преимуществами устойчивости балансировки нагрузки веб-сервера, которая обеспечивается этим новым setup?