导出 (0) 打印
全部展开

从 Azure Shared Caching 迁移到角色中缓存

更新时间: 2010年7月

将使用 Microsoft Azure Shared Caching 的应用程序迁移到 角色中缓存 缓存只需对应用程序进行少量的更改即可完成。由于角色中缓存与Shared Caching使用相同的 API,因此可重用通过Shared Caching来访问缓存的现有代码,以便访问角色中缓存角色中缓存。本主题介绍如何进行必要的配置和应用程序更改来迁移Shared Caching应用程序,以便使用角色中缓存。

note备注
有关使用 角色中缓存 的优势的详细信息,请参阅 关于 Azure 缓存的角色中缓存

角色中缓存提供在 缓存 角色上托管服务的功能。在此模型中,缓存是云服务的一部分。将选择云服务中的一个角色来托管角色中缓存。该角色的运行实例将加入内存资源以形成缓存群集。此专用缓存群集仅可用于同一部署中的角色。角色中缓存 有两种部署拓扑:专用拓扑和共存拓扑。

 

缓存群集部署拓扑 描述

专用角色缓存

辅助角色实例专门用于缓存。

共存角色缓存

缓存与角色所托管的主要应用程序共享 VM 资源(带宽、CPU 和内存)。

如果应用程序在其现有角色中有未利用的内存,则可在这些角色上配置共存角色缓存群集,并将该额外内存用于缓存。如果角色中没有足够的额外内存来支持缓存群集,则既可向外扩展角色,也可添加缓存辅助角色并配置专用角色缓存群集。

若要配置专用的角色缓存群集,请将缓存辅助角色添加到项目中。若要添加缓存辅助角色,请在“解决方案资源管理器”中展开 (如果尚未展开)。

note备注
专用角色缓存仅受辅助角色支持,不能在 Web 角色上配置。

右键单击 项目中的“角色”文件夹,然后依次选择“添加”、“新建辅助角色项目”和“缓存辅助角色”。在“名称”框中键入所需的角色名称,然后单击“添加”。

已为专用角色缓存预配置了缓存辅助角色。若要查看设置,请在 的“角色”文件夹中右键单击新添加的角色,然后选择“属性”。

切换到“Caching”选项卡以查看缓存辅助角色的缓存属性。

由于此角色是缓存辅助角色,因此“启用 Caching”复选框已选中,并且“专用角色”缓存处于选中状态。缓存设置将在“命名缓存设置”部分进行配置。角色中缓存和 Microsoft Azure Shared Caching在缓存设置方面有一些不同。以下配置缓存群集存储帐户配置命名缓存设置部分介绍了这些设置。

切换到“配置”选项卡。

默认“实例计数”为 1,默认“VM 大小”为“小”。修改这些设置,使之与所需配置匹配。角色中缓存的容量计划注意事项(Azure 缓存)指南可以提供相关指导,即选择哪些设置才能满足应用程序的缓存要求。

添加了缓存辅助角色并配置了虚拟机大小和实例计数后,便可以按照下面的配置命名缓存设置部分所述配置缓存。

若要配置共存角色缓存群集,请在 的“角色”文件夹中右键单击所需的角色,然后选择“属性”。

切换到“Caching”选项卡,选中“启用 Caching”复选框,并指定所需的缓存选项。默认配置将分配角色实例中 30% 的内存用于缓存。调整“缓存大小(%)”滑块可配置所需的缓存大小。

确定缓存大小时,一个很基本的近似公式是用角色实例的数量乘以基于虚拟机大小的内存量,然后使用指定的百分比。请注意,此公式只是一个很基本的近似公式,而设置所需大小的缓存需要进行相应的设置,如需此方面的详细信息,请参阅 角色中缓存的容量计划注意事项(Azure 缓存)。如果需要其他角色实例或更大的虚拟机大小才能成功托管缓存群集,则可在“配置”选项卡上进行配置。

角色中缓存 需要一个 存储帐户。此存储帐户用于保存有关缓存群集的配置数据,这些数据可从组成缓存群集的所有虚拟机中进行访问。可以在缓存群集角色属性页的“Caching”选项卡中的“命名缓存设置”正上方指定此存储帐户。

Important重要提示
如果不配置此存储帐户,将无法启动角色。

缓存设置在“命名缓存设置”部分进行配置。

角色中缓存和 Microsoft Azure Shared Caching在缓存设置方面有一些不同。

 

功能 角色中缓存支持 Microsoft Azure Shared Caching支持

Name

配置“默认”缓存,需要时可配置附加命名缓存。

仅默认缓存。

高可用性

为缓存中的项目提供高可用性。如果一个角色关闭,仍然可以使用缓存中的项目的备份副本。

没有高可用性。

通知

通知功能允许应用程序在缓存群集上发生各种缓存操作时接收异步通知。

有关详细信息,请参阅 TechNet 上的 通知(Azure 缓存的角色中缓存)

不受支持。

逐出策略

选项包括 LRU(最近一次使用)或“无”。默认值为 LRU

仅 LRU。

生存时间(分钟)

缓存中的项目的默认过期时间是 10 分钟,但这是可以配置的。此外,还可以在将项目添加到缓存中时使用 AddPut 的重载,指定添加到缓存中的单个项目的过期时间。

默认过期时间是 24 小时,并且是不可配置的。可以在将项目添加到缓存中时使用 AddPut 的重载,配置添加到缓存中的单个项目的过期时间。

