Проблемы / вопросы кэширования 2-го уровня Nhibernate при переходе с одного веб-сервера на среду с балансировкой нагрузки с несколькими веб-серверами

Моя предыдущая установка была одним веб-сервером и одним сервером базы данных. Я использовал кеширование 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?

8
задан leora 5 July 2011 в 18:53
поделиться