动态缓存九篇

2024-09-13

动态缓存 篇1

动态网页上的内容是由服务器端生成,是动态变化的,但网页上大多数的内容是不变或很少变化的。由于网页访问频率很高,如每次访问都要重新动态生成,严重影响其访问的效率。如果采用数据缓存技术,将全部或部分数据暂时存放在内存中(或硬盘缓存区),页面上不变的数据可以直接从缓存中取用,这样就可以大大提高数据访问的效率。实际工作中我们一般可以采用以下5种缓存技术,来提高页面访问的效率。

1 页面输出缓存

当网页是静态网页时,可以将整个网页缓存起来,但对于动态网页来说,由于网页内容是由服务器端生成的,生成一般由下面3个步骤组成:(1)用户在客户端由浏览器向服务器端提出请求;(2)服务器根据客户端的请求动态生成网页;(3)服务器端向客户端发送HTML代码,在浏览器中显示。

因此,如果有很多用户提出请求,即使请求是相同的,服务器必须重新生成HTML代码,因此使得网页访问的速度变慢,影响整个网站的性能。如果服务器端把首次访问的生成的HTML代码缓存起来,后续用户再提出请求时,可以直接从缓存区中调用,省去了动态生成的过程,从而大大提高了网页访问的速度。

增加页面输出缓存办法一般是在ASPX的网页代码中增加如下代码:

<%@Output Cache Duration="60"Vary By Param=none%>

其中Output Cache表示设置缓存,Duration="60"代表缓存在持续时间为60秒,Vary By Param属性用来指定特定版本的网页输出,即使不使用版本属性,也一定要指定,但可以设置这个属性的值为none,表示不管是什么查询,返回的网页都是相同的。

2 片段缓存

除了采用页面缓存技术,ASP.NET还可以采用片段缓存技术,片段缓存也称为用户控件缓存,它把页面上需要缓存的部分内容放在一个自定义控件中进行缓存。比如访问的页面上有一部分静态的内容,一部分动态的内容,我们可以把静态的内容缓存起来,访问时只要把动态的内容改变就可以了,这样可以提高页面访问的效率。

片段缓存使用的语法与页面输出缓存基本一样,只不过它用在用户控件(.ascx的文件)中,而不是用Web窗体(.aspx文件)中。除了Location属性,对于Out Put Cache在Web窗体上支持的所有属性,在用户控件中也同样支持。除此之外用户控件还支持名为Vary By Control的Out Put Cache属性,该属性将根据用户控件的成员值改变该控件的缓存(当然如果指定了该属性,则可以省略Var By Param属性)。在默认的情况下,对页面上的每个用户控件单独进行缓存,不过,如果一个用户控件不随应用程序中的页面改变,并且在所有页面中都使用相同的名称,则可以应用Share="true"参数,该参数将使用户控件的缓存版本供所有引用该控件的页面使用。例如:

<%@Output Cache Duration="60"Vary By Param="*"%>

表示用户控件缓存60秒,并且将针对不同的查询字符串,此控件所在的每个页面都将创建单独的缓存条目。

<%@Output Cache Duration="60"Vary By Param="none"Vary ByControl="Category Drop Down List"%>

表示用户控件缓存60秒,并且将针对Category Drop DownList控件的每个不同的值,对此控件所在的每个页面都将创建单独的缓存条目。

<%@Output Cache Duration="60"Vary By Param="none"Vary ByCustom="browser"Shared="true%>

表示用户控件缓存60秒,并且将针对每个浏览器名称和主要版本创建一个缓存条目。然后,每个浏览器的缓存条目将引用此用户控件的所有页面共享(只要所有页面都用相同的ID引用该控件即可)。

3 回调缓存

也称为缓存后替换。该方法与控件缓存正好相反,它将整个页面设置成缓存,但把其中的某些部分设置为不缓存,因此,尽管缓存了整个页面,但是当再次有用户请求该页时,将重新处理那些没有设置为缓存的内容。

实现缓存后替换可通过以下3种方法:(1)以声明方式使用Substitution控件;(2)以编程方式使用Substitution控件API;(3)以隐式方式使用控件。

4 应用程序数据缓存

应用程序数据缓存主要是在内在中存储各种与应用程序相关的对象,这些对象建立时都消耗了大量资源,因此对这些对象的缓存,可以大大提高网页的打开速度。

一般用Cache类来实现对应用程序缓存对象的添加、检索(引用)和删除(清除)等。添加应用程序缓存对象的方法有3种:(1)指定键和值;(2)使用Cache类的Add方法;(3)使用Cache类的Insert方法;检索应用程序缓存的方法也有3种:(1)指定键名;(2)使用Get方法;(3)使用Get Enumerator;删除应用程序数据缓存对象一般采用Cache类的Remove方法即可。

5 SQL缓存

SQL缓存又叫依赖缓存,这和前面的缓存设置不一样,前面的缓存一般缓存时间一到,缓存的内容就删除了,而依赖缓存则根据网页依赖的对象(如文件、目录、数据库等)发生变化时,缓存内容才随之改变。依赖缓存主要有3种:自定义缓存依赖、聚合缓存依赖和SQL数据缓存依赖。我们一般使用的是SQL数据缓存依赖。

早期设置SQL依赖缓存比较复杂,但现在由于在SQL2005中已经使用了基于服务的数据缓存依赖,因此只需简单设置就可使用。

在aspx页面中如下声明:

当然还可以在应用程序中直接使用SQL缓存功能。

6 结束语

在ASP.NET 2.0中有效、合理地使用缓存技术,能够有效减少网络拥塞,降低客户访问的延迟,极大地提高了应用程序的效率。

参考文献

[1]李万宝.ASP.NET技术详解与应用实例[M].北京:机械工业出版社,2005.

动态缓存 篇2

下面我们以Map接口为例来说明设计下文件存取模块使用各种实现类时, 总是要生成数据结构的具体实现, 因为系统不知道集合中如何存放对象。但在访问实际集合时, 用使用接口的方法, 这样就可以在需要时将数据结构从数组集合变成散列表的集合然后由于集合类仍然实现相同的集合接口, 不需要改变他的代码。

用何种方式存放对象呢?这是缓存最为重要的一步, 在Java 2中有很多的数据结构接口, 接口和集合类的选择是缓存非常重要的。

Map接口用于保持关键字 (Key) 和数值 (Value) 的集合, 集合中的每个项目加入时都提供数值和关键字

Map接口有三个实现集合类;Hash Map、Weak Hash Map、和Tree Map类。Hash Map是基于Hash表的映射;Weak Hash Map是基于弱引用Hash表的映射;Tree Hash是基于平衡树的映射。

Hashtable继承自Dictionary类, 而Hash Map是Java1.2引进的Map interface的一个实现Hash Map允许将null作为一个entry的key或者value, 而Hashtable不允许还有就是, Hash Map把Hashtable的contains方法去掉了, 改成containsvalue和contains Key。因为contains方法容易让人引起误解。最大的不同是, Hashtable的方法是Synchronize的, 而Hash Map不是, 在多个线程访问Hashtable时, 不需要自己为它的方法实现同步, 而Hash Map就必须为之提供外同步。Hashtable和Hash Map采用的hash/rehash算法都大概一样, 所以性能不会有很大的差异。

Hash Map可谓JDK的一大实用工具, 把各个Object映射起来, 实现了“键--值”对应的快速存取。但实际里面做了些什么呢?

在这之前, 先介绍一下负载因子和容量的属性。大家都知道其实一个Hash Map的实际容量就因子*容量, 其默认值是16×0.75=12;这个很重要, 对效率很一定影响!当存入Hash Map的对象超过这个容量时, Hash Map就会重新构造存取表。两个关键的方法, put和get:

先有这样一个概念, Hash Map是声明了Map, Cloneable, Serializable接口, 和继承了Abstract Map类, 里面的Iterator其实主要都是其内部类Hash Iterator和其他几个iterator类实现, 当然还有一个很重要的继承了Map.Entry的Entry内部类, 它包含了hash, value, key和next这四个属性, 很重要。

这个就是判断键值是否为空, 并不很深奥, 其实如果为空, 它会返回一个static Object作为键值, 这就是为什么Hash Map允许空键值的原因。

我们把关键的方法拿出来分析:

因为hash的算法有可能令不同的键值有相同的hash码并有相同的table索引, 如:key=“33”和key=Object g的hash都是-8901334, 那它经过indexfor之后的索引一定都为i, 这样在new的时候这个Entry的next就会指向这个原本的table[i], 再有下一个也如此, 形成一个链表, 和put的循环对定e.next获得旧的值。到这里, Hash Map的结构, 大家也十分明白了吧?

