8

私の以前の設定は、単一のWebサーバーと単一のデータベースサーバーでした。私はデータベースに行く呼び出しをたくさん避けるためにキャッシュのものにnhibernate第2レベルのキャッシュを使用していた。これは私がこれを使用していたとして、このアセンブリは単一のWebサーバーから複数のWebサーバーへの負荷分散環境への移行時の第2レベルのキャッシングに関する問題や質問をNhibernate

nhibernate.caches.syscache 

を素晴らしい仕事をして(通常のsyscacheプロバイダを使用して)は、第2のレベルのキャッシュをオンにするには、このコードを追加しました:

 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(); 

私が今まで以上に移行しています複数のWebサーバを持つ新しい環境です。私はこれに意味を理解しようとしています(私はまだ1台のDBサーバを持っています)。

キャッシュは前にWebサーバ上に格納されていたので、私自身が同期していなくてもよいと日付の更新のうち、発生することがあり、各Webサーバ上の2つの並列のキャッシュを持っているように、今、それが思われる、など

何これまでに持っていたキャッシングの利点を得るための最良のソリューションですが、この新しい設定で提供されるWebサーバーのロードバランシングの弾力性も活用していますか?

答えて

8

Ayende blogged NHibernateの第2レベルキャッシュの使用について。 Webファームのシナリオで分散キャッシュを使用する必要があります。たとえば、SysCache2(ASP.NETキャッシュに依存し、分散型プロバイダーを使用するように構成できる)やMemCacheなどがあります。 memcachedの設定方法を説明したan articleです。

+0

リンクに感謝します。私はまだいくつか質問があります。 1.このキャッシュをどこで実行するか(Webサーバーのいずれかで、このキャッシュには別のサーバーが必要です)。それが別のマシンでなければならない場合は、キャッシュに到達するためにネットワークホップが必要なので、これは遅くなることはありませんか? – leora

+0

@ooo、それは理想的には、たくさんのメモリを持つ別のマシンであるべきです。 Webサーバーを使用することもできますが、一般的には推奨されません。 –

+0

キャッシュを取得するために余分なネットワークホップがある点についてはどうでしょうか(同じマシン上にあるのと比べて)。また、その新しいマシンをキャッシュマシンに専念させるべきでしょうか。 – leora

1

私はmemcachedを使いました。それは魅力的です。キャッシュのサイズを微調整しなければならないかもしれませんが、それは手間がかかりません。 各Webサーバノードにmemachedノードを設定し、ノードを追加するときにその設定を維持してください。

関連する問題