Azure 共有キャッシュから In-Role Cache への移行

重要

Microsoft では、すべての新しい開発で Azure Redis Cache を使用することをお勧めします。 Azure Cache オファリングの選択に関する最新のドキュメントとガイダンスについては、「自分に適した Azure Cache オファリング」を参照してください。

Microsoft Azure Shared Cachingを使用してキャッシュ キャッシュをIn-Roleするアプリケーションの移行は、アプリケーションに対する最小限の変更で実現できます。 In-Role キャッシュはShared Cachingと同じ API を使用するため、Shared Cachingを使用してキャッシュにアクセスする既存のコードを再利用して、In-Roleロール内キャッシュにアクセスできます。 このトピックでは、In-Role Cache を使用するようにShared Caching アプリケーションを移行するために必要な構成とアプリケーションの変更を行う方法について説明します。

注意

In-Role Cache を使用する利点の詳細については、「 Azure Cache のIn-Role キャッシュについて」を参照してください。

移行の手順

次のセクションでは、In-Role Cache を使用するためにMicrosoft Azure Shared Caching アプリケーションを移行するために必要な手順について説明します。

  • キャッシュ クラスターの展開トポロジを決定する

    • 専用ロール キャッシュ クラスターを構成する

    • 併置型ロール キャッシュ クラスターを構成する

  • キャッシュ クラスター ストレージ アカウントの構成

  • 名前付きキャッシュ設定を構成する

  • キャッシュ クライアントを構成する

    • 共有キャッシュ構成の削除

    • Caching NuGet パッケージを使用してキャッシュ クライアントを構成する

  • ASP.NET セッションおよびページ出力 Caching を移行する

キャッシュ クラスターの展開トポロジを決定する

In-Role Cache は、Azure ロールでキャッシュ サービスをホストする機能を提供します。 このモデルでは、キャッシュはクラウド サービスの一部です。 キャッシュをホストするために、クラウド サービス内の 1 つのロールIn-Role選択されます。 そのロールの実行中のインスタンスはメモリ リソースを結合し、キャッシュ クラスターを形成します。 このプライベート キャッシュ クラスターは、同じ配置内のロールでのみ使用できます。 In-Role キャッシュには、専用と併置の 2 つのデプロイ トポロジがあります。

キャッシュ クラスター デプロイのトポロジ [説明]

専用のロールのキャッシュ

ワーカー ロール インスタンスは、キャッシュ専用です。

併置型ロールのキャッシュ

このキャッシュは、VM リソース (帯域幅、CPU、およびメモリ) を、ロールがホストするプライマリ アプリケーションと共有します。

アプリケーションが既存のロールでメモリを使用していない場合、既存のロールで併置型ロールのキャッシュ クラスターを構成し、その余分なメモリをキャッシュに使用することができます。 キャッシュ クラスターをサポートできるような余分なメモリがロールにはない場合は、ロールをスケールアウトするか、キャッシュ ワーカー ロールを追加して専用ロール キャッシュ クラスターを構成します。

  • 専用ロール キャッシュ クラスターを構成する

  • 併置型ロール キャッシュ クラスターを構成する

専用ロール キャッシュ クラスターを構成する

専用ロール キャッシュ クラスターを構成するには、プロジェクトにキャッシュ ワーカー ロールを追加します。 キャッシュ ワーカー ロールを追加するには、まだ展開されていない場合は、ソリューション エクスプローラーで Azure を展開します。

注意

専用ロール キャッシュはワーカー ロールでのみサポートされ、Web ロールでは構成できません。

Azure プロジェクトで [ロール] フォルダーを右クリックし、[追加]、[新しいワーカー ロール プロジェクト]、[キャッシュ ワーカー ロール] の順に選択します。 [名前] ボックスにロールの名前を入力し、[追加] をクリックします。

Add Cache Worker Role

キャッシュ ワーカー ロールは、あらかじめ専用ロール キャッシュ用に構成されています。 設定を表示するには、Azure ロール フォルダーに新しく追加されたロールを右クリックし、[ プロパティ] を選択します。

Cache Worker Role Properties Context Menu

[キャッシュ] タブに切り替えて、キャッシュ ワーカー ロールのキャッシュ プロパティを確認します。

Cache Worker Role Properties