所谓的重构也不万能的, 就是建一个两倍大的table, 然后再一个个indexfor进去, 如果你能让你的Hash Map不需要重构那么多次, 效率会大大提高!

参考文献

[1]飞思科技产品研发中心.《Java2应用开发指南》.电子工业出版社.

[2]王亚平.《数据库系统工程师教程》.清华大学出版社.

分布式数据缓存技术研究 篇3

随着Web技术的不断发展,应用系统业务访问量与日俱增,众多频繁的数据访问,对应用服务器和数据库要求越来越高,如何合理提高数据访问效率且对服务器不产生过多压力,成为提升系统性能的关键,在服务器与数据库之间增加缓存可以解决这个问题。

1 数据缓存

1.1 缓 存

在计算机系统中,缓存就是开辟一个用来保存数据的空间,使用缓存,就不需要频繁地访问存储在内存或硬盘中的数据。当执行一个操作,将操作结果放入缓存中后,可以很迅速的重复访问这些数据。

使用缓存技术的目的是为了提高数据利用率和检索效率。系统将访问过的数据放入缓存,当用户多次访问系统时,避免每次都查询数据库,直接在缓存中获取所需要的数据。缓存按照应用领域不同,主要有存储器缓存技术、磁盘缓存技术、WWW服务器缓存技术和数据缓存技术等几种。

1.2 数据缓存

现今,很多的系统都使用了数据缓存技术,典型的数据检索系统,将数据检索技术和数据缓存技术结合起来,极大地提高了检索效率。

数据缓存系统大概分为三类[1]:客户端数据缓存系统、集中式数据缓存系统和分布式数据缓存系统。客户端数据缓存系统指在网络中接受数据的一方即客户端建立数据缓存区,对接受的数据进行缓存。集中式数据缓存系统是在某个关键节点上设置数据缓存区,依据设置数据缓存区的位置不同分为服务器端数据缓存系统和网关代理级的数据缓存系统。服务器端数据缓存系统主要是在服务器上设有数据缓存区,适用于局域网。而网关代理级的数据缓存系统主要是在处理数据频繁的网关和代理服务器上设有数据缓存区,适于局域网和远程网。分布式数据缓存系统是在网络数据传输中的网络节点对数据进行缓存,这种节点不仅包含服务器,也包含各个客户机。

2 分布式数据缓存

数据缓存的意义在于将大量的数据拉到应用程序层,将大部分的访问在应用程序层拦截掉。在访问经常使用的数据时缓存能够成数量级的减少潜在的访问时间。这样的结果,大大提高了应用程序的速度,也减少了数据库服务器的负载,将时间集中在业务处理上,使数据库服务器的访问性能大大提高。缓存技术和服务器集群结合起来使用,这就是分布式缓存。

3 分布式缓存研究

关于分布式缓存技术,目前国内外文献中研究的比较多[3,4],存在多种缓存工作模型,但这些缓存模型大多属于从集中式向分布式的一种过渡,如图1所示。从严格意义上讲,它们更趋向于集中式数据缓存系统,不能归为分布式数据缓存系统。这些数据缓存系统的工作思路是:在客户端和服务器中也都建立了属于它们自己的本地数据缓存区,这些本地数据缓存区只为自己服务,互相之间没有联系,或者仅和服务器的数据缓存区之间存在着一种点到点的联系。

3.1 拓扑结构

P2P:多台服务器配置成一个缓存组,服务器两两之间都建立了连接,每台服务器既是客户端也是服务端;Client/Server拓扑:服务器被分成服务端和客户端两种角色。客户端的缓存层会主动去连接服务端。

3.2 数据分布模式

分布式缓存特点之一是通过不同的方法把数据分布在多个服务器上。三种数据分布模式分别是Replicated Cache:每个节点都复制了完整的相同的缓存数据;Partitioned Cache:将缓存数据通过分区算法分布在集群的各个节点上;Near Cache:在Partitioned Cache之前加上一个本地的缓存来存储最近访问和最常访问的数据。

3.3 数据同步模式

TTL模式:定义了对象在缓存中的存活时间,每次从数据库中取出对象保存到缓存中时,都会给对象加上信息;客户端轮询模式:客户端客户或者缓存服务器定期询问主服务器,检查缓存对象的有效性;每次轮询模式:每次对象被访问的时候都要向主服务器询问数据的有效性;服务器端失效模式[2]:服务器端负责跟踪监测所有客户端的缓存数据,适用于Client/Server分布式系统中;客户端失效模式:每个缓存服务器负责把更新数据通知给其他所有的缓存服务器。适用于没有中心服务器概念的P2P分布式环境。

3.4 缓存替换算法

缓存替换算法指明了当缓存需要额外的存储空间时,如何选择被替换的缓存数据项。传统的缓存替换算法主要利用对数据块的访问频率或者最近的访问时间为标准,判断数据块在本次替换操作中是否应该被替换掉。缓存替换算法按照层次可以划分为单级缓存算法和多级缓存算法[5],主要有MRU、LRU、LFU、LRU-K、FIFO、LRFU、ARC、MQ/2Q和TQ、DEMOTE等。

3.5 当今分布式缓存技术

一些分布式缓存的模式,已经在现有的产品中体现出来了,其中包括开源产品和商业应用产品,如OSCache、JCS、Ehcache、Memcached、JCache、JBossCache等。

4 分布式数据缓存模式设计

4.1 缓存思路

