2011-01-10 15 views
4

私たちは顧客志向のウェブサイトと管理者のウェブサイトからなるNHibernate asp.netアプリケーションの第2レベルキャッシュとしてappfabricを使用しています。それらは両方とも同じキャッシュに接続されているので、管理者が何かを更新すると、顧客が直面しているサイトが更新されます。AppFabricキャッシングのローカルキャッシュが私たちのために働いていません...どうしたのですか?

私たちは別々のサーバにCacheCLusterを持っていますが、すべてはうまくいきますが、localcacheがより良いパフォーマンスを得ることを可能にしたいのですが、それは動作しているようです。

我々はこのようにそれを有効にしている...

bool UseLocalCache = 
    int LocalCacheObjectCount = int.MaxValue; 
    TimeSpan LocalCacheDefaultTimeout = TimeSpan.FromMinutes(3); 
    DataCacheLocalCacheInvalidationPolicy LocalCacheInvalidationPolicy = DataCacheLocalCacheInvalidationPolicy.TimeoutBased; 

     if (UseLocalCache) 
     { 
      configuration.LocalCacheProperties = 
       new DataCacheLocalCacheProperties(
        LocalCacheObjectCount, 
        LocalCacheDefaultTimeout, 
        LocalCacheInvalidationPolicy 
        ); 

      // configuration.NotificationProperties = new DataCacheNotificationProperties(500, TimeSpan.FromSeconds(300)); 
     } 

は当初、我々はタイムアウト無効化ポリシー(3mins)を使用してみました、それはより速く走っていたように私たちのアプリは感じました。しかし、我々は、管理サイトで何かを変更した場合、それは現場で更新されたものであることに気づいた。通知ではなくタイムアウトを使用しているので、これはローカルキャッシュが照会されていない(または存在しているが、常に欠落している)ことを示しています。

cache.GetType()。Nameは "LocalCache"を返します。したがって、ファクトリはローカルキャッシュを作成しています。

私の開発環境(vs2008からローカルで実行されているasp.netアプリ、別個のw2k8マシンで実行されているキャッシュクラスタ)のPSで「Get-Cache-Statistics MyCache」を実行すると、ただし、本番環境では、Request Countが大幅に増加します。

ここでは、キャッシュcliebt-serverトラフィックを確認するための方法を試しました... http://blogs.msdn.com/b/appfabriccat/archive/2010/09/20/appfabric-cache-peeking-into-client-amp-server-wcf-communication.aspxしかし、ログファイルには最初のヘッダーだけが含まれています。

私はSOやGoogleで何かを見つけることができません。

何か間違ったことはありますか?私たちはAppFabricをインストールしたことがありますか?それをWebPlatformインストーラ経由でインストールしましたか? (注:ASp.netを実行しているIISボックスは、クラスタ内にありません。単にクライアントにすぎません)。

洞察力はすばらしいものでした。

答えて

0

nhibernateプロファイラを使用してみましたか? http://nhprof.com/

これもあります: http://mdcadmintool.codeplex.com/

それはキャッシュを管理し、表示する素敵な方法です。

これらの両方が問題のデバッグに役立つことがあります。

+0

申し訳ありませんが、NH ProfとNHProfを使用していますが、すべてがキャッシュヒットしていると言わざるを得ないと言わざるを得ないですが、私たちが持っているのは、キャッシュキャッシュではなくローカルキャッシュです。 mdcaadmintoolは、キャッシュクラスターで何が起こっているのかを教えてくれるだけでなく、asp.net w3wp.exeを使ってInProcになるローカルキャッシュではなく、私たちを助けてくれません。あなたの考えをありがとう。 – Olly

1

どれがDataCacheの方法でキャッシュから読み取っていますか? DataCacheメソッドのいくつかは、ローカルキャッシュが構成されているかどうかにかかわらず、常にサーバーに対してヒットします。ローカルキャッシュを利用する場合は、Getのみを使用するようにしてください。

これは、AppFabricキャッシングで私の最大の姪です。彼らはあなたにこれを説明していないので、ローカルキャッシングに頼るときには、サービスに話すペナルティを支払っているとは思わないので、これらの小さな落とし穴に陥り始めます。オブジェクトをデシリアライズしますが、そうです。

最悪のことは、サービスと話してローカルキャッシュが最新のデータを表すことを確認する必要があることが分かりました。私は、複数の呼び出しが行われないようにデータを転送することを理解することさえできます。私の人生のために私が理解できないのは、たとえローカルキャッシュのインスタンスがキャッシュから戻ってくる現在のバージョンであることが確認されたとしても、まだは返すのではなくワイヤからオブジェクトを逆シリアル化する既にメモリ内にあるインスタンス。あなたのオブジェクトが大きい/複雑な場合、これは多くのことを傷つける可能性があります。我々は最終的にそれを解決し非常に多くのローカルキャッシュ・ミス取得理由を覗くの日と日後

1

:CU4に固定されているのAppFabricのV 1.1のローカルキャッシュを持つバグがあり

  1. を、http://support2.microsoft.com/kb/2800726/en-us
  2. を参照してください
  3. アプリケーションで使用されるMicrosoft.ApplicationServer.Caching.Client.dllも更新されていることを確認してください。私たちはマシンにCU4をインストールしましたが、アプリケーションのNuGetパッケージからCU4がないClient.dllを取得しました。私たちの場合は、単純なNuGetパッケージのアップデートがすべて機能しました。

CU4をインストールして、Client.dllが更新されたことを確認したあと、ローカルキャッシュのヒット数が増えてAppFabricホストへの読み込みが大幅に減少しました。わーい!

関連する問題