このロールはキャッシュ ワーカー ロールであるため、[キャッシュを有効にする] チェック ボックスは既にオンになっており、[専用ロール] キャッシュが選択されています。 キャッシュの設定は、[名前付きキャッシュ設定] セクションで構成されます。 In-Role キャッシュとMicrosoft Azure Shared Cachingの間には、キャッシュ設定にいくつかの違いがあります。 これらの設定については、「キャッシュ クラスター Storage アカウントの構成」および「名前付きキャッシュ 設定の構成」セクションで説明します。

[構成] タブに切り替えます。

Role Instance VM Size and Instance Count

既定の [インスタンス数] は 1 であり、既定の [VM サイズ] は [] です。 目的の構成に合わせて、これらの設定を変更します。 Azure In-Role Cache の容量計画に関する考慮事項ガイドでは、アプリケーションのキャッシュ要件を満たすために選択する設定に関するガイダンスを提供できます。

キャッシュ ワーカー ロールが追加され、仮想マシンのサイズとインスタンス数が構成されたら、次の「名前付きキャッシュの構成設定」セクションの説明に従ってキャッシュを構成できます。

併置型ロール キャッシュ クラスターを構成する

併置ロール キャッシュ クラスターを構成するには、Azure ロール フォルダーで目的のロールを右クリックし、[ プロパティ] を選択します。

Web Role Properties

[キャッシュ] タブに切り替えて、[キャッシュを有効にする] チェック ボックスをオンにし、目的のキャッシュ オプションを指定します。 既定の構成では、ロール インスタンスのメモリの 30% がキャッシュ用に割り当てられます。 [キャッシュ サイズ (%)] スライダーを調整して、目的のキャッシュ サイズを構成します。

Caching Role Properties

キャッシュ サイズを決定するための基本的な概算式は、ロール インスタンスの数に、仮想マシン サイズに基づくメモリの容量を乗算し、指定するパーセンテージを計算します。 この数式は非常に基本的な近似値であり、目的のサイズのキャッシュをプロビジョニングするために必要な設定の詳細については、「 Azure In-Role Cache の容量計画に関する考慮事項」を参照してください。 キャッシュ クラスターを正常にホストするために、ロール インスタンスを追加したり、仮想マシンのサイズを大きくしたりする必要がある場合は、[構成] タブで構成できます。

キャッシュ クラスター ストレージ アカウントの構成

In-Role キャッシュには Azure ストレージ アカウントが必要です。 このストレージ アカウントは、キャッシュ クラスターを構成するすべての仮想マシンからアクセスされる、キャッシュ クラスターについての構成データを保持するために使用されます。 このストレージ アカウントは、キャッシュ クラスター ロールのプロパティ ページにある [キャッシュ] タブで [名前付きキャッシュ設定] のすぐ上に指定します。

Cache Cluster Storage Account

重要

このストレージ アカウントが構成されていない場合、ロールは起動できません。

名前付きキャッシュ設定を構成する

キャッシュの設定は、[名前付きキャッシュ設定] セクションで構成されます。

Named Cache Settings

In-Role キャッシュとMicrosoft Azure Shared Cachingの間には、キャッシュ設定にいくつかの違いがあります。

機能 In-Role キャッシュのサポート Microsoft Azure Shared Caching サポート

名前

既定のキャッシュが構成され、必要に応じて、追加の名前付きキャッシュを構成できます。

既定のキャッシュのみ。

高可用性

キャッシュ内のアイテムに高可用性を提供します。 あるロールが停止しても、キャッシュ内のアイテムのバックアップ コピーはそのまま使用できます。

高可用性なし。

通知

通知を使用すると、さまざまなキャッシュ操作がキャッシュ クラスターで行われたときにアプリケーションで非同期通知を受信できます。

詳細については、「Azure In-Role Cache の通知」を参照してください。

サポートされていません。

削除ポリシー

選択項目は、[LRU] (最も長く使用していない) か、または [なし] です。 既定値は [LRU] です。

LRU のみ。

Time to Live (min)

キャッシュ内のアイテムの既定の有効期限は 10 分ですが、構成可能です。 キャッシュに追加された個々のアイテムの有効期限は、キャッシュに項目が追加されたときに AddPut のオーバーロードを使用して指定することもできます。

既定の有効期限は 24 時間であり、これは構成できません。 キャッシュに追加された個々のアイテムの有効期限は、キャッシュに項目が追加されたときに AddPut のオーバーロードを使用して構成できます。

有効期限の種類