本文设计的缓存思路如下:为每个表设立三个缓存Map(key=value键值对),第一个Map是对象缓存A,key是数据库表的id,Value是数据库对象(也就是一行数据);第二个Map是通用列表缓存B,B的最大长度一般为1000左右,key是查询条件拼出来的String(如start=0,length=15#active=0#state=0),Value是该条件查询下的所有id组成的List;第三个Map是散列缓存C,key是散列的字段(如根据userId散列的话,其中某个key就是userId=109这样的String)组成的String,value是一个和B类似的HashMap,其中列表缓存B中的Map是需要遍历的。举例如图2所示。

这种缓存思路一般用数据库表的索引键做散列,且最散的字段放前面先散列,可以存储大规模的列表和长度,缓存命中率很高,因此可以承受超大规模的应用。

4.2 缓存策略

根据ID获取记录,首先从本机缓存即内存中查询并获取数据,如果没有则转向Memcached Server获取,如果Memcached Server也没有才从数据库中获取,从数据库中获取数据后放入Memcached缓存和本地缓存,这样可以大大减轻数据库服务器的压力。

创建一个数据库记录,直接把对象放入本机缓存和Memcached缓存。而数据更新策略分即时更新和非即时更新,即时更新用到UDP报文,更新数据库,同时重设本地缓存和Memcached缓存。非即时更新用在更新比较频繁但又不影响排序的时候,比如一个帖子的点击和回复次数。

数据删除缓存的时候,实现了分布式删除,通过发送UDP报文通知其他服务器自动删除缓存,列表缓存的key必须是由字段名称=字段值组成,如#boardId=1#threadId=3#state=1#,所以删除时只要利用要删除的对象的字段值组成一个条件字符串,看key中的条件是否满足这些条件决定是否要删除这些缓存List。

Memcached缓存中存的不是List而是由#分开的id列表,第一步从Memcached缓存中查找,先从公共缓存区RECORDS_LIST_CACHE开始,然后到二级散列缓存HASH_LIST_CACHE中查找。第二步到数据库中进行查询,对照放入List或者Hash中。

缓存替换算法采用最为广泛的经典LRU衍变算法,加入其他因子如被引用次数,最近一次被引用后经历的时间,存活时间等分配不同的权重。缓存同步是当数据更新时通过服务器发送UDP报文通知其他服务器和客户端保证数据一致性。

5 缓存系统性能应用与测试

分布式数据缓存应用广泛,特别适用于具有高并发、高访问量的读多写少和更新不是很频繁的系统中。本文将分布数据缓存技术应用于某社区平台开发,系统主要使用轻型J2EE框架设计,构建在Hibernate之上,采用分布式解决方案,相当于在Memcached上做了两级缓存,模式采用Client/Server拓扑结构、较为简单有效的Replicated Cache、与Client/Server拓扑结构相对应的服务器端失效模式。

首先用一台普通计算机对社区进行压力测试,配置为内存2G,2个Intel P4 CPU,Linux AS4系统,数据库Mysql5.0,apache2.0.63/resin3.1.8/jdk5.0的环境,对帖子列表页面进行压力测试,测试结果如表1所示,Mysql5.0的CPU占用率都在20%以下,Java进程的CPU占用比较高,为50%左右。

然后用分布式缓存环境进行性能测试,3台服务器和1台数据库服务器Intel P4 2.8G,内存2G,操作系统是Linux AS4,1台客户端测试机Intel P4 2.8G,内存2G,操作系统是Window Server 2000。为简便起见,测试并发情况下查看和搜索纯JSP页面的帖子使用分布式缓存技术前后的整体性能。

第一组数据是测试查看帖子的速度,第二组数据是测试搜索帖子的速度。测试数据和性能结果如表2-表3和图3-图4所示。

由第一组数据表2和图3可以看出,查看帖子在有数据缓存的情况下,帖子的列表缓存和长度缓存都起了很大的作用,当并发数为20的时候,曲线上升的趋势已经开始有明显区别,缓存的效果比较明显。第二组数据表3和图4效果更为明显,搜索帖子用到了数据缓存中的数据库对象缓存、列表缓存和长度缓存,并发用户多的事情下,搜索相同数据的可能性增加,数据缓存的功能也体现出来,从图中可以看出,使用分布式数据缓存的情况下,系统性能提升很多。

6 结 语

分布式数据缓存模式越来越广泛被应用到各类系统中,大规模的企业级应用可以使用集群来保证,中小规模的部门级应用可以使用轻型J2EE框架来实现。数据缓存可以减少数据库访问量,提高数据命中率,分布式模式可以均衡服务器的压力,进一步提升系统的性能。分布式缓存模式将是未来缓存的研究重点。

参考文献

[1]Kataoka Mikio,Toumura Kunihiko,Okita Hideki.Distributed CacheSystem for Large-Scale Networks[C]//2006 International Multi-Con-ference on Computing in Global Information Technology(ICCGI'06),IEEE computer society,2006.

[2]Xin Yu.A distributed adaptive cache update algorithm for the dynamicsource routing protocol[C]//Proceedings IEEE INFOCOM,2005:730-739.

[3]Tewari R,Dahlin M.Design Considerations for Distributed Caching onthe Internet[C]//9th IEEE International Conference on DistributedComputing Systems,1999:273-284.

[4]黄世能,奚建清.分布数据缓存体系[J].软件学报,2001,12(7):1094-1107.

基于Web应用的缓存技术概述 篇4

缓存技术被认为是减轻服务器负载、降低网络拥塞的有效途径之一,其基本思想是利用空间换时间的原理,将客户访问过的内容在存储器中保存一个副本,当该内容下次被访问时,不必连接到网站或数据库,而是提供缓存中保留的副本。客户访问过的内容可以缓存在客户端、代理服务器以及服务器端。

二、服务器端的缓存技术

服务器接收到客户端的请求后,会解析请求中的信息,经过后台处理得到相应的数据,并形成客户端可以展示的页面,传回请求者。因此服务器端缓存一般有页面缓存和数据缓存,页面缓存实现起来相对简单,客户体验效果也较好;但数据缓存更接近持久化数据,缓存的利用率更高。

(一) 页面缓存

页面缓存是指对页面中的内容片断进行缓存。比如页面中有一部分是显示查询结果的,如果可以把查询的条件和结果缓存下来,在客户端发出同样请求时,服务器就直接从缓存中取出这部分的内容,这对于系统响应速度的提升是非常明显的。以OSCache为例:

OSCache提供了一个tag,可通过这个tag来包含需要缓存的内容部分。当然缓存的内容是要访问数据库服务器或逻辑计算才能得到的,静态html一般不需要缓存。

其次需要定义缓存内容的key,也就是能区别其他内容的唯一标识。比如要缓存页面中某个查询的某页的内容,对于这段内容的key就是查询的条件以及当前页数,这样就组成了这段缓存内容的唯一标识。服务器只需要根据key来判断结果集是否在缓存中存在,如果存在则直接返回;否则需要经过后台处理,把结果返回并缓存。

页面缓存中还有一个重要步骤就是通知缓存需要更新,一旦内容更新就不能再使用缓存中的内容了,需要从后台再重新获取来生成新的缓存内容。

在实现页面缓存时要考虑的主要两个问题是缓存key的定义以及缓存更新的通知。

(二) 数据缓存

数据缓存就是对后台的数据进行缓存,典型的就是Hibernate的二级数据缓存。

Hibernate缓存的范围分为三类:

1. 事务范围:

缓存只能被当前事务访问。缓存的生命周期依赖于事务的生命周期,缓存的介质是内存,每个事务都有独立的缓存,缓存内的数据通常采用相互关联的对象形式。

2. 进程范围:

缓存被进程内的所用事务共享。这些事务有可能是并发访问策略,因此必须对缓存采用必要的事务隔离机制。缓存的生命周期依赖于进程的生命周期,进程范围的缓存可能会存放大量的数据,所以存放的介质可以是内存或硬盘。缓存内的数据既可以是相互关联的对象形式也可以是对象的松散数据形式。

3. 集群范围:

在集群环境中,缓存被一个机器或者多个机器的进程共享。缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信来保证缓存中的数据的一致性,缓存中的数据通常采用对象的松散数据形式。

事务范围的缓存是数据的第一级缓存,通常它是必需的;进程范围或集群范围的缓存是数据的第二级缓存,通常是可选的。当多个并发的事务同时访问缓存的相同数据时,会引起并发问题,必须采用必要的事务隔离措施。Hibernate有四种类型的并发访问策略,事务型,读写型,非严格读写型和只读型。事务型并发访问策略是事务隔离级别最高,只读型的隔离级别最低。事务隔离级别越高,并发性能就越低。

三、客户端缓存的缓存技术

客户端相当于服务器来说性能较低,存储空间也较小,但也是可以通过HTTP协议,利用服务器的304消息来让浏览器充分利用本地的缓存。为防止缓存的对象可能过时,利用HTTP请求和响应组合,可以控制所有可缓存的对象是否被重新获取。

HTTP文件头是服务器在发送HTML文件前发送的报文,浏览器会解析其中的内容。典型的HTTP响应头如下:

浏览器请求某个对象时,服务器使用一个包含该对象最后修改时间的LastModified头进行响应,当用户下次请求相同的对象时(当前的时间戳超出了对象的使用期限,或者用户是通过刷新方式请求该页面),浏览器会向服务器发送一个Last-Modified-Since请求确定对象是否发生了变化。如果服务器告知对象的确发生了变化,浏览器就再发送一个完整的GET请求以获取新的对象并将其再次缓存起来,更新对象的Last-Modified值;否则,浏览器就从它的缓存中提取对象。

ETag and If-None-Match

ETa g是服务器生成的唯一标识符,服务器每次响应,产生副本的ETag值都会变化,计算的方式可以自定义。由于服务器控制了ETag的生成,服务器可以通过计算得到的ETag与请求中的If-NoneMatch是否一致。如果一致就表示没有更新,返回304消息即可;否则按正常请求处理。

Expires and Cache-Control:maxage

Expires属性是HTTP控制缓存的基本手段,这个属性告诉缓存器:相关副本在多长时间内是有效的。过了这个时间,客户端就需要向源服务器发送请求,检查文档是否被修改。Expires头信息对于设置静态图片文件(例如导航栏和图片按钮)可缓存特别有用,因为这些图片修改很少,给它们设置一个特别长的过期时间,这会使网站对用户变得相应非常快。对于控制有规律改变的网页也很有用,例如12点更新的新闻网页,也可以通过设置副本的过期时间也是12点,这样客户端就知道什么时候去取一个更新版本。

虽然Expires时间属性非常有用,但是它还是有些局限,Web服务器的时间和客户端的时间必须是同步的,如果有些不同步,要么是应该缓存的内容提前过期了,要么是过期结果没及时更新。HTTP1.1介绍了另外一组头信息属性:CacheControl响应头信息,让网站的发布者可以更全面的控制他们的内容,并定位过期时间的限制。

部分常用的Cache-Control响应头信息如下:

max-age:执行缓存被认为是最新的最长时间。类似于过期时间,这个参数是基于请求时间的相对时间间隔,而不是绝对过期时间,单位是秒。

p u b l i c:标记认证内容也可以被缓存,一般来说:经过HTTP认证才能访问的内容,输出是自动不可以缓存的。

no-cache:强制每次请求直接发送给源服务器,而不经过本地缓存版本的校验。这对于需要确认认证应用很有用。

no-store:强制缓存在任何情况下都不要保留任何副本。

must-revalidate:告诉缓存必须遵循所有副本的有效期验证。

四、其它缓存技术

以上缓存方式都是根据客户发出的请求来缓存数据,是被动的缓存技术。而互联网上的需求千差万别,缓存的命中率通常很低。为进一步提高缓存命中率,有人提出了预取技术。预取技术是一种主动缓存技术,其基本思想是在处理客户的当前请求时,利用客户访问内容或模式的先验知识,对客户接下来的请求内容进行预测,并利用客户请求的间隙将预测内容缓存起来,从而更好地隐藏延迟,提高服务质量。内容预取可以在客户与服务器之间,以及代理与服务器之间。预取技术也面临以下挑战:

内容预取是一种实时性要求较高的任务,它主要利用客户请求的间隔进行,而这个间隔一般情况下小于一分钟,如果在这段时间内不能完成预取任务,预取将变得毫无意义。因此对预取算法的效率有较高的要求。

内容预取是通过增加服务器负载及网络流量为代价来降低客户端响应时间的,因此对预取的准确度有较高的要求。因此预取模型在确定预取范围时,还需考虑客户的访问特性、服务器负载及网络流量状况。

五、结论

总体来说,缓存技术会充分利用服务器资源,使用户有更好的用户体验。但在具体项目中使用哪些缓存技术,还要结合项目的特点合理选择,这样才能使Web应用达到更高的效率。

摘要:随着互联网的发展, Web已成为日常生活必要的组成部分。虽然新技术使网络带宽不断增加, 但始终难以满足人们对未知信息的渴求。如何让互联网更快更有效的提供服务, 是网络技术的重要研究课题, 其研究方向主要有程序的重构与优化, 数据压缩以及缓存技术等。本文从服务器端和客户端两方面入手, 介绍了几种常用的缓存技术及其运行机制, 最后对主动缓存技术也做了简单描述。

参考文献

[1]Duane Wessels, Web Caching, O'Reilly Media, Inc., 2001.6.

[2]郭欣.构建高性能Web站点.北京.电子工业出版社.2009.8.

[3]夏昕, 曹晓钢, 唐勇编著.深入浅出Hibernate.北京.电子工业出版社.2005.5.

动态缓存 篇5

关键词:一体化网络,接入标识,移动网络,标识映射,预缓存机制

0 引言

新一代网络是目前各国信息领域的竞争焦点之一。针对新一代网络美、欧、日都有相应计划提出,但这些研究尚未形成清晰的理论体系,仅仅处于起步和战略规划阶段。一体化网络体系结构模型[1,2]是我国专家提出的一种下一代网络的基础架构,一旦取得成功必将对我国网络领域的发展产生深远影响。因此,在一体化网络的框架下对网络标识的分离聚合映射机制展开研究,具有重要的理论意义和实际应用价值。目前,已有很多学者对一体化网络的网络标识映射机制进行了研究,并取得了一定的成果[3~5]。本文在深入分析当前互联网标识空间存在的问题的基础上,给出了一种基于预缓存机制的一体化网络接入标识/交换路由标识解析映射机制的实现方案,并介绍了详细的实验方案,最后通过构建实验网络进行了实验,并对实验结果进行了详细的分析。

1 当前互联网标识空间存在的问题

在互联网最初的设计中,认为IP地址数量足够使用,并且使用IP地址的主机位置固定不变是静止的,因此核心网络采用的是单播和尽力发送的模型。但是随着互联网及其应用的快速发展,特别是移动计算的的广泛应用,互联网已有的标识空间结构和解析机制很难满足需求。IP地址不仅作为位置标识来表示网络层设备的位置,而且又作为身份标识表示传输层设备的身份,即IP地址具有双重功能。其产生的重要原因是最初IP协议设计时没有考虑将来主机移动的情况。但随着移动设备广泛接入互联网,IP地址双重功能的缺陷逐渐引起了人们的重视,并提出了一系列的解决方案。

Mobile IP互联网移动性支持的典型方案,通过引入家乡地址作为主机的身份标识,实现了身份标识和位置标识的分离。但Mobile IP不足是存在三角路由、切换延迟和潜在的安全隐患等问题[6]。Mobile IPv6避免了三角路由,但切换延迟仍然比较大,并且需要修改路由器来实现移动性支持,因此其可扩展性和可部署性较差。

因此,为了解决IP地址动态重分配、Multihoming等问题,研究者们设计了多种对互联网标识空间进行改进的方案,主要有PeerNet,FARA和HIP等[7],但目前的这些改进方案都还存在着各自的不足。一体化网络作为一种全新的网络体系,有望从根本上解决IP地址的二义性问题,本文的研究就是在一体化网络体系上进行。

2 基于预缓存机制的网络标识映射机制

2.1 一体化网络标识映射机制分析

一体化网络体系是一种开放性的理论结构模型,可以推导出多种不同的具体方案[3]。其典型的拓扑结构如图1所示,主要由移动终端、接入交换路由器、广义交换路由器、认证中心、映射服务器等构成。其中每个映射服务器仅存储:1)归属该映射服务器管理的接入标识的映射关系;2)移动到该映射服务器管理范围内的接入标识的映射关系。

