导出 (0) 打印
全部展开

了解和管理 Azure 缓存中的连接

更新时间: 2010年7月

note备注
有关为你的应用程序选择合适的 Azure 缓存产品/服务的指导,请参阅 Azure 缓存常见问题解答

使用 Microsoft Azure Cache的应用程序必须了解向目标缓存打开连接的方式。这对于 Microsoft Azure Shared Caching尤其重要,因为每个Shared Caching产品均对可以同时向同一缓存打开的连接数有不同的限制。有关详细信息,请参阅 Azure Shared Caching 常见问题解答

角色中缓存 角色上的没有连接的配额,因为该缓存在你自己的 部署中的虚拟机上运行。然而,即使是在此专用或共存方案中,连接也是一种重要的资源,因为它们可能是要创建的昂贵资源。共享连接可以提高性能。

本主题涵盖有关连接管理的以下方面:

连接管理方式取决于连接池是已启用还是已禁用。以下部分介绍了两种可能的方案及其对连接记帐的影响。

从 2011 年 11 月版的 SDK 开始,缓存提供了连接池功能。配置连接池后,同一连接池将为单个应用程序实例共享。共享连接数由 maxConnectionsToServer 配置设置确定(默认值为 1)。以下示例显示了如何在应用程序配置文件中将此设置更改为 2

  <dataCacheClient maxConnectionsToServer="2">

每个应用程序实例将共享 maxConnectionsToServer 所指定的连接,而不管创建了多少个 DataCacheFactory 对象。因此,使用连接池时用于计算连接总数的公式为:maxConnectionsToServer 值乘以该 角色的运行实例数。

前一示例假设使用的是单个缓存客户端配置。考虑以下包含两个命名 dataCacheClient 节的Shared Caching配置文件。

<dataCacheClients>
  <dataCacheClient name="default" maxConnectionsToServer="2">
    <hosts>
      <host name="ExampleCache.cache.windows.net" cachePort="22233" />
    </hosts>
    <!-- Other Sections -->
  </dataCacheClient>

  <dataCacheClient name="SslEndpoint" maxConnectionsToServer="3">
    <hosts>
      <host name="ExampleCache.cache.windows.net" cachePort="22243" />
    </hosts>
    <!-- Other Sections -->
  </dataCacheClient>
</dataCacheClients>

在此示例中,应用程序可能会创建多个 DataCacheFactory 实例,其中一些实例使用 "default" 配置,另一些实例使用 "SSlEndpoint" 配置。连接池与单个配置相关。因此,即使两个配置指向相同的缓存 ExampleCache,此缓存可能的连接总数也会是这些配置的 maxConnectionsToServer 值的和,即 5

使用 角色中缓存 角色上托管的 时,并不始终默认使用连接池,即使在应用程序配置文件中设为默认使用也是如此。这是基于角色的角色中缓存的已知问题。若要启用使用基于角色的角色中缓存的连接池,必须将 useLegacyProtocol 显式设置为 false。以下配置部分显示了所使用的此设置,其中托管角色中缓存的角色名为 WebRole1

<dataCacheClients>
  <tracing sinkType="DiagnosticSink" traceLevel="Error" />
  <dataCacheClient name="default" useLegacyProtocol="false" >
    <autoDiscover isEnabled="true" identifier="WebRole1" />
  </dataCacheClient>
</dataCacheClients>

在此示例中,通过将 useLegacyProtocol 设置为 false 可确保使用连接池。否则,对于基于角色的角色中缓存,默认情况下不启用连接池。

note备注
使用应用程序配置文件时,连接池将按默认在最新的 SDK 中启用。如果你是以编程方式配置 DataCacheFactoryConfiguration,则连接池可能不会默认启用,并且某些操作会禁用连接池。请参阅本主题的连接池的编程配置部分。

禁用连接池时,每个 DataCacheFactory 对象使用一个连接。重要的是初始化并存储你的 DataCacheFactory 实例,以便控制打开的连接数,同时实现最佳性能。

当你未使用连接池时,将会根据以下公式定义缓存所需的连接数:

[DataCacheFactory instances] * [MaxConnectionsToServer setting] * [Azure role instance count]

默认情况下,maxConnectionsToServer 为 1。如果你正在跨线程共享 DataCacheFactory 对象,可以增加此设置以改善性能。例如,如果 maxConnectionsToServer2,则每个 DataCacheFactory 对象使用两个连接。

在此方案中,多个活动的 DataCacheFactory 对象各自都使用 maxConnectionsToServer 所指定的连接数。例如,如果此值为 2,并且有两个 DataCacheFactory 实例,则总共使用四个连接。如果此角色运行了三个实例,则总连接数将增加到 12

