從 Azure Shared Caching 移轉至角色中快取

重要

Microsoft 建議使用 Azure Redis 快取的所有新開發。 如需選擇 Azure 快取供應專案的目前檔和指引,請參閱 哪一個 Azure 快取供應專案適合我?

使用Microsoft Azure 共用快取移轉應用程式以In-Role快取快取,可以透過對應用程式進行最少變更來完成。 因為In-Role快取使用與共用快取相同的 API,所以可以重複使用使用共用快取存取快取的現有程式碼來存取In-Role快取內快取。 本主題說明如何進行必要的組態和應用程式變更,以移轉共用快取應用程式以使用In-Role快取。

注意

如需使用In-Role快取優點的詳細資訊,請參閱 關於 Azure 快取In-Role快取

移轉步驟

下列各節說明移轉Microsoft Azure 共用快取應用程式以使用In-Role快取所需的步驟。

  • 決定快取叢集部署拓撲

    • 設定專用角色快取叢集

    • 設定共置角色快取叢集

  • 設定快取叢集儲存體帳戶

  • 設定具名快取設定

  • 設定快取用戶端

    • 移除 Shared Caching 設定

    • 使用快取 NuGet 封裝來設定 Cache Client

  • 移轉 ASP.NET 工作階段和頁面輸出 Caching

決定快取叢集部署拓撲

In-Role Cache 可讓您在 Azure 角色上裝載快取服務。 在此模型中,快取是雲端服務的一部分。 系統會選取雲端服務內的一個角色來裝載In-Role快取。 該角色的執行中執行個體加入記憶體資源來形成「快取叢集」(Cache Cluster)。 此私用快取叢集僅適用於相同部署中的角色。 In-Role快取有兩個部署拓撲:專用和共置。

快取叢集部署拓撲 描述

專用角色快取

背景工作角色執行個體專用於快取。

共置角色快取

快取與角色所主控的主要應用程式會共用 VM 資源 (頻寬、CPU 和記憶體)。

如果您的應用程式在其現有角色中有未用的記憶體,則您可以在這些角色上設定共置角色快取叢集,並利用這額外的記憶體來進行快取。 如果角色中沒有足夠的額外記憶體可支援快取叢集,您可以將角色向外擴充,或新增快取背景工作角色並設定專用角色快取 cluster.Azure

  • 設定專用角色快取叢集

  • 設定共置角色快取叢集

設定專用角色快取叢集

若要設定專用角色快取叢集,請將快取背景工作角色新增至專案。 若要新增快取背景工作角色,請在方案總管中展開 Azure,如果尚未展開。

注意

專用角色快取僅支援於背景工作角色,無法設定於 Web 角色。

在 Azure 專案中的 [角色] 資料夾上按一下滑鼠右鍵,然後選擇 [新增]、[新的背景工作角色專案] 及 [快取背景工作角色]。 在 [名稱] 方塊中輸入所需的角色名稱,然後按一下 [新增]

Add Cache Worker Role

專用角色快取已預先設定一個快取背景工作角色。 若要檢視設定,請以滑鼠右鍵按一下 [Azure 角色 ] 資料夾中新增的角色,然後選擇 [ 屬性]。

Cache Worker Role Properties Context Menu

切換至 [Caching] 索引標籤,查看快取背景工作角色的快取內容。

Cache Worker Role Properties

因為此角色是快取背景工作角色,所以已勾選 [啟用 Caching] 核取方塊並選取 [專用角色] 快取。 快取的設定是在 [具名快取設定] 區段中進行設定。 In-Role快取與Microsoft Azure 共用快取之間的快取設定有一些差異。 下列各節將說明這些設定:設定快取叢集儲存體帳戶和設定具名快取設定。

切換至 [設定] 索引標籤。

Role Instance VM Size and Instance Count

預設 [執行個體計數] 為 [1],預設 [VM 大小] 為 [小]。 請修改這些設定來符合您要的設定。 Azure In-Role 快取的容量規劃考慮指南可提供哪些設定以符合應用程式快取需求的指引。

新增快取背景工作角色並設定虛擬機器大小和實例計數之後,您可以設定快取,如下列設定具名快取設定一節中所述。

設定共置角色快取叢集

