다음을 통해 공유


Azure 공유 캐싱에서 역할 내 캐시로 마이그레이션

중요

Microsoft는 모든 새 개발에서 Azure Redis Cache를 사용하는 것이 좋습니다. Azure Cache 제품 선택에 대한 현재 설명서 및 지침 은 나에게 적합한 Azure Cache 제품을 참조하세요.

Microsoft Azure Shared Caching 사용하여 In-Role 캐시 캐싱으로 애플리케이션을 마이그레이션하는 작업은 애플리케이션에 대한 최소한의 변경으로 수행할 수 있습니다. In-Role Cache는 Shared Caching 동일한 API를 사용하므로 Shared Caching 사용하여 캐시에 액세스하는 기존 코드를 다시 사용하여 In-Role 캐시 역할 내 캐시에 액세스할 수 있습니다. 이 항목에서는 In-Role Cache를 사용하도록 Shared Caching 애플리케이션을 마이그레이션하는 데 필요한 구성 및 애플리케이션을 변경하는 방법을 보여 줍니다.

참고

In-Role Cache 사용의 이점에 대한 자세한 내용은 Azure Cache에 대한 In-Role Cache 정보를 참조하세요.

마이그레이션 단계

다음 섹션에서는 In-Role Cache를 사용하도록 Microsoft Azure Shared Caching 애플리케이션을 마이그레이션하는 데 필요한 단계를 설명합니다.

  • 캐시 클러스터 배포 토폴로지 결정

    • 전용 역할 캐시 클러스터 구성

    • 같은 위치에 배치된 역할 캐시 클러스터 구성

  • 캐시 클러스터 저장소 계정 구성

  • 명명된 캐시 설정 구성

  • 캐시 클라이언트 구성

    • 공유 캐싱 구성 제거

    • 캐싱 NuGet 패키지를 사용하여 캐시 클라이언트 구성

  • ASP.NET 세션 및 페이지 출력 캐싱 마이그레이션

캐시 클러스터 배포 토폴로지 결정

In-Role Cache는 Azure 역할에서 캐싱 서비스를 호스트하는 기능을 제공합니다. 이 모델에서 캐시는 클라우드 서비스의 일부입니다. 클라우드 서비스 내의 한 역할이 In-Role 캐시를 호스트하도록 선택됩니다. 실행 중인 해당 역할의 인스턴스에서 메모리 리소스를 연결하여 캐시 클러스터를 만듭니다. 이 비공개 캐시 클러스터는 동일한 배포 내의 역할에서만 사용할 수 있습니다. In-Role Cache에는 전용 및 공동 배치라는 두 가지 배포 토폴로지가 있습니다.

캐시 클러스터 배포 토폴로지 Description

전용 역할 캐싱

작업자 역할 인스턴스가 캐싱에만 사용됩니다.

같은 위치에 배치된 역할 캐싱

캐시가 역할에서 호스팅된 기본 응용 프로그램과 VM 리소스(대역폭, CPU 및 메모리)를 공유합니다.

응용 프로그램에서 기존 역할의 메모리를 사용하지 않으면 해당 역할에 같은 위치에 배치된 역할 캐시 클러스터를 구성하고 여분의 캐싱 메모리를 사용할 수 있습니다. 역할에 여분의 메모리가 부족해서 캐시 클러스터를 지원할 수 없으면 역할을 확장하거나 캐시 작업자 역할을 추가하여 전용 역할 캐시 클러스터를 구성할 수 있습니다.

  • 전용 역할 캐시 클러스터 구성

  • 같은 위치에 배치된 역할 캐시 클러스터 구성

전용 역할 캐시 클러스터 구성

전용 역할 캐시 클러스터를 구성하려면 캐시 작업자 역할을 프로젝트에 추가합니다. 캐시 작업자 역할을 추가하려면 아직 확장되지 않은 경우 솔루션 탐색기 Azure를 확장합니다.