[有効期限の種類] には、[なし][絶対][スライディング ウィンドウ] の 3 つがあります。 [絶対] を指定した場合、[Time to Live (TTL) (分)] で指定された有効期間は、アイテムがキャッシュに追加されたときに開始されます。 [スライディング ウィンドウ] を指定した場合、有効期間はアイテムがキャッシュ内でアクセスされるたびにリセットされます。 [なし] を指定した場合、[Time To Live (TTL) (分)] は 0 に設定され、アイテムの有効期限は切れません。 既定値は [絶対] です。

詳細については、「 Azure In-Role Cache の有効期限と削除」を参照してください。

有効期限ポリシーは絶対です。 アイテムがキャッシュに追加されると、有効期限間隔が開始します。

キャッシュ クライアントを構成する

キャッシュ クラスターを構成したら、次の手順では、キャッシュ クライアントがキャッシュにアクセスできるように、必要な構成と参照を追加します。 In-Role キャッシュでは、クライアントはキャッシュ クラスターと同じデプロイ内の任意のロールにすることができます。 併置型ロール キャッシュ クラスターにアクセスする場合は、クライアントには、キャッシュ クラスターをホストするロール自体を指定できます。 キャッシュ クライアントを構成するには、キャッシュにアクセスする各ロールについて以下の手順を実行します。

  • 共有キャッシュ構成の削除

  • Caching NuGet パッケージを使用してキャッシュ クライアントを構成する

共有キャッシュ構成の削除

クライアント ロールを In-Role Cache 用に構成する前に、既存のShared Caching構成とアセンブリ参照を削除する必要があります。 Shared Cachingが Shared Caching NuGet パッケージを使用して構成されている場合は、Shared Caching NuGet パッケージをアンインストールすることで構成を削除できます。それ以外の場合は手動で削除する必要があります。

  • Shared Caching NuGet パッケージのアンインストール

  • 共有キャッシュ構成の手動削除

Shared Caching NuGet パッケージのアンインストール

Shared Caching NuGet パッケージをアンインストールするには、ソリューション エクスプローラーで目的のクライアント ロールを右クリックし、[NuGet パッケージの管理] を選択します。 [インストール済みのパッケージ] ノードを選択し、[インストール済みパッケージの検索] ボックスに「キャッシュ」と入力します。 [Azure Shared Caching] を選択し、[アンインストール] をクリックして [閉じる] をクリックします。

Uninstall Shared Caching NuGet Package

注意

一覧にMicrosoft Azure Shared Caching NuGet パッケージがない場合は、[閉じる] をクリックし、「Shared Caching構成を手動で削除する」の手順に従います。

Shared Caching NuGet パッケージをアンインストールすると、クライアント ロールまたはweb.configクライアント ロールのShared Caching アセンブリとShared Caching エントリapp.configが削除されます。 一部のカスタマイズした設定は NuGet パッケージをアンインストールしても削除されない場合があるため、web.config または app.config を開き、次の要素が完全に削除されていることを確認します。

  • dataCacheClients エントリが configSections 要素から削除されていることを確認します。 configSections 要素全体を削除しないようにしてください。dataCacheClients エントリが存在する場合、それだけを削除します。

    <configSections>
      <!-- Existing sections omitted for clarity. -->
      <section name="dataCacheClients" type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core" allowLocation="true" allowDefinition="Everywhere" />
    </configSections>
    
  • dataCacheClients セクションが削除されていることを確認します。 dataCacheClients セクションは次の例のようになります。

    <dataCacheClients>
      <dataCacheClient name="default">
        <hosts>
          <host name="MyCacheNamespace.cache.windows.net" cachePort="22233" />
        </hosts>
    
        <securityProperties mode="Message">
          <messageSecurity 
            authorizationInfo="Your authorization token will be here.">
          </messageSecurity>
        </securityProperties>
      </dataCacheClient>
    </dataCacheClients>
    

Shared Caching構成が削除されたら、「キャッシュ NuGet パッケージを使用してキャッシュ クライアントを構成する」セクションの説明に従ってキャッシュ クライアントを構成できます。

共有キャッシュ構成の手動削除

Shared Caching構成を手動で削除するには、Shared Caching アセンブリ参照とShared Caching構成をapp.config削除するweb.config必要があります。

Shared Caching アセンブリ参照を削除するには、ソリューション エクスプローラーで目的のクライアント ロールを選択し、[参照] フォルダーを展開します。 以下の一覧の各アセンブリについて、ソリューション エクスプローラーの [参照] フォルダーでアセンブリを右クリックし、[削除] を選択します。 クライアント ロールが Web ロールの場合は、Microsoft.Web.DistributedCache も削除します。

  • Microsoft.ApplicationServer.Caching.Client

  • Microsoft.ApplicationServer.Caching.Core

  • Microsoft.WindowsFabric.Common

  • Microsoft.WindowsFabric.Data.Common

