使用 Windows Server AppFabric 缓存编写 ASP.NET 应用程序

本示例介绍如何编写使用 AppFabric 缓存的简单 ASP.NET 应用程序。在开始之前,建议阅读下面关于AppFabric的文章,准备好AppFabric的开发环境。

Windows Server AppFabric 安装和配置

Windows Server AppFabric在工作组(Workgroup)环境下的配置

1. 使用Visual studio 2010 创建ASP.NET Web Application,命名为 AppFabricTest。在项目中,添加对AppFabric程序集的引用:

Microsoft.ApplicationServer.Caching.Client.dll

Microsoft.ApplicationServer.Caching.Core.dll

如下图所示:

Microsoft.ApplicationServer.Caching.Core.dll 是Cache基类库,Cache客户端和服务端都引用该DLL,包含配置库和基类缓存类型。

Microsoft.ApplicationServer.Caching.Client.dll 包含Cache客户端类库,如连接到Cache cluster存储和检索数据的API接口等等。

2. 打开 Global.asax 文件,添加命名空间的引用。

using Microsoft.ApplicationServer.Caching;

在Global 类中,添加public static string变量 – CacheFactoryName,并设置其值为 CacheFactory。通过使用静态字符串,应用程序代码中使用该Key检索CacheFactory对象。

public static string CacheFactoryName = “CacheFactory”;

在Application_Start 方法中,添加如下代码:

var dcf = new DataCacheFactory();

Application[CacheFactoryName] = dcf;

创建一个共享的DataCacheFactory对象实例,并存放在Application 对象,Key值为 CacheFactory。在实际的开发应用中,多数情况下,需要创建类似的共享DataCacheFactory对象。

3. 修改web.config文件,添加AppFabric 缓存配置。

在web.config 文件的<configuration> 元素下,添加如下内容:

?
1
2
3
4
5
6
7
8
9
10
11
< configSections >
< section name = "dataCacheClient"
type="Microsoft.ApplicationServer.Caching.DataCacheClientSection,
Microsoft.ApplicationServer.Caching.Core, Version = 1 .0.0.0, Culture = neutral ,
PublicKeyToken = 31bf3856ad364e35 " />
</ configSections >
< dataCacheClient >
< hosts >
< host name=<YourMachineName> cachePort="22233" />
</ hosts >
</ dataCacheClient >

其中<YourMachineName> 需要更改为实际的主机名称。

4. 打开Site.Master 代码文件,添加对AppFabric 命名空间的引用,同时添加读写Cache的代码。

using Microsoft.ApplicationServer.Caching;

在SiteMaster 文件中,添加一个新方法 –GetCachedName(),演示Cache的读写方法(GetCache / Put)。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public string GetCachedName()
{
string name = null ;
string key = "ApplicationName" ;
var dcf = Application[Global.CacheFactoryName] as DataCacheFactory;
if (dcf != null )
{
var cache = dcf.GetCache( "Lab1Cache" );
name = cache.Get(key) as string ;
if (name == null )
{
name = "Windows Server App Fabric Cache Lab" ;
cache.Put(key, name);
}
else
{
name += " From Cache!" ;
}
}
return name;
}

打开 Site.Master 页面文件,将其中的文本 My ASP.NET Application 更改为 <%= GetCachedName() %>,调用代码文件中新添加的方法,测试Cache的使用。

5. 运行范例程序,测试Cache的使用

第一次运行范例程序,界面如下,表示Cache中没有值。

按 F5 刷新或者Refresh按钮,运行界面如下所示,表示从Cache中获取值。

下面是在powershell窗口中,运行get-cache 命令显示的信息,第一次Lab1Cache 缓存中没有信息;第二次运行时Lab1Cache 缓存中有内容了。

下面是Powershell窗口中,Get-CacheStatistics 命令显示缓存的统计信息。

在PowerShell 窗口,可通过 Remove-Cache Lab1Cache 删除缓存信息。

赠送一段AppFabric Cache的程序代码,和本范例程序没有关系,可了解如何针对AppFabric Cache编程。

1. 从PowerShell 启动和管理AppFabric 内存集群

使用管理员帐号运行PowerShello命令,输入

Get-Command *cache*

查看cache management的所有不同命令。

Start-CacheCluster – 启动Cache 服务;

可以看到一台机器已经在Cache集群中,可以添加多台这样的机器,并且在其中某台机器当机的情况下,Cache系统仍然能够保持数据的高可靠性。

2. 在ASP.NET 应用程序中使用AppFabric Cache

在AppFabric Cache 设置好了之后,可以在ASP.NET代码中调用Cache API 接口方法,如Add / Get / Put 等等,读写Cache。

具体实现细节,可参考《使用 Windows Server AppFabric 缓存编写 ASP.NET 应用程序》。