참고

전용 역할 캐싱은 작업자 역할에서만 지원되며 웹 역할에서 구성할 수 없습니다.

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 Roles 폴더에서 원하는 역할을 마우스 오른쪽 단추 클릭하고 속성을 선택합니다.

Web Role Properties

캐싱 탭으로 전환하여 캐싱 사용 확인란을 선택하고 원하는 캐싱 옵션을 지정합니다. 기본 구성에서는 역할 인스턴스 메모리의 30%가 캐싱에 할당됩니다. 캐싱 크기(%) 슬라이더를 조정하여 원하는 캐시 크기를 구성합니다.

Caching Role Properties

캐시 크기를 결정하는 데 사용된 가장 기본적인 근사치를 얻는 공식은 역할 인스턴스의 수와 가상 컴퓨터 크기에 따른 메모리 용량을 곱한 다음 지정된 백분율을 곱하는 것입니다. 이 수식은 매우 기본적인 근사치이며 원하는 크기의 캐시를 프로비전하는 데 필요한 설정에 대한 자세한 내용은 Azure In-Role Cache에 대한 용량 계획 고려 사항을 참조하세요. 캐시 클러스터를 성공적으로 호스팅하기 위해 역할 인스턴스를 추가하거나 가상 컴퓨터의 크기를 늘려야 할 경우 구성 탭에서 구성할 수 있습니다.

캐시 클러스터 저장소 계정 구성

In-Role Cache에는 Azure Storage 계정이 필요합니다. 이 스토리지 계정은 캐시 클러스터를 구성하는 모든 가상 머신에서 액세스하는 캐시 클러스터에 대한 구성 데이터를 유지하는 데 사용됩니다. 이 저장소 계정은 명명된 캐시 설정 바로 위에 있는 캐시 클러스터 역할 속성 페이지의 캐싱 탭에서 지정됩니다.

Cache Cluster Storage Account

중요

이 스토리지 계정을 구성하지 않으면 역할을 시작할 수 없습니다.

명명된 캐시 설정 구성

캐시 설정은 명명된 캐시 설정 섹션에서 구성됩니다.

Named Cache Settings

캐시 설정에는 In-Role 캐시와 Microsoft Azure Shared Caching 간에 몇 가지 차이점이 있습니다.

특징 In-Role 캐시 지원 Microsoft Azure Shared Caching 지원

이름

default 캐시가 구성되어 있으며, 필요한 경우 명명된 캐시를 추가로 구성할 수 있습니다.

기본 캐시만 해당됩니다.

고가용성

캐시 항목에 고가용성이 제공됩니다. 하나의 역할이 중단되면 캐시 내 항목의 백업본을 계속 사용할 수 있습니다.

고가용성이 제공되지 않습니다.

알림

알림을 사용하면 캐시 클러스터에서 여러 캐시 작업이 발생할 때 응용 프로그램이 비동기적 알림을 받을 수 있습니다.

자세한 내용은 Azure In-Role Cache의 알림을 참조하세요.

지원되지 않습니다.

제거 정책

LRU(마지막으로 사용한 항목) 또는 없음을 선택할 수 있습니다. 기본값은 LRU입니다.

LRU만 해당됩니다.

TL(Time to Live)

캐시 항목의 기본 만료 시간은 10분이지만 이 값을 구성할 수 있습니다. 캐시에 추가된 개별 항목의 만료 시간은 항목이 캐시에 추가될 때 추가배치 의 오버로드를 사용하여 지정할 수도 있습니다.

기본 만료 시간은 24시간이며 이 값은 구성할 수 없습니다. 캐시에 추가된 개별 항목의 만료 시간은 항목이 캐시에 추가될 때 추가배치 의 오버로드를 사용하여 구성할 수 있습니다.

만료 유형