一体化网络的通信过程如下[2]:首先,在源终端要向目的终端发送数据时,它必须经过接入路由器的替换和转发,要把接入标识替换为交换路由标识进行转发,这就要查询上述的本地用户映射表和对端用户映射表,源终端的接入标识和交换路由标识在刚接入时由它所在的接入路由器分配,目的终端的映射关系需要到映射关系服务器上进行查询;然后,经过源终端所在的接入路由器的替换和转发并在核心网上传播到目的终端所在的接入路由器上,最后,该接入路由器把交换路由标识替换为接入标识,进而发送给目的终端。一体化网络基于标识解析映射机制通信的一般过程如图1所示(其中并不包含步骤7-2发送映射关系,该步骤是下文中提到的预缓存机制),详见参考文献[2]。

2.2 预缓存机制设计

在图1中,ASRA向映射服务器查询终端B的映射关系时,可能出现以下情况:

1)终端B还未在网络上进行通信,映射服务器上还没有其映射关系:进行寻址,找到终端B所在的接入路由器ASRB,令其给终端B分配映射关系,然后汇报给映射服务器,并存储在ASRB的本地用户映射表中。

2)映射服务器上已有终端B的映射关系:文献[2]的方案是,映射服务器仅将映射关系发送给ASRA,当数据信息到达ASRB后,ASRB再去映射服务器查询终端A的映射关系;为了减少通信时间,在此引入预缓存机制:映射服务器将终端B的映射关系同时送给ASRA和ASRB,并存储在各自的用户映射表中。通过预缓存机制在信息到达ASRB后,ASRB已经存储有终端A的映射关系,而可以直接进行标识的替换并转发,减少了一次对映射服务器的查询,即在图1中用7-2预先完成10的功能。

2.3 接入路由器的工作流程以及对移动性的支持

接入交换路由器是一体化网络中的核心设备,其负责各种终端的接入,为接入用户分配接入标识和交换路由标识,并将用户的数据包进行地址替换后在核心层转发。接入交换路由器的一部分接口位于核心层,一部分接口位于接入层,在其位于接入层的接口上,需要保存两种映射表:本地用户映射表和对端用户映射表。在一体化网络中,当节点发生移动时,节点的接入标识不变,节点请求向新的接入路由器提出接入请求,获得新交换路由标识。接入路由器的工作流程以及对移动性的支持具体处理流程如下:

1)如果收到数据包的源标识是本地接入路由器自己所管理的交换路由标识,则说明数据包又绕回来了,这种情况我们要丢弃掉该数据包,避免错误包的重复传输,占用有限的带宽资源。

2)如果源标识是本地接入路由器管理的接入标识,但目的标识经检查却是本地接入路由器管理的交换路由标识,这种不匹配的情况是不允许出现的,数据包要直接丢弃。

3)如果源标识是本地接入路由器管理的接入标识,但这时目的标识是其他接入路由器管理的接入标识,则得去查询对应的映射关系,得到后再替换转发,这就是在终端移动后首先发送数据时在接入路由器中所进行的操作。

4)如果源标识和目的标识都是本地接入路由器所管理的接入标识,说明此时的通信是该接入路由器下的终端之间的通信,这样可以直接利用接入标识进行通信,这就是移动终端和通信对端都在一个接入路由器下时进行的操作。

5)如果源标识是其他接入路由器所管理的交换路由标识,而目的标识是本地接入路由器所管理的交换路由标识,则要查询对应的映射关系,得到后再替换转发,这是接收端接入路由器在收到数据时进行的操作。

6)如果源标识和目的标识都不是本地接入路由器所管理的交换路由标识,可以知道这个接入路由器是数据包在核心网传送时经过的一个中途转发站,数据包直接转发即可,这时的接入路由器实际上就是一个普通的中转路由器。

7)如果源标识是其他接入路由器所管理的交换路由标识,而目的标识却是本地接入路由器所管理的接入标识,则说明该数据包有错,数据包必须得丢弃。

3 实验方案设计

3.1 实验环境

