[Cache]深入学习Enterprise Library for .NET Framework 2.0的Cache机制——分析篇

提纲:

深入学习Enterprise Library for .NET Framework 2.0的Cache机制——分析篇

 

 

深入学习Enterprise Library for .NET Framework 2.0的Cache机制——分析篇

发布日期: 4/18/2006 | 更新日期: 4/18/2006

PanQi@ultrapower

 

简介:

在服务器负载均衡的环境下,客户端读、写缓存时,一定要保证多台服务器间缓存数据的一致性和同步性;撰写本文档的目的就是为了探讨利用Enterprise Library for .NET Framework 2.0的Caching Application Block如何在服务器负载均衡的环境下实现有效的数据缓存。

 

提出问题:

1、 负载均衡时缓存数据应以何种方式保存?

2、  磁盘驻留型缓存和内存缓存之间是否可以同步?

分析问题:

1.      负载均衡时缓存数据应以何种方式保存?

        在决定我们的缓存数据保存到哪里之前我们有必要先了解一下Caching Application Block定义的两种缓存类型,它们分别是内存驻留型缓存和磁盘驻留型缓存,顾名思义,这两种类型的缓存是以存贮位置来命名的,功能上则以是否能将缓存数据持久化来区别使用。

        在Caching Application Block中,具体提供以下四种保存缓存数据的途径,分别是:内存存储(默认)、独立存储(Isolated Storage)、数据库存储(DataBase Cache Storage)和自定义存储(Custom Cache Storage)。要解决负载均衡时缓存数据保存到哪里的问题,首先我们先详细了解一下这些上面的这四种缓存途径。

1、  内存存储:内存存储缓存是以上四种方式中唯一的内存驻留型缓存,也是我们开发中最常用到的一种途径,其响应速度快的优势是其它方式无法匹敌的,但单一得采用这种方式的话会有如下弊端:1、缓存数据不能持久化,服务器重起后缓存数据会全部丢失。2、服务器采用负载均衡时采用内存缓存的话,一定要保证多台服务器间的内存缓存状态同步,但这样做会对IO造成较大压力,容易造成系统瓶颈,故,从系统性能和开发成本的角度讲,负载均衡的环境下不易单一的采用内存缓存。

2 、独立缓存(Isolated Storage):Isolated Storage是缓存数据持久化的一种选择方式,它是磁盘驻留型缓存,如果您足够细心的话会在每一台机器上找到一个IsolatedStorage文件夹;采用独立缓存的话,我们的缓存信息就会以二进制文件的形式就保存在这个文件夹中,如下是我所用的机器上生成Cache数据后的缓存信息所在的具体目录:C:\Documents and Settings\Administrator\Local Settings\Application Data\IsolatedStorage\5njvvogn.4c4\mccvvdtb.kxw\Url.xhd4g43erd3ww4y5ybmfacgje044tgdp\Url.ium543vzoj1lgo4qvgjeocev4cjb5agq\Files\IsolatedCache\......

 

 

(图一:二进制格式的缓存文件)

       Caching Application Block没有为我们提供向指定机器读、写独立缓存的功能,因此,这种方式只适合需要缓存持久化和大数据量缓存的场合,并不适用于负载均衡的环境。

3、自定义存储(Custom Cache Storage):关于自定义存储并未深入研究,在此暂不详细讨论。

4、数据库存储(DataBase Cache Storage):如若想采用数据库存储缓存信息,首先第一步要建立缓存数据库Caching,在安装Enterprise Library后并未默认安装此数据库,若想安装,我们首先找到Enterprise Library的安装文件夹,会发现一个建立数据库的CreateCachingDb.cmd文件,执行该文件后您就会在您的SQL-Server上新建一个名为Caching的数据库,该文件在2.0版中详细地址为:安装盘符:\Program Files\Microsoft Enterprise Library January 2006\src\Caching\Database\Scripts,在Caching数据库中只有一个CacheData表,这个表就保存了我们所读写得缓存信息,表结构如下:

 

(图二 数据库缓存的表结构)

        分析到这里,我们可以得到如下结论:在服务器负载均衡的环境下,可以采用Enterprise Library for .NET Framework 2.0中Caching Application Block的DataBase Cache Storage将缓存信息写到一台指定的数据库服务器中,但是,在负载均衡的这种较为复杂的环境下,如何将数据库缓存准确的提供给每一个缓存数据查询者呢??也就是读数据的问题。在MSND中提到的CAB的一个特性是:“可以使用独立存储或企业程序库数据访问应用程序块来配置永久存储位置,它的状态与内存缓存同步。”我们会在接下来的文章中分析一下CAB的这种数据库缓存数据和内存缓存数据可否在多台服务器间进行状态同步。

 


  

 

posted @ 2006-04-18 14:04 Bob.Pan 阅读(...) 评论(...) 编辑 收藏