若要設定共置的角色快取叢集,請在 [Azure 角色 ] 資料夾中以滑鼠右鍵按一下所需的角色,然後選擇 [ 屬性]。

Web Role Properties

切換至 [Caching] 索引標籤、勾選 [啟用 Caching] 核取方塊,然後指定所需的快取選項。 預設設定會在快取的角色執行個體中配置 30% 的記憶體。 請調整 [快取大小 (%)] 滑動軸來設定所需的快取大小。

Caching Role Properties

可使用一個非常基本的概算公式來決定快取大小,就是將角色執行個體數目乘以根據虛擬機器大小的記憶體數量,然後取用指定的百分比。 請注意,此公式是非常基本的近似值,如需布建所需大小快取所需設定的詳細資訊,請參閱 Azure In-Role 快取的容量規劃考慮。 如果需要更多角色執行個體或更大的虛擬機器大小才能順利主控快取叢集,請在 [設定] 索引標籤上設定。

設定快取叢集儲存體帳戶

In-Role快取需要 Azure 儲存體帳戶。 此儲存體帳戶會用來保留關於快取叢集的相關組態資料,而此快取叢集可從構成快取叢集的所有虛擬機器進行存取。 您可以在快取叢集角色內容頁的 [Caching] 索引標籤 (位於 [具名快取設定] 上方) 中指定儲存體帳戶。

Cache Cluster Storage Account

重要

如果未設定此儲存體帳戶,角色將無法啟動。

設定具名快取設定

快取設定是在 [具名快取設定] 區段中進行設定。

Named Cache Settings

In-Role快取與Microsoft Azure 共用快取之間的快取設定有一些差異。

功能 In-Role快取支援 Microsoft Azure 共用快取支援

名稱

已設定 [預設] 快取,如有需要,可設定其他具名快取。

只有預設快取。

高可用性

對快取中的項目提供高可用性。 如果有一個角色當機,快取中仍有項目的備份副本可用。

沒有高可用性。

通知

當快取叢集上發生各種快取作業時,通知可讓應用程式接收非同步通知。

如需詳細資訊,請參閱 Azure In-Role快取中的通知

不支援。

收回原則

選項為 [LRU] (最近使用) 或 [無]。 預設值為 [LRU]

只有 LRU。

存留時間 (分鐘)

項目在快取中的預設到期時間為 10 分鐘,但可設定。 新增至快取之個別專案的到期時間,也可以使用新增至快取的專案時,使用 AddPut 的多載來指定。

預設到期時間為 24 小時,且不可設定。 當專案新增至快取時,可以使用 AddPut 的多載來設定新增至快取的個別專案的到期時間。

到期類型

總共有三種類型的到期類型絕對,和滑動視窗。 指定 [絕對] 時,[存留時間 (分鐘)] 指定的到期間隔會在將項目新增至快取時開始計算。 指定 [滑動視窗] 時,每次在快取中存取項目就會重設間隔。 指定 [無] 時,[存留時間 (分鐘)] 必須設為 0,項目將不會過期。 預設值為 [絕對]

如需詳細資訊,請參閱 Azure In-Role快取中的到期和收回

到期原則為絕對。 到期間隔是從項目新增至快取時開始計算。

設定快取用戶端

設定快取叢集後,下一步是新增必要的設定和參考,讓快取用戶端可存取快取。 在In-Role快取中,用戶端可以是與快取叢集相同部署中的任何角色。 存取共置角色快取叢集時,用戶端可以是主控快取叢集的角色本身。 若要設定快取用戶端,請對存取快取的每一個角色執行下列步驟。

  • 移除 Shared Caching 設定

  • 使用快取 NuGet 封裝來設定 Cache Client

移除 Shared Caching 設定

在設定用戶端角色In-Role快取之前,必須先移除現有的共用快取組態和元件參考。 如果使用 共用快取 NuGet 套件來設定共用快取,則可以卸載共用快取 NuGet套件來移除設定,否則必須手動移除。

  • 解除安裝 Shared Caching NuGet 封裝

  • 手動移除 Shared Caching 設定

解除安裝 Shared Caching NuGet 封裝