基于预缓存机制的网络标识映射机制实验网络由三台接入路由器、一台广义交换路由器和两个通信终端组成,每个接入交换路由器都具有有线和无线接口,终端可以移动,接入路由器R1、R2、R3分别代表一个接入网区域,拓扑结构如图2所示。

实验的通信过程是:移动终端A首先通过接入路由器R 1接入网络,并终端B通信;通信过程中终端A移动,再通过接入路由器R 3接入网络,R 3为A分配新的交换路由标识,实现A和对端B通信维持。实验中所使用的接入地址域分别是:192.168.10.0/24、192.168.20.0/24和192.168.30.0/24。交换路由地址域是:192.168.11.0/24、192.168.22.0/24和192.168.33.0/24。

3.2 地址映射表的数据结构

接入路由器中本地接入终端的映射表和通信对端的映射表;映射服务器中也维护了一张整个域内地址的映射表,用来供通信终端在不知道通信对端映射关系情况下的查询。

标识映射表采用双向链表的形式进行存储,双向链表的节点包含两个指针域,一个指向直接后继,一个指向直接前驱,并且为了定期更新映射表,引进了定时器。

标识映射表的数据结构定义如下:

3.3 地址映射表内容

映射服务器上的映射关系表如表1所示,第1行是移动终端A通过R1接入时的映射项,第3行是A移动后通过R3接入后的映射项,在同一时刻两者只能有一项存在。

路由器R1、R2和R3,作为接入路由器,需要保存各自的路由表,分别如表2、表3和表4所示。在图2的实验环境中,主机终端能够准确获得通信对端的接入标识和交换路由标识之间的映射关系,终端A和终端B通过路由器R1、R2和R3上的映射表项相互通信;当移动终端A移动后,其接入路由器由R1变为R3后,接入标识和交换路由标识映射表能够及时更新,使终端A和终端B的通信维持。

3.4 讨论

为了保证查询的可靠性采用了TCP连接方式,当通信发起时,双方通信建立过程需要的时间称为通信建立时间,可以描述为[2]:

式(1)中tDelay为通信建立时间,tH2A为终端到接入交换路由器的链路传输时间,tA2A为接入交换路由器之间的链路传输时间,tASR为接入交换路由器总处理时间。

其中tASR由收到数据包到入对列的时间(t入对列),到映射服务器的查询及响应时间(t查询),数据包出队列并完成转发的时间(t出对列)三部分组成,如下:

测试结果表明在引入预缓存机制之前,到映射服务器查询映射关系所占时间最长,大约为总时间的54.53%;由于引入预缓存机制,可以减少一次t查询,使得的总的通信时间缩短为原来的72%左右。

4 结论

提出了一种基于预缓存机制的接入标识与交换路由标识解析映射机制的实现方案,并对于该方案的通信建立时间进行了深入的分析。实验结果也表明了该实现方案的正确性、有效性、可行性及可以很好的支持终端移动性。一体化网络体系从体系结构上解决移动、Multi-homing、IP地址重分配等问题,将是互联网未来发展的趋势。接入标识与交换路由标识分离映射解析机制作为一体化网络体系的核心技术,本文只是初步研究成果,下一步将主要利用分布式存储技术实现多种方式映射关系的分布,进行更加广泛深入的研究。

参考文献

[1]张宏科,苏伟.新网络体系基础研究.一体化网络与普适服务[J].电子学报,2007,35(4):593-598.

[2]董平,秦雅娟,张宏科.支持普适服务的一体化网络研究[J].电子学报.2007,35(4):599-606.

[3]彭文文,董平,罗洪斌.基于NS2的身份与位置分离协议的仿真研究[J].计算机应用与软件,2012,29(4):6-8,43.

[4]张天园,周华春,洪毅清,等.分离机制移动性管理系统测试[J].计算机工程与应用,2012,48(10):75-82.

[5]周华春,袁晓芳,陈后金.基于Click的身份与位置分离映射的实现[J].北京交通大学学报,2011,35(5):1-7.

[6]Malki K.Low latency handoffs in mobile IPv4.Internetdraft,draft-ietf-mobileip-lowlatency-handoffs-v4-09,2004.

一种自适应的数据库缓存模型 篇6

现在的信息系统大多要用到数据库技术,一般在网络上运行,采用C/S、B/S甚至N层体系结构。数据库技术和这些体系结构的应用,使得开发、部署和集成信息系统有了前所未有的方便和灵活,但同时也带来了运行效率比较低的问题。

使用缓存技术是提高系统效率的一个方法。缓存可以缩短数据传输的距离,减少数据处理的层次,从而缩短系统的响应时间,减少网络流量,提高系统的效率。显然,缓存越靠近用户一端、缓存的数据越多,则发挥的作用越大;但另一方面,缓存的数据越多、越靠近客户端,为了保证数据一致,当对数据进行更改时所付出的额外开销也越大。因此,必须在这两方面取得平衡。系统在运行中,其对数据使用的情形是变化的。根据系统使用数据的情形,缓存的数据也应该相应改变,以取得动态平衡,从而提高系统的性能。

1缓存结构与性能分析

对于一个在客户端进行缓存的系统,假设只有一个服务器,而有n个客户端。假设每个客户端缓存的数据量为服务器端数据总量的h,缓存在客户端的数据在查询时一般比其它数据有更高的命中率,设命中率为f(>1),有hf≤1。每一个客户端的对数据的查询指令数为λq,客户端处理一个查询的平均时间为tqc。而总的对数据进行更改的指令数为λu,所有的更改指令直接由服务器进行处理。服务器处理一个更改指令的平均时间为tus,服务器处理一个查询指令的平均时间为tqs。服务器更改数据之后,如果这个数据被缓存在客户端,则要将更改后的数据广播到所有客户端,服务器广播数据更改到所有客户端的平均时间为tb,而客户端进行数据更改的平均时间为tuc。为了讨论的简单起见,我们假设所有的消息在网络上的传输时间是一样的,为tr。

可以认为λq、λu到来符合泊松分布,而客户机和服务器则为M/G/1排队系统。客户机单位时间到达的处理请求:hfλq个查询、hλu个更改。而服务器单位时间到达的处理请求:(1-hf)nλq个查询、λu个更改、hλu个广播。一个客户端查询所需的时间为[1,2]:

Rq=hf(twc+tqc)+(1-hf)(2tr+tqs+tws) (1)

其中,twc为在客户机等待的时间,tws为在服务器等待的时间。根据排队论知识,可以得到:

undefined (2)

undefined (3)

使用表1中的参数值,可以画出图1。可以看到Rq在λu小于一定数值(330)时,随着h的增大而减小;而随着λu的增大(335、340),Rq随着h的增大先降而后升;当λu增大到一定值(345)之后,Rq随着h的增大将一直增大。这一结果与直观的看法是一致的,即当λu增加到比较大的数值后,在客户端进行查询所节省的时间已经比需要广播更改结果而额外耗费的时间小,从而导致性能下降。

2缓存调整

为此,当λu增大到一定水平之后,应当将h适当减小。计算出使Rq最小的h的一般算法非常复杂,而且f难以测量,因而没有现实的意义。这里需要找到一个使变更广播尽量小,而h尽量大的算法。由于广播发生在服务器端,广播的直接结果是使tws和twc变大,从式(2)和式(3)中可以看出,广播(即hλu)使tws和twc以高阶指数增加。特别是tws,因为服务器的负担此时非常重,即使很小的广播也使其急剧增加。为此,使tws最小的解是使Rq最小的近似最优解。直观地看,使tws最小也近似于将更多的工作交给客户机进行本地处理。

仔细分析缓存,参见图2,缓存中的数据有不同的种类,它们的查询频率和被更改的频率并不相同。假设第i类缓存在整个缓存中占的大小比例为中hi,并有Σhi=1;而λqi为第i类缓存的查询频率,有Σλqi=hfλq;λui为第i类缓存的更改频率,有Σλui=hλu。如果要将第i类数据从缓存中清除,有:

undefined

式中,λqi=hihfλq。如果式(5)成立,则tws为最小。

令c=tb/tqs,由于c、tb、tqs为常数,式(5)可转化为:

考虑到tqs<<1,并考虑它们在tws中的作用,式(7)的解就是上式的近似解。

min(λqi-cλui) (7)

max(λqi-cλui) (8)

当需要增加缓存时,分析与上面类似,增加的是使式(8)成立的第i个在客户端尚未缓存的数据。

需要注意的是,当服务器需要全部客户机清除某类缓存时,服务器以某种算法(如在线时间长短、繁忙程度或随机)指定一客户机计算出需要清除的数据类别;当服务器需要全部客户机增加某类缓存时,服务器根据服务器端的缓存情况进行计算。客户机仅仅清除自己缓存中某类数据时,是根据客户端的缓存情况进行计算;客户机仅仅增加自己缓存中的数据时,将随机选择某一类数据进行缓存。

