Asp.net-Mvc

從單個 Web 伺服器移動到多個 Web 伺服器負載平衡環境時的 Nhibernate 2 級記憶體問題/問題

  • October 18, 2012

我之前的設置是單個 Web 伺服器和單個數據庫伺服器。我正在使用 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 個並行記憶體,它們本身可能不同步並且可能導致更新過時等。

什麼是獲得我以前擁有的記憶體的好處的最佳解決方案,同時也利用這個新設置提供的 Web 伺服器負載平衡的彈性?

Ayende寫了關於 NHibernate 中二級記憶體使用的部落格。您將需要在網路場方案中使用分佈式記憶體。例如 SysCache2(它依賴於 ASP.NET 記憶體並且可以配置為使用分佈式提供程序)或 MemCache。這是一篇說明如何配置 memcached 的文章。

好吧,我使用了 memcached,它就像一個魅力。您可能需要調整記憶體的大小,但除此之外它很輕鬆。在每個 webserver 節點上設置一個 memached 節點,並在添加節點時維護該配置

引用自:https://stackoverflow.com/questions/6587457