Shared Caching構成を削除するには、クライアント ロールを開web.configapp.config、次の 2 つの項目を削除します。

  • dataCacheClients エントリを configSections 要素から削除します。 configSections 要素全体を削除しないようにしてください。dataCacheClients エントリが存在する場合、それだけを削除します。

    <configSections>
      <!-- Existing sections omitted for clarity. -->
      <section name="dataCacheClients" type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core" allowLocation="true" allowDefinition="Everywhere" />
    </configSections>
    
  • 次の例のような dataCacheClients セクションを削除します。

    <dataCacheClients>
      <dataCacheClient name="default">
        <hosts>
          <host name="MyCacheNamespace.cache.windows.net" cachePort="22233" />
        </hosts>
    
        <securityProperties mode="Message">
          <messageSecurity 
            authorizationInfo="Your authorization token will be here.">
          </messageSecurity>
        </securityProperties>
      </dataCacheClient>
    </dataCacheClients>
    

これらの項目を削除した後は、次のセクションの手順に従って、キャッシュ クライアントを構成できます。

Caching NuGet パッケージを使用してキャッシュ クライアントを構成する

In-Role キャッシュには、クライアント ロールがキャッシュ クラスターにアクセスできるようにするために必要な構成とアセンブリ参照を追加するためのNuGet パッケージが用意されています。

重要

In-Role Cache NuGet パッケージを使用してキャッシュ クライアントを構成する前に、前のセクションで説明したように、Shared Caching構成がクライアント ロールからweb.configapp.config完全に削除されていることを確認します。

In-Role キャッシュ NuGet パッケージを使用するには、ソリューション エクスプローラーで目的のクライアント ロールを右クリックし、[NuGet パッケージの管理] を選択します。

Manage NuGet Packages

[Azure Caching] を選択し、[インストール] をクリックし、[同意する] をクリックします。 パッケージがロールにインストールされたら、[閉じる] をクリックして [NuGet パッケージの管理] ウィンドウを閉じます。

注意

一覧に [Azure Caching] が表示されない場合は、[オンラインで検索] ボックスに「WindowsAzure.Caching」と入力します。

Enable Caching using NuGet

In-Role キャッシュ NuGet パッケージがクライアント ロールにインストールされると、クライアント ロールが目的のキャッシュ クラスターにアクセスできるように、必要な構成とアセンブリ参照が追加されます。

ロールの web.config または app.config に、いくつかのアイテムが追加されます。

  1. configSectionsdataCacheClientscacheDiagnostics という 2 つのセクションが追加されます。

    <configSections>
      <!-- Existing sections omitted for clarity. -->
      <section name="dataCacheClients" type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core" allowLocation="true" allowDefinition="Everywhere" />
      <section name="cacheDiagnostics" type="Microsoft.ApplicationServer.Caching.AzureCommon.DiagnosticsConfigurationSection, Microsoft.ApplicationServer.Caching.AzureCommon" allowLocation="true" allowDefinition="Everywhere" />
    </configSections>
    
  2. dataCacheClients セクションが configuration セクションに追加されます。

    <dataCacheClients>
      <dataCacheClient name="default">
        <autoDiscover isEnabled="true" identifier="[cache cluster role name]" />
        <!--<localCache isEnabled="true" sync="TimeoutBased" objectCount="100000" ttlValue="300" />-->
      </dataCacheClient>
    </dataCacheClients>
    

    [キャッシュ クラスター ロール名] を、キャッシュ クラスターをホストするロールの名前に置き換えます。 次の例では、[cache cluster role name]CacheWorkerRole1 に置き換えています。

    <autoDiscover isEnabled="true" identifier="CacheWorkerRole1" />
    

    警告

    この設定が正しく構成されていない場合、クライアントはキャッシュにアクセスできません。 識別子がロールにマップされない場合、次The role [cache cluster role name] was not found in the current deploymentのようなメッセージを含む内部 DataCacheException を使用してキャッシュにアクセスすると、TargetInvocationException がスローされます。 識別子がキャッシュ クラスターをホストしていないデプロイ内のロールにマップされる場合、 InvalidOperationException は次のメッセージ No Endpoints foundでスローされます。

  3. また、cacheDiagnostics セクションが configuration セクションに追加されます。

    <cacheDiagnostics>
      <crashDump dumpLevel="Off" dumpStorageQuotaInMB="100" />
    </cacheDiagnostics>
    

    注意

    キャッシュ クライアントのクラッシュ ダンプは既定で無効になっており、このセクションで制御されます。 診断のキャッシュの詳細については、「 Azure In-Role キャッシュのトラブルシューティングと診断」を参照してください。