만료 유형에는 없음, 절대, 슬라이딩 윈도우의 세 가지가 있습니다. 절대를 지정하면 항목이 캐시에 추가될 때 TTL(Time to Live)(분)에 지정된 만료 시간이 시작됩니다. 슬라이딩 윈도우를 지정하면 캐시에서 항목에 액세스할 때마다 만료 시간이 재설정됩니다. 안 함을 지정하면 TTL(Time to Live)(분)0으로 설정되고 항목이 만료되지 않습니다. 기본값은 절대입니다.

자세한 내용은 Azure In-Role Cache의 만료 및 제거를 참조하세요.

만료 정책은 절대입니다. 따라서 항목이 캐시에 추가되면 만료 간격이 시작됩니다.

캐시 클라이언트 구성

캐시 클러스터를 구성한 후에는 캐시 클라이언트가 캐시에 액세스할 수 있도록 필요한 구성 및 참조를 추가해야 합니다. In-Role Cache에서 클라이언트는 캐시 클러스터와 동일한 배포의 모든 역할일 수 있습니다. 같은 위치에 배치된 역할 캐시 클러스터에 액세스하는 경우 클라이언트는 캐시 클러스터를 호스팅하는 역할 자체가 될 수 있습니다. 캐시 클라이언트를 구성하려면 캐시에 액세스하는 각 역할에 대해 다음 단계를 수행합니다.

  • 공유 캐싱 구성 제거

  • 캐싱 NuGet 패키지를 사용하여 캐시 클라이언트 구성

공유 캐싱 구성 제거

클라이언트 역할이 In-Role Cache에 대해 구성되기 전에 기존 Shared Caching 구성 및 어셈블리 참조를 제거해야 합니다. Shared Caching NuGet 패키지를 사용하여 Shared Caching 구성한 경우 Shared Caching NuGet 패키지를 제거하여 구성을 제거할 수 있습니다. 그렇지 않으면 수동으로 제거해야 합니다.

  • 공유 캐싱 NuGet 패키지 제거

  • 공유 캐싱 구성 수동 제거

공유 캐싱 NuGet 패키지 제거

Shared Caching NuGet 패키지를 제거하려면 솔루션 탐색기 원하는 클라이언트 역할을 마우스 오른쪽 단추로 클릭하고 NuGet 패키지 관리를 선택합니다. 설치된 패키지 노드를 선택하고 설치된 패키지 검색 상자에 캐싱을 입력합니다. Azure 공유 캐싱을 선택하고 제거를 클릭한 다음 닫기를 클릭합니다.

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 어셈블리 참조를 제거하려면 솔루션 탐색기 원하는 클라이언트 역할을 선택하고 References 폴더를 확장합니다. 다음 목록의 각 어셈블리에 대해, 솔루션 탐색기에서 참조 폴더에 있는 어셈블리를 마우스 오른쪽 단추로 클릭하고 제거를 선택합니다. 클라이언트 역할이 웹 역할인 경우에는 Microsoft.Web.DistributedCache도 제거합니다.

  • Microsoft.ApplicationServer.Caching.Client

  • Microsoft.ApplicationServer.Caching.Core

  • Microsoft.WindowsFabric.Common

  • Microsoft.WindowsFabric.Data.Common

Shared Caching 구성을 제거하려면 클라이언트 역할을 열고 web.configapp.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>
      <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>
    

이러한 항목이 제거되고 나면 다음 섹션의 단계를 수행하여 캐시 클라이언트를 구성할 수 있습니다.

캐싱 NuGet 패키지를 사용하여 캐시 클라이언트 구성

In-Role Cache는 클라이언트 역할이 캐시 클러스터에 액세스할 수 있도록 필요한 구성 및 어셈블리 참조를 추가하는 NuGet 패키지를 제공합니다.

중요

In-Role Cache NuGet 패키지를 사용하여 캐시 클라이언트를 구성하기 전에 이전 섹션에서 설명한 대로 Shared Caching 구성이 클라이언트 역할에서 web.configapp.config 완전히 제거되었는지 확인합니다.