3. 检查Cache的状态

在Cache中读写操作之后,可以在PowerShell窗口查看Cache状态。

Get-Cache

Get-CacheStatistics [CACHE NAME]

还可以使用性能监控器,它提供了许多不同类别的计数器。

在重启Web server之后,AppFabric Cache依然存在。

4. 使用AppFabric替换ASP.NET Session的存储

在ASP.NET 4中通过web.config用AppFabric替换默认的Session State存储方法也是件很容易的事情。

AppFabric 提供了定制的Session Provider,仅仅只需要对配置文件进行更改,就可将Session信息存放到AppFabric 缓存群集。如在配置过程中有任何问题或异常,可参考《Configuring ASP.NET Session State to use AppFabric Caching》。按照AppFabric缓存的基本特性,存入Session中的对象实例必须是可序列化的(Serializable)。

为了让ASP.NET 应用程序使用AppFabric session state provider,必须在web.config文件中添加如下元素。

configSessions – configuration节点中的第一个元素,在configuration 标签下,引入 AppFabric Caching 程序集。

dataCacheClient – 这是configuration元素的一个子元素,用来配置Cache客户端和Cache主机。

sessionState – system.web 元素的子元素,指定 Web 应用程序使用AppFabric 来管理session状态,cacheName属性指定命名的缓存(Named Cache)。如果将session数据存放在cache region,则使用regionName属性指向region的名称。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<? xml version = "1.0" encoding = "utf-8" ?>
< configuration >
 
<!--configSections must be the FIRST element -->
< configSections >
<!-- required to read the <dataCacheClient> element -->
< section name = "dataCacheClient"
type="Microsoft.ApplicationServer.Caching.DataCacheClientSection,
Microsoft.ApplicationServer.Caching.Core, Version = 1 .0.0.0,
Culture = neutral , PublicKeyToken = 31bf3856ad364e35 "
allowLocation = "true"
allowDefinition = "Everywhere" />
</ configSections >
 
<!-- cache client -->
< dataCacheClient >
<!-- cache host(s) -->
< hosts >
< host
name = "CacheServer1"
cachePort = "22233" />
</ hosts >
</ dataCacheClient >
 
< system.web >
< sessionState mode = "Custom" customProvider = "AppFabricCacheSessionStoreProvider" >
< providers >
<!-- specify the named cache for session data -->
< add
name = "AppFabricCacheSessionStoreProvider"
type = "Microsoft.ApplicationServer.Caching.DataCacheSessionStoreProvider"
cacheName = "NamedCache1"
sharedId = "SharedApp" />
</ providers >
</ sessionState >
</ system.web >
</ configuration >

关于上述配置节点或元素的更详细信息,可参考Configuring an ASP.NET Session State Provider (Windows Server AppFabric Caching)。

通过 AppFabric Caching 可以轻易的将多台服务器的内存融合成一个超大内存缓存(Cache Cluster),通过单一 API 即可读写这些内存缓存,当内存不够时只要增加服务器即可轻易扩充完成,不仅有效降低管理成本,还可轻易的达到 3H ( High Scalability, High Availability, High Performance ) 系统架构。

5. 部署拓扑(Deployment Topology)

AppFabric Cache 通过Windows Service的方法提供服务,客户端应用程序可在同一台机器上,或者在不同的机器上通过.NET Client API访问缓存。客户端应用通过TCP/IP和本机或远程服务器的服务通信。

如上图是两种常见的 AppFabric 部署模式:

(1) Embedded – 将缓存宿主(Cache Host) 跟 IIS 主机安装在一起,并联合多台宿主组成缓存群集;

(2) Cache Service – 使用 专属主机 提供 缓存宿主(Cache Host),提供一个宿主的缓存层(Caching Tier);

6. 性能测试(Performance Testing)

下面创建了一个测试应用程序,测试AppFabric缓存性能。应用程序模拟了在许多分布式客户计算机上的大量用户。每一个用户线程执行Get / Put / Remove 20K负载的操作,记录随着负载逐步增加和新服务器添加时的吞吐量。

下图清楚显示了缓存的作用。吞吐量(throughput)随着负载(load)的增长而增长,直到达到饱和和稳定。此时,如果我们增加另外一台Server,吞吐量会再次增加,同时响应时间也会下降。

还有一些关于缓存配置的文章值得大家参考:

http://msdn.microsoft.com/zh-cn/magazine/gg650661.aspx

http://www.cnblogs.com/shanyou/archive/2010/07/24/1784173.html

http://weblogs.asp.net/shijuvarghese/archive/2011/05/04/using-windows-azure-appfabric-caching.aspx




你可能感兴趣的:(使用 Windows Server AppFabric 缓存编写 ASP.NET 应用程序)