Моей предыдущей настройкой был один веб-сервер и один сервер базы данных.Я использовал кеширование 2-го уровня nhibernate для кеширования, чтобы избежать большого количества обращений к базе данных.Это прекрасно работало, так как я использовал эту сборку
nhibernate.caches.syscache
и добавил этот код для включения кэширования второго уровня (с использованием обычного поставщика 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();
У меня естьтеперь перенесен в новую среду, в которой есть несколько веб-серверов, и я пытаюсь понять последствия этого (у меня все еще есть один сервер БД).
Так как кэш хранился на веб-сервере раньше, теперь онможет показаться, что у меня есть 2 параллельных кэша на каждом веб-сервере, которые сами могут быть не синхронизированы и могут вызывать устаревшие обновления и т. д.
Каково лучшее решение для получения преимуществ от кэширования, которое я имел раньше,также воспользоваться преимуществами балансировки нагрузки веб-сервера, предоставляемой этой новой настройкой?