In-Role キャッシュ NuGet パッケージでは、ClientDiagnosticLevel 設定ConfigurationSettingsもキャッシュ クライアント ロールに追加されますServiceConfiguration.cscfg。 次のWebRole1例は、ClientDiagnosticLevel が 1 のファイルのServiceConfiguration.cscfgセクションです。これは既定の ClientDiagnosticLevel です

<Role name="WebRole1">
  <Instances count="1" />
  <ConfigurationSettings>
    <!-- Other settings omitted for clarity... -->
    <Setting name="Microsoft.WindowsAzure.Plugins.Caching.ClientDiagnosticLevel" value="1" />
  </ConfigurationSettings>
</Role>

注意

キャッシュ診断レベルの詳細については、「 Azure In-Role キャッシュのトラブルシューティングと診断」を参照してください。

必要な構成を追加するだけでなく、In-Role キャッシュ NuGet パッケージには、次のアセンブリ参照も追加されます。

  • Microsoft.ApplicationServer.Caching.Client.dll

  • Microsoft.ApplicationServer.Caching.Core.dll

  • Microsoft.ApplicationServer.Caching.AzureCommon.dll

  • Microsoft.ApplicationServer.Caching.AzureClientHelper.dll

  • Microsoft.WindowsFabric.Common.dll

  • Microsoft.WindowsFabric.Data.Common.dll

ロールが Web ロールである場合は、次のアセンブリ参照も追加されます。

  • Microsoft.Web.DistributedCache.dll

注意

In-RoleキャッシュとMicrosoft Azure Shared Cachingは同じ API を共有し、アセンブリ名は同じですが、アセンブリ自体は異なり、異なる場所にあります。 In-Role キャッシュ NuGet パッケージは、Shared Caching アセンブリ参照を削除し、正しいIn-Roleキャッシュ アセンブリ参照を追加します。 In-Role キャッシュ アセンブリはフォルダーにあります C:\Program Files\Microsoft SDKs\Azure\.NET SDK\2012-10\ref\Caching

ASP.NET セッションおよびページ出力 Caching を移行する

「キャッシュ クライアントの構成」の説明に従って、ASP.NET Web ロール クライアントを Microsoft Azure Shared Caching から In-Role Cache に移行した後、ASP.NET セッション状態またはページ出力キャッシュをロール内キャッシュに格納するために必要な変更は最小限です。 ASP.NET セッション状態のキャッシュへの格納を有効にするには、system.webweb.config に次のセクションを追加します。

注意

ASP.NET Web ロールが、Microsoft Azure キャッシュのセッション状態プロバイダーを使用するように既に構成されている場合、このセクションは既に存在します。

<sessionState mode="Custom" customProvider="AppFabricCacheSessionStoreProvider">
  <providers>
    <add name="AppFabricCacheSessionStoreProvider" type="Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache" cacheName="default" useBlobMode="true" dataCacheClientName="default" />
  </providers>
</sessionState>

セッション状態を保持するキャッシュ クラスターにキャッシュを指定するには、cacheName を更新します。 既定のキャッシュを指定するには、default を使用します。

ページ出力 Caching のキャッシュへの格納を有効にするには、system.web に次のセクションを追加します。

注意

ASP.NET Web ロールが、Microsoft Azure キャッシュの出力キャッシュ プロバイダーを使用するように既に構成されている場合、このセクションは既に存在します。

<caching>
  <outputCache defaultProvider="DistributedCache">
    <providers>
      <add name="DistributedCache" type="Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider, Microsoft.Web.DistributedCache" cacheName="default" dataCacheClientName="default" />
    </providers>
  </outputCache>
</caching>

セッション状態を保持するキャッシュ クラスターにキャッシュを指定するには、cacheName を更新します。 既定のキャッシュを指定するには、default を使用します。

出力をキャッシュする各ページに、OutputCache ディレクティブを追加します。

<%@ OutputCache Duration="60" VaryByParam="*" %>

この例では、キャッシュされたページ データはキャッシュに 60 秒残り、ページの別のバージョンが各パラメーターの組み合わせに対してキャッシュされます。 使用可能なオプションの詳細については、「 OutputCache ディレクティブ」を参照してください。