无论是服务器和客户机,其缓存的容量都是有限的。缓存数据达到容量极限时,可采用LRU方法来替换缓存中的数据。

3调整时机

根据上节的分析,如何确定调整时机及调整方向(向上调整还是向下调整),还是要针对服务器的等待时间进行分析。当查询的影响大于更改时,缓存应该向上调整;反之则向下调整。为此,定义式(9)为影响因子,ε为影响水平。当e大于ε时,调整方向为向上,反之则调整方向为向下。

undefined (9)

服务器中有消息队列,如果在队列中等待的消息不多(小于队列长度的一个百分比值,如60%),则认为服务器空闲;如果在队列中等待的消息很多(大于队列长度的一个百分比值,如60%),甚至出现消息丢失,则认为服务器繁忙。显然,服务器繁忙时必须进行调整。

当e与ε的差很大时,表明查询与更改的相对影响发生了重大变化,此时也要进行调整。引入s(s<1)为稳定水平,称域[(1+s)ε,(1-s)ε]为稳定域。如果e在稳定域之外,则必须进行调整。

综上所述,调整时机算法描述如下:

IF (服务器空闲AND e∈[(1+s)ε,(1-s)ε]) THEN不调整;

IF (服务器繁忙 AND e>ε) THEN向上调整直至服务器空闲为止;

IF (服务器繁忙 AND e<=ε) THEN向下调整直至服务器空闲为止;

IF (服务器空闲 AND NOT(e∈[(1+s)ε,(1-s)ε])) THEN

