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

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

Каково лучшее решение для получения преимуществ от кэширования, которое я имел раньше,также воспользоваться преимуществами балансировки нагрузки веб-сервера, предоставляемой этой новой настройкой?

Ответы [ 2 ]

8 голосов
/ 05 июля 2011

Ayende в блоге об использовании кэша 2-го уровня в NHibernate. Вам потребуется использовать распределенный кеш в сценарии веб-фермы. Например, SysCache2 (который опирается на кэш ASP.NET и который можно настроить на использование распределенного поставщика) или MemCache. Вот статья , иллюстрирующая, как вы можете настроить memcached.

1 голос
/ 26 марта 2012

Ну, я использовал memcached, и он работает как шарм. Возможно, вам придется настроить размер кэша, но в остальном он беспроблемен. Настройте подключенный узел на каждом узле веб-сервера и поддерживайте эту конфигурацию при добавлении узлов

...