过期类型

有三种“过期类型”:“无”、“绝对”和“滑动窗口”。如果指定了“绝对”,则当项目添加到缓存中时,由“生存时间(分钟)”指定的过期时间间隔便开始计时。如果指定了“滑动窗口”,则每次访问缓存中的项目时,时间间隔将被重置。如果指定了“无”,则“生存时间(分钟)”必须设置为“0”,项目将不会过期。默认值为“绝对”。

有关详细信息,请参阅 TechNet 上的 过期和逐出(Azure 缓存的角色中缓存)

过期策略是绝对的。项目添加到缓存中时,过期时间间隔开始计时。

配置缓存群集后,下一步是添加必要的配置和引用以便缓存客户端可以访问缓存。在 角色中缓存中,客户端可以是与缓存群集相同的部署中的任何角色。访问共存角色缓存群集时,客户端可以是托管缓存群集的角色本身。若要配置缓存客户端,请针对每个可访问缓存的角色执行以下步骤。

为 角色中缓存 配置客户端角色之前,必须删除现有的 Shared Caching 配置和程序集引用。如果 Shared Caching 是使用 Shared Caching NuGet 程序包配置的,则可以通过卸载 Shared Caching NuGet 程序包来删除该配置,否则必须手动将它删除。

若要卸载 Shared Caching NuGet 程序包,请在“解决方案资源管理器”中右键单击所需的客户端角色,然后选择“管理 NuGet 程序包”。选择“已安装的程序包”节点,然后在“搜索已安装的程序包”框中键入“Caching”。选择“Azure Shared Caching”,单击“卸载”,然后单击“关闭”。

note备注
如果列表中没有 Microsoft Azure Shared Caching NuGet 程序包,请单击“关闭”,然后遵照手动删除 Shared Caching 配置中的步骤操作。

卸载 Shared Caching NuGet 程序包会删除客户端角色的 app.configweb.config 中的 Shared Caching 程序集和 Shared Caching 条目。由于在卸载 NuGet 程序包时可能不会删除某些自定义设置,因此,请打开 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 部分将类似于以下示例。

    <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 配置,必须从 app.configweb.config 中删除 Shared Caching 程序集引用和 Shared Caching 配置。

若要删除 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,然后删除以下两项。

  • 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 程序包,以允许客户端角色访问缓存群集。

Important重要提示
在使用 角色中缓存 NuGet 程序包配置缓存客户端之前,请确保已从客户端角色的 web.configapp.config 中完全删除了 Shared Caching 配置,如前一部分所述。

若要使用 角色中缓存 NuGet 程序包,请在“解决方案资源管理器”中右键单击所需的客户端角色,然后选择“管理 NuGet 程序包”。

选择“Azure Caching”,单击“安装”,然后单击“我接受”。将程序包安装到角色后,请单击“关闭”以关闭“管理 NuGet 程序包”窗口。

note备注
如果“Azure Caching”未出现在列表中,请在“联机搜索”文本框中键入“WindowsAzure.Caching”。

角色中缓存 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" />
    
    Warning警告
    必须正确配置此设置,否则客户端将无法访问缓存。如果标识符未映射到角色,则在使用包含类似于以下内容的消息的内部 TargetInvocationException 访问缓存时,将引发 DataCacheExceptionThe 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>
    
    note备注
    缓存客户端的故障转储默认禁用并由此部分控制。有关缓存诊断的详细信息,请参阅 角色中缓存的疑难解答和诊断(Azure 缓存)

角色中缓存 NuGet 程序包还会将 ClientDiagnosticLevel 设置添加到 ConfigurationSettings 中缓存客户端角色的 ServiceConfiguration.cscfg。以下示例显示了 ClientDiagnosticLevel 为 1(默认的 ClientDiagnosticLevel)的某个 WebRole1 文件的 ServiceConfiguration.cscfg 部分。

<Role name="WebRole1">
  <Instances count="1" />
  <ConfigurationSettings>
    <!-- Other settings omitted for clarity... -->
    <Setting name="Microsoft.WindowsAzure.Plugins.Caching.ClientDiagnosticLevel" value="1" />
  </ConfigurationSettings>
</Role>
note备注
有关缓存诊断级别的详细信息,请参阅 角色中缓存的疑难解答和诊断(Azure 缓存)

除了添加所需的配置外,角色中缓存 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

note备注
角色中缓存和 Microsoft Azure Shared Caching共享同一 API,虽然程序集名称相同,但程序集本身不同且位于不同的位置。角色中缓存 NuGet 程序包将删除 Shared Caching 程序集引用,然后添加正确的 角色中缓存 程序集引用。角色中缓存程序集位于 C:\Program Files\Microsoft SDKs\Azure\.NET SDK\2012-10\ref\Caching 文件夹中。

ASP.NET Web 角色客户端从 Microsoft Azure Shared Caching 迁移到 角色中缓存(如配置缓存客户端所述)后,只需极少量的更改即可将 ASP.NET 会话状态或页面输出缓存存储到角色中缓存。若要启用在缓存中存储 ASP.NET 会话状态,请向 system.web 中的 web.config 添加以下节。

note备注
如果你的 ASP.NET Web 角色已配置为使用用于 Microsoft Azure Cache的会话状态提供程序,则此节已存在。

<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 中。

note备注
如果你的 ASP.NET Web 角色已配置为使用用于 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 指令

显示:
© 2014 Microsoft