4

appfabricを、顧客向けWebサイトと管理者Webサイトで構成されるNHibernateasp.netアプリケーションの第2レベルのキャッシュとして使用しています。これらは両方とも同じキャッシュに接続されているため、管理者が何かを更新すると、顧客向けのサイトが更新されます。

正常に機能しているようです。別のサーバーに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));
        }

最初はタイムアウト無効化ポリシー(3分)を使用しようとしましたが、アプリはより高速に実行されているように感じました。ただし、管理サイトで何かを変更すると、ライブサイトですぐに更新されることに気付きました。通知ではなくタイムアウトを使用しているため、これはローカルキャッシュが照会されていないことを示しています(または照会されていますが、常に欠落しています)。

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

開発環境(vs2008からローカルで実行されているasp.netアプリ、別のw2k8マシンで実行されているキャッシュクラスター)のPSで「Get-Cache-StatisticsMyCache」を実行すると、少数のリクエストカウントが表示されます。ただし、本番環境では、リクエスト数が劇的に増加します。

ここでの方法に従って、キャッシュcliebt-serverトラフィックを取得しようとしました... http://blogs.msdn.com/b/appfabriccat/archive/2010/09/20/appfabric-cache-peeking-into-client-amp -server-wcf-communication.aspx ですが、ログファイルには最初のヘッダーしかありませんでした。つまり、logginもありません。

SOやGoogleで何も見つかりません。

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

どんな洞察も大いに受けました!

4

3 に答える 3

1

DataCacheキャッシュから読み取るためにどの方法を使用していますか? メソッドのいくつかは、DataCacheローカル キャッシュが構成されているかどうかに関係なく、サーバーに対して常にヒットします。Getローカルキャッシュを活用したい場合にのみ使用することを確認する必要があります.

これは、AppFabric キャッシュに関する私の最大の問題の 1 つです。彼らはあなたにこれについて何も説明しないので、ローカルキャッシングに頼り始めると、サービスと通信してデータを転送するためにペナルティを払っているとは思わないため、これらの小さな落とし穴に陥り始めます。オブジェクトを逆シリアル化しますが、そうです。

最悪なのは、ローカル キャッシュが最新のデータを表していることを確認するために、サービスと通信しなければならないことは理解できました。複数の呼び出しが行われないようにデータを転送することも理解できます。私の人生で理解できないのは、ローカルキャッシュ内のインスタンスがキャッシュから返された現在のバージョンのままであることが確認されたとしてもインスタンスを返すだけでなく、ワイヤからオブジェクトを逆シリアル化することですそれはもう記憶にある。オブジェクトが大きい/複雑な場合、これは大きな問題になる可能性があります。

于 2011-02-14T18:27:44.067 に答える
1

なぜこれほど多くのローカル キャッシュ ミスが発生するのかを何日も調査した結果、最終的に解決しました。

  1. CU4 で修正された AppFabric v 1.1 のローカル キャッシュにバグがあります。http://support2.microsoft.com/kb/2800726/en-us を参照してください
  2. アプリケーションで使用される Microsoft.ApplicationServer.Caching.Client.dll も更新されていることを確認してください。コンピューターに CU4 がインストールされていましたが、アプリケーションの NuGet パッケージから CU4 のない Client.dll を取得しました。私たちの場合、単純な NuGet パッケージの更新ですべてが機能しました。

CU4 をインストールし、Client.dll も更新されていることを確認した後、ローカル キャッシュ ヒットが増加したため、AppFabric ホストへの読み取りを大幅に減らしました。わーい!

于 2015-02-19T12:12:28.730 に答える
0

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

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

これは、キャッシュを管理および表示する優れた方法です。

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

于 2011-01-10T18:45:08.613 に答える