{

IF(e>ε) THEN向上调整直至e<=(1+s)ε;

IF(e<ε) THEN向下调整直至e>=(1-s)ε;

在式(9)中,n(1-hf)λq就是服务器消息等待队列中查询消息的个数。服务器只需选取1或多个队列长度的消息进行统计,就可以确定n(1-hf)λq和λu。参数ε、s、α、β为经验值常数。

4模拟检验

为了验证以上算法,我们编制了模拟程序进行了验证。验证程序对四种缓存的响应时间进行比较:无缓存(h=0)、最优缓存(使响应时间最小的缓存比例)、自适应缓存(缓存在0~0.19之间)、固定缓存(h=0.15)。自适应缓存选取的最大比例为0.19,是考虑现实中hf很难达到1。

模拟程序中,缓存系统参数仍然采用表1中的参数,ε、s、α、β的值分别是0.2、0.3、1.1、0.8。程序中自适应缓存消息长度大于20则认为系统繁忙,而最优缓存、固定缓存的队列长度则为无穷大。

图3、图4是模拟程序的两个运行结果,图中竖轴为响应时间,单位为秒。从图中可以看出,虽然自适应缓存会发生抖动,但在大多数情况下其性能要好于固定缓存。对其它负载情况进行模拟,包括λq固定、逐渐上升、逐渐下降、随机及λu固定、逐渐上升、逐渐下降、随机等15种负载模式(其中两者都固定不作讨论),这些负载情况下的模拟结果都支持上述结论。限于篇幅,不在此给出其它的模拟结果。

5相关工作及未来工作

文献[1,2]对本文使用的缓存结构进行了比较详细的描述,但是他们没有讨论自适应的问题。文献[3,4]讨论了缓存数据无效规则及无效规则的优化。

通过对缓存系统的性能模型进行分析,缓存的数据不一定是越大越好。当缓存的数据越多时,缓存系统节省的查询时间可能小于更改带来的广播时间,从而导致系统性能下降。因此,缓存应当随着系统的不同情况进行自适应。确定缓存调整时机和如何进行调整的算法都相对比较简单,因而较容易实现。

为了尽量不增加缓存系统的额外负担,这里给出的调整算法和确定调整时机的算法都是比较简单的,它们是一种次优的算法。是否还存在更简单易行的算法,或者计算量大致相同而更优化的算法,可以作更进一步的研究。

文中调整算法对确定了一类数据后,在缓存中对整类数据进行增加或清除,这一方法非常简单,但被处理的缓存数据块的粒度较大,可能使缓存的性能急剧降低到与无缓存时相若。在确定一类数据要进行增加或清除后,不将这类数据全部增加或清除,而是根据某种算法确定其缓存块的大小,这一算法也值得深入研究。

摘要:缓存可以提高应用系统的性能。但应用系统使用数据的情形是动态变化的,特别当数据更改数量大时,固定缓存会使应用系统的性能急剧下降。为了取得更好的性能,缓存应该根据应用系统的动态变化相应动态改变其数据和大小。缓存中的各类数据的查询、更改的频率是不同的,根据这一特点,提出了一种调整缓存的算法。当应用系统繁忙或负载情况发生重大变化时,则进行缓存调整。算法相对比较简单,容易实现。对各种负载情况进行模拟实验证明,这一自适应的缓存算法比固定缓存具有更好的性能。

关键词:自适应缓存,调整算法,调整时机算法

参考文献

[1]Stamatelopoulos F,Maglaris B.Performance and Efficiency in Distribu-ted Enterprise Management.Journal of Network and Systems Manage-ment,Special Issue on Enterprise Network and Systems Management,1999,7(1).

[2]Rafael Alonso,Daniel Barbara,Hector Garcia molina.Data Caching Is-sues in an Information Retrieval System.ACMTransactions on DatabaseSystems,1990:15(3):359-384.

[3]Daniel Pfeifer,Hannes Jakschitsch.Method-based Caching in Multi-Tiered Server Applications.Technical Report#2003-11.http://www.ipd.uka.de/~pfeifer/publications/techreport_2003_11.pdf.

动态缓存 篇7

关键词:HTTP加速代理,自回归预测,LRU替换算法,命中率

0 引言

随着互联网技术的迅猛发展,web访问需求不可控制的增长将为满足带宽需求付出巨大的努力。据统计,Internet上80%的流量是由WWW产生的,而超过80%的用户重复访问着20%的WWW信息资源[1],因此web缓存技术也就应运而生。web缓存技术主要是利用数据的可重复性和共享性来减少网络中冗余数据的重复传输,将数据在本地缓存起来,当有用户需要时,直接由本地应答,从而达到提高请求响应速度和节约带宽资源的目的。由于缓存的容量是有限的,当其被占满之后,新的对象就无法被缓存,这时就需要一种预先设计好的策略将此时缓存区域中相对价值量比较小的对象依次替换出去,直到新的对象能全部存入。因此,web缓存替换算法的好坏直接影响到缓存区域使用的效率。

大量事实证明:自回归模型能很好的用于预测和控制领域,所以本文利用自回归模型的特性并借鉴LRU缓存替换算法的思想,研究了一种基于自回归模型预测的全新缓存替换算法。

1 自回归模型预测的原理

在各种领域,当人们研究变量和变量之间关系时,通常将它们分为2类:① 函数关系,这种关系是一种能用表达式完全确定的关系,如正方形的面积和边长的关系,即给定一个边长的值就能完全确定正方形的面积大小;② 相关关系,即变量之间即使有一定的依赖关系,但其中一个变量又不能被另一个变量所完全确定,如商品的销售量和商品价格,因为在通常情况下,商品的价格越高,可能就意味着销售量越小,但这二者之间又绝对不存在完全的确定函数关系。

回归分析就是研究上述第二类相关关系的统计方法,其结构简单,应用范围比较广泛。回归分析通过建立回归模型来研究变量之间的这种不确定性的关系,既可以用于分析和解释变量间的关系,又可用于预测和控制。

在回归模型中,有2个变量:一个是因变量,另一个是预测变量。其中因变量往往是较晚发生并受预测变量影响的量,而预测变量通常早于因变量的发生,并且主动影响着因变量的值。大量事例证明,回归模型的思想能很好地用于许多应用领域的预测[2]。

AR模型作为自回归移动平均模型(ARMA)中最基本、实际应用最为广泛的时序模型,它是在线性回归模型的基础上引申并发展起来的。对于平稳、正态和零均值的信号时间序列{xt},若xt的取值不仅与其前n 步的各个取值xt-1,xt-2,…,xt-n有关,而且还与前m 步的各个干扰at-1,at-2,…,at-m有关,则可得到ARMA 模型:

xt=φ1xt-1+φ2xt-2+…+φnxt-n-θ1at-1-θ2at-2-

…-θmat-m+at, (1)

其中:n,m⊆(1,2,…);atN(0,σa2),它表示当t固定时,各at之间彼此独立。式(1)也可以记为:

xt=i=1nφixt-i-j=1nθjat-j+at,atΝ(0,σa2)。 (2)

θj=0时,式(2)成为:

xt=i=1nφixt-i+at,atΝ(0,σa2)。 (3)

式(3)即为AR模型。AR模型具有结构简单、构造方便和效率高的特点。对于一个存在的ARMA模型,只要提高AR模型的阶数,便可构造出等效的ARMA模型[3]。为了相应的简化运算,本文主要采用AR模型。

2 关键技术分析

2.1自回归AR模型预测方法

自回归AR模型预测的过程实际上就是预测变量{xt}对其自身数据的过去值进行回归,以便预测未来数据。再建立好自回归AR模型之后,需要对AR模型的参数进行估计。目前AR模型的参数估计方法大致可分为2类:一类为直接估计法,该方法是直接根据观测数据或数据的统计特性估计出模型参数;另一类为递推估计法,该方法比较适合连续的数据采集和建模,效率高、实时性好。由于递推估计法每一组数据都要建模,所以本文直接采用参数估计法,通过参数估计法中的最小二乘估计法对因变量进行估计。如下式所示,将预测变量序列{xt}直接带入式(3)中可得到如下式(4)所示的矩阵:

其中用矩阵可简化表示为:

y=xφ+a, (5)

其中矩阵(5)中各参数分别为:

y=[xn+1xn+2xΝ],φ=[φ1φ2φn],x=[xnxn-1x1xn+1xnx2xΝ-1xΝ-2xΝ-n]

根据多元回归理论,参数矩阵φ的最小二乘估计为:

φ^=(xΤx)-1xΤy, (6)

将矩阵φ带入xN+1=φ1xN+φ2xN-1+…+φnxN-n+1+at中即可得到xN+1的值[4]。

2.2LRU缓存替换算法

目前常用的传统缓存替换算法主要有:基于访问频度的LFU缓存替换算法、基于访问时间间隔的LRU缓存替换算法和基于文档大小的SIZE缓存替换算法[5]。本文所研究的自回归模型是建立在LRU算法的基础之上。LRU算法主要将缓存中最近最少被访问的对象替换出去。当文档被访问时,将当前时间设置为Web文档的最近访问时间T,在需要使用缓存替换算法时,用当前时间t减去T,将t-T值最大的文档替换出去。LRU缓存替换算法实现比较简单,在内存缓存中很有效,因此它是一种非常流行的算法,被广泛用于CPU缓存及虚拟内存的应用中,是大部分代理缓存所采用的缓存算法[6],如著名的开源代码缓存软件Squid也用LRU算法作为其默认的替换算法。该算法虽然应用较为广泛,但它却侧重于对用户历史的访问,缺乏对用户请求的预测功能。

为了让该算法能更逼近真实的网络访问行为,本文利用自回归模型的预测特性,在LRU缓存替换算法的基础之上提出了一种基于自回归模型预测的web缓存替换算法。

3 基于自回归预测的缓存替换算法

基于自回归预测的缓存替换算法主要通过将对象各自的采样值带入到自回归AR序列模型中,得到未来的一个预测值,在替换时主要以各对象的预测值为依据进行替换,其流程图如图1所示。基于自回归预测的缓存替换算法的具体步骤如下所示:

① 数据的采样与预处理;在本文中主要对各个对象的历史访问时间间隔值进行采样;预处理主要针对这些采样值进行适应性的分析与检验,然后将所得到的有效的采样值生成一个预测变量序列,记为{X1X2XnXn+1XΝ-1XΝ};

② 自回归AR模型的建模;自回归模型的阶数与预测变量序列的大小相关,根据AR模型和预测变量序列,对各个对象的N+1次访问时刻值,即XN+1的值进行预测;

③ 预测结果分析;比较各个对象XN+1的预测结果,XN+1的值越小说明该对象在最近最有可能被访问,所以需要将XN+1的值相对较大的对象替换出去。

4仿真验证

4.1仿真目标

本文在OPNET网络仿真软件中对传统的LRU、LFU、SIZE缓存替换算法和基于自回归模型预测的缓存替换算法进行了仿真验证,并从对象命中率和字节命中率这2个方面对这4种算法进行了分析比较。

4.2仿真平台设计

① 仿真中模拟了多个客户端和web服务器端,这些客户端在不同的时刻分别对web服务器中的网页对象进行访问;在客户端和服务器之间设置了本文所设计的HTTP加速代理,且HTTP加速代理和服务器之间是链路为250 ms的卫星链路;

② 仿真中客户端对web页面的访问时间间隔服从指数分布。相关资料已验证,在网页访问中,客户端对同一个Web对象访问的时间间隔服从指数分布。

4.3仿真结果及分析

仿真过程如图2所示。

服务器网页大小服从均匀分布的情况下,LRU、LFU及SIZE缓存替换算法和自回归预测的缓存替换算法的对象命中率和字节命中率曲线图如图3和图4所示。

仿真结果表明:作为一种新型的算法,基于自回归模型预测的缓存替换算法在对象命中率和字节命中率方面较之传统的LRU、LFU和SIZE缓存替换算法有着一定程度的提高。由此可以推断,由缓存替换算法的改进带来的对象命中率和字节命中率上的提高,需要缓存代理增加很大的缓存空间才能达到同样的效果。因此,一种有效的缓存替换算法能在较大程度上提升缓存系统的性能。

5结束语

本文介绍了web缓存替换算法在web缓存中的核心地位,介绍了一种可用于预测的自回归模型,并在该模型的基础之上结合LRU缓存替换算法的思想,提出了一种基于自回归模型预测的web缓存替换算法,最终通过仿真验证了该算法较之传统的LRU、LFU和SIZE缓存替换算法能在一定程度上提高对象命中率和字节命中率,能有效地提高预测的精度,具有较好的非线性逼近能力。

参考文献

[1]周振.WWW缓存技术的研究与实现[D].大连:大连海事大学,2004.

[2]傅惠民.递进自回归预测方法[J].机械强度,2006,28(1):34-35.

[3]段洪涛,曾繁森,李景春.一种预测频段占用度的时间序列分析方法[J].无线电工程,2011,41(7):17-18.

[4]党小超,阎林.基于多元线性自回归模型的流量预测[J].网络与通信,2012,38(1):85-86.

[5]狄刚.HTTP实现代理服务器及缓存替换算法的研究[D].长春:吉林大学,2010.

动态缓存 篇8

近年来随着互联网技术的飞速发展, 互联网用户数量、互联网应用种类、应用类型、用户网络接入带宽等都呈现出爆炸式的增长。网络环境的优化及视频网站内容的不断丰富, 上网看视频成为吸引非网民尝试使用互联网的重要原因, 互联网已经成为影院、电视之外, 居民收看视频的重要渠道。但由于广电网络运营商互联网出口链路与资源的严重缺乏, 用户请求的大量资源来自于其他运营商, 越来越多的用户在线观看网络视频, 给互联网出口带来了沉重的压力, 导致上网高峰期用户体验不佳。为此, 吉视传媒于2012年建设了互联网智能缓存加速平台来解决上述问题。

1 缓存加速系统原理

缓存加速系统的基本原理是用户访问互联网行为具有明显的长尾效应, 即从人们需求的角度来看, 大多数的需求会集中在头部, 而这部分可以称之为流行, 而分布在尾部的需求是个性化、零散的小量需求。缓存加速系统将一定时间内访问量较高的互联网内容存储到本地系统中, 当该内容再次被用户访问时, 由缓存系统直接提供服务, 从而在节约网络运营商出口流量的同时, 提高了用户获取相关内容的访问速率。其原理如图1所示。

2 吉视传媒缓存加速系统部署方式

吉视传媒互联网智能缓存加速平台配置方案为缓存系统与用户行为统计分析系统同时部署, 设备于2012年5月上线。缓存系统一共5台设备, 其中重定向服务器和管理服务器各1台, 3台缓存服务器分别支持HTTP/HTTP+BT协议、PPTV/QQL协议、PPTV协议;用户行为统计分析系统设备1台, 拓扑图如图2所示。

3 缓存加速系统运行效果

随着网络环境的优化, 以及视频网站对内容的不断丰富, 网络视频已经是互联网的重要应用, 上网看视频成为网民使用互联网的重要活动。平台在过去一年的运行时间里运行状态良好, 磁盘空间已基本占满, 缓存峰值吐出流量475M, 如图3所示。

截取取近一周用户收视行为等各方面的行为数据, 周期内每一天流流量吐出的波形极为相似, 且高峰都集中在晚上, 吐出流量1180M左右, 这说明了我公司网内绝大多数用户在需求视频服服务的时间选择上是基本相同的, 如图4所示。

对用户收看网络视频大小的统计显示, 大小在1M~10M之间的视频占总体的13.4%;10M~50M之间占总体的75.94%;50M~200M之间占总体的2.65%;200M~500M之间占总体的0.41%;500M以上占总体的0.31%, 这表明绝大多数用户收看的视频文件以视频短片为主, 如图5所示。

4 总结

自从我公司互联网智能缓存加速平台上线以来, 将互联网的热点内容缓存在本地, 填补了网内资源的匮乏, 节省了网间结算费用, 有效地缓解了公司因宽带用户数增长带来的大量用户观看在线视频、网上冲浪给互联网出口带来的沉重压力, 提高了用户体验, 为公司宽带接入业务的稳定增长, 业务系统的稳定运行奠定了一定的技术基础, 且为我公司其他后续业务发展提供了有力的保障。

参考文献

[1]LI Ruixuan ZUO Cuihua.ICache:A Size-Aware Cooperative Caching Architecture for Web Images.Proceedings of the 6th International Symposium on Parallel and Distributed Computing[J], ISPDC, 2007, Hagenberg, Austria, July 5-8, 2007, 95-100.

动态缓存 篇9

TDMoIP(TDM over IP)技术是在时分复用(TDM)和互联网基础上发展起来的一种新的传输技术[1],能够在IP网络上透明传输TDM业务,并可保证TDM业务的服务质量。它是在网络接入口通过适配和封装TDM业务,将TDM同步比特流打成包,再加上IP头,封装成IP数据包,然后通过IP网络把这些数据包传输到目的地。在目的地去掉数据包中的IP头,并重新生成同步时钟信号,把剩下的数据转化成TDM同步比特流发送出去。本文研究了一种基于去抖动缓存区的自适应时钟恢复的改进算法,将原算法中的固定周期长度调整接收端时钟频率改进为变长调整周期,改进算法克服了固定周期长度调整算法的矛盾现象。

1 算法介绍

在TDMoIP技术中,发送端按照固定比特长度封装TDM信息,在分组交换网上透明传输。采用文献[2]中对TDMoIP的封装技术,用p(j)表示所产生的数据包,j表示第j个数据包。在接收端,用p(i)表示接收的数据包,i表示第i个数据包。网络传输的抖动为q(i)=T(i)-T。缓存大小函数为ϕ(k),k表示第k个数据包接收完毕的时刻。

假设接收端读取缓存的频率为f2(k),则收发两端的发包频率差为Δf(k)=f1-f2(k),每个数据包受到的抖动延迟为n(k),抖动延迟可看成是一种噪声。由文献[2]可知,缓存大小函数ϕ(k)与收发两端的发包频率差Δf(k)和延迟n(k)紧密相关,ϕ(k+1)的大小等于ϕ(k)的大小加上Δf(k)和n(k)对缓存的影响。所以,可以得出缓存大小函数ϕ(k+1)的表达式为

undefined

本文对文献[3]中提出的时钟恢复算法进行了改进,改进算法以指定的时间间隔f(n)对数据缓冲区变化的大小Δϕ(k)进行采样,然后对采样的数据进行加权平均,得到的数据反映了一段时间内接收端数据缓冲区的变化,利用这个变化来调整接收端的时钟频率。具体实现框图如图1所示。

由于接收端在初始时刻收发两端的时钟不同步,为了确保缓存不产生溢出,采样时间间隔的值不能设置太大,当缓存大小函数趋于稳定时,将采样时间间隔逐渐增大,以此可避免时钟同步后不断地调整时钟频率f2(k)的问题。同时,缓存可以更好地吸收网络传输延迟抖动,而且时间越长,效果越好,因此减小了网络延迟抖动对时钟同步的影响。在改进算法中,假设接收端一次频率调整周期为j(m),且j(m)满足:

undefined

式中,j(0)为初始值;α为调整系数。j(m)的值并非持续增长,当j(m)大于某个值的时候,j(m)将取固定长度。在j(m)长度范围内,每来一个数据包,对缓存大小变化函数Δϕ(k)采样一次,假设在j(m)间隔内,共采样了N个Δϕ(k)数据,通过采样的一组Δϕ(k)数据,可以利用式(2)估计出收发两端的时钟频率差Δf(m),同时也将式(1)的缓存大小变化函数改写为

undefined

式中,Δf(m)=f1-f2(m),d(k)=n(k)T(k)。由于E[d(k)]=0,利用时间平均估计j(m)范围内Δϕ(k)的均值,可以得到两端时钟频率差的估计值:

undefined

利用式(5)估计两端时钟频率差Δundefined(m),一种简单的方法是将估计的Δundefined(m)加上f2(m)得到f2(m+1)。本文利用一阶动态系统得到f2(m+1),则接收端的调整时钟频率f2(m+1)为

undefined

式中,δ为频率调整系数。

2 算法的性能分析

本节将对前面算法的性能进行分析,着重讨论这种算法对收发两端频差估计的分析。假设以Δundefined(m)表示频差估计值的误差,则

undefined

因为两端时钟之间的频率差很小,所以在分析f2(m)时,可以近似地看成f2(m)≈f1,因此,可以得到:

undefined

式中,N为j(m)时间段内采样点的数目。

由前面E[d(k)]=0可知,undefined,因此,对Δundefined(m)的估计为无偏估计,即

undefined

频率偏差的估计方差undefined,其大小取决于噪声序列d(k)的统计特性,因此,没有一种量化的结果来说明该估计的好坏。但是,当N趋于无穷的时候,可以得出σ(m)→0。在实际中N的取值可以尽可能大,但不能取无穷,所以在这种情况下σ(∞)是一个很小的有限值。

接下来将对利用undefined估计f2(m+1)的效果进行分析。由式(7)可以得到:

undefined

因为0<δ<1,得到闭环系统为

undefined

由前面分析结果undefined0,得出:

undefined

从式(12)可以得出:Ef2(∞)=f1。

f2(m)估计的方差π(m)=E[f2(m)-Ef2(m)]2,由式(7)和式(10)得到

undefined

当m趋于无穷的时候,可以得到:

undefined

由于0<δ<1,所以π(∞)<σ(∞),同样,π(∞)的值也与d(k)统计特性有关。

3 算法仿真及结果分析

通过MATLAB软件对上述算法建立仿真模型。假设以256个字节大小TDM数据封装成一个数据包,发送端TDM业务速率为2.048 Mbit/s,则发送端每秒发送1 000个数据包。若接收端的时钟频率与发送端相差50×10-6,则接收端初始时刻每秒读取缓存中的数据为999.951个数据包。时钟频率调整周期初始值j(0)=0.1 s,当j(m)>50 s时,j(m)取恒定值为j(m)=50 s,α=0.5,δ=0.8,仿真时间为1 000 s。本文以高斯噪声为背景作为网络抖动,分别在原算法时钟频率调整周期较小和较大的情况下做对比仿真,在原算法中调整周期小的时候取值为1 s调整一次,调整周期大的时候取值为50 s调整一次。数据包传输过程中噪声抖动曲线如图2所示。

缓存大小函数变化曲线如图3所示,两端时钟频率偏差调整曲线如图4所示。接收端时钟频率调整曲线如图5所示。

由仿真结果可以看出,在原算法中,当时钟频率调整周期较小时,缓存大小虽然趋于平稳,但是两端的时钟频率偏差Δf(m)却波动较大,有的时候甚至超过了50×10-6的最大抖动容限。同理,当时钟频率的调整周期较大时,虽然两端的时钟频率偏差Δf(m)波动较小,但在这种情况下的缓存大小波动却较大。

4 结束语

本文提出了一种基于缓存控制的自适应时钟恢复算法,从硬件及可行性方面分析了改进算法的性能,假设接收端缓存的开辟的缓存容量为15 k[4],如果封装的TDM数据包较大的话,假设为300个字节,缓存的变化波动最大已经超过了50个数据包,因此,在这种情况下,缓存很容易出现溢出,导致误码产生。对于改进的算法而言,在开始的时候,虽然两端的时钟频率偏差Δf(m)和缓存大小波动较大,但随着算法的调整,该波动将逐渐收敛,并且始终小于50×10-6,满足ITU-T G.823的标准要求[5]。

参考文献

[1]柏林.基于分组交换网络仿真TDM电路技术的研究与设计[D].秦皇岛:燕山大学,2004.

[2]刘秋明.基于RPR的TDMoIP时钟恢复研究和实现[D].南昌:南昌大学,2010.

[3]Singh R P,Lee S H,Kim C K.Jitter and clock recov-ery for periodic tratfic in broadband packet networks[A].IEEE INFOCOM’88[C].Hollywood,USA:IEEE,1994.2189-2196.

[4]刘秋明,蔡志勇,王健.弹性分组环中的队列长度分析[J].计算机工程,2010,36(10):108-110.

上一篇:政策兑现下一篇:快乐是心态