这在过去是默认的行为。安装最新 SDK 后,如果你使用应用程序配置文件,则会默认启用连接池。若要在配置文件中禁用连接池,请将 connectionPool 属性设置为 false。以下配置文件显示了此设置。

  <dataCacheClient connectionPool="false">

如果你是以编程方式配置缓存客户端,则连接池不是默认设置。有关编程配置和连接池的详细信息,请参阅下一部分连接池的编程配置

如果在不使用任何缓存配置文件设置的情况下以编程方式配置缓存客户端,则不会默认启用连接池。必须执行特殊的步骤才能通过代码来启用连接池。

  1. 创建一个 DataCacheFactoryConfiguration 对象。配置类似于 ServersSecurityProperties 的标准设置。

  2. 调用静态方法 DataCacheFactoryConfiguration. CreateNamedConfiguration,并传递新的配置名称、前面创建的 DataCacheFactoryConfiguration 对象,以及一个用于指示连接池是已启用 (true) 还是已禁用 (false) 的布尔值标志。

  3. 创建一个新的 DataCacheFactoryConfiguration 对象,向构造函数传递已启用连接池的配置的新名称。这是你在上一步指定的名称。

  4. 然后,创建一个使用该配置的 DataCacheFactory 对象。

DataCacheFactoryConfiguration Config = new DataCacheFactoryConfiguration();

// Configure the DataCacheFactoryConfiguration with appropriate settings for your cache here:
// ...

// Set the MaxConnectionsToServer to control the size of the connection pool
Config.MaxConnectionsToServer = 3;

// Create a named configuration from this configuration and enable connection pooling
DataCacheFactoryConfiguration.CreateNamedConfiguration("MyConfigWithConnectionPooling", Config, true);

// Create a DataCacheFactoryConfiguration using the new named configuration that enabled connection pooling
DataCacheFactoryConfiguration ConfigWithPooling = new DataCacheFactoryConfiguration("MyConfigWithConnectionPooling");

// Use this new named configuration in the call to DataCacheFactory
DataCacheFactory factory = new DataCacheFactory(ConfigWithPooling);

请注意,当你创建 DataCacheFactoryConfiguration 对象时,还可以从应用程序配置文件中的设置初始化配置。这种方法组合同时使用配置文件和代码来配置缓存客户端。如果构造函数为空,将读取“default”配置部分。如果向构造函数传递了字符串,则应用该命名的 dataCacheClient 部分。在此方案中,你可以从配置文件启用连接池,而不必通过调用 CreateNamedConfiguration 来实现此目的。

Warning警告
当你从应用程序配置文件初始化 DataCacheFactoryConfiguration 时,你对该配置所做的更改可能会导致禁用连接池。这些设置包括服务器、安全、压缩、maxConnectionsToServer 和传输属性。在这种情况下,你必须根据在其中启用了连接池的已修改配置,使用前述 CreateNamedConfiguration 方法来创建一个新配置。

启用 角色中缓存 角色上的时,对于除客户端和服务器的基础物理资源之外的连接,没有配额限制。但是,仍然建议你使用连接池来更轻松地重用和管理连接,从而提高性能。

如果启用了连接池,则应分析默认的 maxConnectionsToServer1 是否适合你的应用程序。如果在多个线程中使用 DataCacheFactory 对象,则可以考虑增加池中的连接数,使之大于 1,以便改进性能。当然,在这种情况下,你应该根据将要运行该代码的角色实例数,权衡这种做法对总体连接要求会产生怎样的影响。

如前所述,每个独立的命名配置都将获取各自的连接池。在计算缓存的总连接数时,了解这一点非常重要。

必须认识到,对缓存客户端使用应用程序配置文件设置时,其默认连接池行为不同于使用编程配置时的默认连接池行为。本主题前面的部分介绍了这些差异。由于编程配置较为复杂,你可以借助于配置文件(app.config 或 web.config)并通过配置缓存来使用连接池。

在使用以前的 SDK 版本或者手动禁用了连接池时,你应该在代码中创建、存储并重复使用最少量的 DataCacheFactory 对象。这样就不必为每个缓存操作建立新的连接,因此可改善性能。另外,这样还有助于更好地管理连接数。同样,如果要跨线程共享相同的 DataCacheFactory 对象,你可以通过增加 maxConnectionsToServer 值来提高性能。禁用连接池时,应仔细监视活动的 DataCacheFactory 对象数、maxConnectionsToServer 设置和角色实例数。所有这些因素共同决定了所使用的活动连接数。

显示:
© 2014 Microsoft