若要卸載共用快取 NuGet套件,請在方案總管中以滑鼠右鍵按一下所需的用戶端角色,然後選擇 [管理NuGet套件]。 選擇 [已安裝封裝] 節點,並在 [搜尋已安裝封裝] 方塊中輸入 [Caching]。 選擇 [Azure Shared Caching],按一下 [解除安裝],再按一下 [關閉]

Uninstall Shared Caching NuGet Package

注意

如果清單中沒有Microsoft Azure 共用快取 NuGet套件,請按一下 [關閉],然後遵循手動移除共用快取組態中的步驟。

卸載共用快取 NuGet套件會移除 共用快取 元件,以及用戶端角色 或 web.config 中的 app.config 共用快取專案。 由於部分自訂設定在解除安裝 NuGet 封裝時不會加以移除,請開啟 web.configapp.config,並確定已完全移除以下元素。

  • 確定已從 configSections 項目移除 dataCacheClients 項目。 請勿移除整個 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>
    

移除共用快取組態之後,您可以如下列使用快取NuGet套件設定快取用戶端一節中所述設定快取用戶端。

手動移除 Shared Caching 設定

若要手動移除共用快取組態,您必須從 app.configweb.config 移除共用快取元件參考和共用快取組態。

若要移除共用快取元件參考,請選取方案總管中所需的用戶端角色,然後展開 [參考]資料夾。 在以下清單中的每個組件上,在 [方案總管] 中的 [參照] 資料夾上按一下滑鼠右鍵,再選擇 [移除]。 若用戶端角色為網路角色,也請一併移除 [Microsoft.Web.DistributedCache]

  • Microsoft.ApplicationServer.Caching.Client

  • Microsoft.ApplicationServer.Caching.Core

  • Microsoft.WindowsFabric.Common

  • Microsoft.WindowsFabric.Data.Common

若要移除共用快取組態,請開啟 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 封裝來設定 Cache Client

In-Role Cache 提供NuGet套件,以新增必要的組態和元件參考,以允許用戶端角色存取快取叢集。

重要

使用快取In-Role快取NuGet套件設定快取用戶端之前,請確定已從 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.configapp.config 中會新增數個項目。

  1. 會新增兩個區段到 configSections,名為 dataCacheClientscacheDiagnostics

    <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] 取代為裝載快取叢集的角色名稱。 在下列範例中,[cache cluster role name] 已取代為 CacheWorkerRole1

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

    警告

    必須適當設定此設定,否則用戶端無法存取快取。 如果識別碼未對應至角色,當使用內部DataCacheException存取快取時,將會擲回TargetInvocationException,其中包含類似下列的訊息: The role [cache cluster role name] was not found in the current deployment 。 如果識別碼對應至部署中未裝載快取叢集的角色,則會擲回 InvalidOperationException 並顯示下列訊息: No Endpoints found

  3. cacheDiagnostics 區段也新增到 configuration 區段。

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

    注意

    預設會停用快取用戶端的損毀傾印,並由此區段控制。 如需快取診斷的詳細資訊,請參閱 Azure In-Role快取疑難排解和診斷

In-Role快取NuGet套件也會將ClientDiagnosticLevel設定新增至 ConfigurationSettingsServiceConfiguration.cscfg 快取用戶端角色的 。 下列範例是 WebRole1ClientDiagnosticLevel為 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 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

如果角色是 Web 角色,則也會新增下列組件參考。

  • Microsoft.Web.DistributedCache.dll

注意

In-Role快取和Microsoft Azure 共用快取共用相同的 API,雖然元件名稱相同,但元件本身不同,而且位於不同的位置。 In-Role快取NuGet套件將會移除共用快取元件參考,並新增正確的In-Role快取元件參考。 In-Role快取元件位於 C:\Program Files\Microsoft SDKs\Azure\.NET SDK\2012-10\ref\Caching 資料夾中。

移轉 ASP.NET 工作階段和頁面輸出 Caching

一旦 ASP.NET Web 角色用戶端從Microsoft Azure 共用快取移轉至In-Role快取,如設定快取用戶端中所述,只需要進行最少的變更,才能將 ASP.NET 會話狀態或頁面輸出快取儲存在角色內快取中。 若要將 ASP.NET 工作階段狀態儲存在快取中,請將下列區段新增至 system.web 中的 web.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 指示詞