In-Role Cache NuGet 패키지를 사용하려면 솔루션 탐색기 원하는 클라이언트 역할을 마우스 오른쪽 단추로 클릭하고 NuGet 패키지 관리를 선택합니다.

Manage NuGet Packages

Azure 캐싱을 선택하고 설치를 클릭한 다음 동의함을 클릭합니다. 패키지가 역할에 설치되면 닫기를 클릭하여 NuGet 패키지 관리 창을 닫습니다.

참고

목록에 Azure 캐싱이 나타나지 않으면 온라인 검색 텍스트 상자에 WindowsAzure.Caching을 입력합니다.

Enable Caching using NuGet

In-Role Cache NuGet 패키지가 클라이언트 역할에 설치되면 클라이언트 역할이 원하는 캐시 클러스터에 액세스할 수 있도록 필요한 구성 및 어셈블리 참조를 추가합니다.

역할의 web.config 또는 app.config에 여러 항목이 추가됩니다.

  1. configSectionsdataCacheClients라는 두 개의 섹션이 cacheDiagnostics에 추가됩니다.

    <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이 throw됩니다. 식별자가 캐시 클러스터를 호스트하지 않는 배포의 역할에 매핑되는 경우 InvalidOperationException 이 다음 메시지 No Endpoints found와 함께 throw됩니다.

  3. cacheDiagnostics 섹션도 configuration 섹션에 추가됩니다.

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

    참고

    캐시 클라이언트의 크래시 덤프는 기본적으로 사용하지 않도록 설정되며 이 섹션에 의해 제어됩니다. 진단 캐싱에 대한 자세한 내용은 Azure In-Role 캐시 문제 해결 및 진단을 참조하세요.

In-Role Cache NuGet 패키지는 또한 ClientDiagnosticLevel 설정을 ConfigurationSettings 캐시 클라이언트 역할의 에 ServiceConfiguration.cscfg추가합니다. 다음 예제는 기본 ClientDiagnosticLevel인 ClientDiagnosticLevel이 1인 파일의 섹션 ServiceConfiguration.cscfg 입니다.WebRole1

<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 Cache 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

역할이 웹 역할인 경우 다음 어셈블리 참조도 추가됩니다.

  • Microsoft.Web.DistributedCache.dll

참고

In-Role 캐시 및 Microsoft Azure Shared Caching 동일한 API를 공유하며 어셈블리 이름은 동일하지만 어셈블리 자체는 다르며 다른 위치에 있습니다. In-Role Cache NuGet 패키지는 Shared Caching 어셈블리 참조를 제거하고 올바른 In-Role 캐시 어셈블리 참조를 추가합니다. In-Role Cache 어셈블리는 폴더에 C:\Program Files\Microsoft SDKs\Azure\.NET SDK\2012-10\ref\Caching 있습니다.

ASP.NET 세션 및 페이지 출력 캐싱 마이그레이션

캐시 클라이언트 구성에 설명된 대로 ASP.NET 웹 역할 클라이언트가 Microsoft Azure Shared Caching In-Role Cache로 마이그레이션되면 역할 내 캐시에 ASP.NET 세션 상태 또는 페이지 출력 캐싱을 저장하려면 최소한의 변경만 필요합니다. ASP.NET 세션 상태를 캐시에 저장하도록 설정하려면 다음 섹션을 system.webweb.config에 추가합니다.

참고

ASP.NET 웹 역할이 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를 사용합니다.

페이지 출력 캐싱을 캐시에 저장하도록 설정하려면 다음 섹션을 system.web에 추가합니다.

참고

ASP.NET 웹 역할이 Microsoft Azure Cache에 출력 캐시 공급자를 사용하도록 이미 구성된 경우 이 섹션이 이미 있습니다.

<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 지시문을 참조하세요.