Web缓存技术

2024-09-26

Web缓存技术(通用7篇)

Web缓存技术 篇1

1 引言

在Internet飞速发展的今天,互联网已成为网上生活的基本工具,是人们获取和传播信息的重要途径,用户通过Web获取大量信息的同时,对Web应用系统的响应速度上升到最高的需求,为了提高用户的感受、降低企业和服务提供者的成本(包括提高处理速度和增加网络带宽),人们开始研究在当前的Web构架基础上如何提高Web应用系统的交互速度,调查发现大量的Web流量中,绝大部分是冗余数据,即一个位置上的多个用户要查询大量相同的内容。为减少大量Web冗余数据在网络上的传输,经过研究人员的深入探索,缓存技术是在不增加成本的前提下提高Web应用系统性能的最有效的解决方案之一。

2 缓存技术的基本原理

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

在Web应用系统中,缓存用来存储最近通过Web访问过的信息。通常,用户对Web对象的请求需要在Internet路由经过多次跳跃到达原始服务器,再从原始服务器取得所请求的对象返回给用户。Web应用系统中缓存技术的主要思想就是将Web对象(页面、图像及其它Internet内容)进行本地存储,使得这些被访问过的Web对象更靠近需要使用它们的用户,从而大大提高用户通过Web访问Internet的速度。其工作的基本原理如图1所示。图1中,1为缓存服务器接受客户浏览器的请求;2、3为缓存服务器从原始服务器获得缓存中的未存储对象(Cache Miss);4为缓存服务器存储获得的对象,并将获得的信息副本发送给客户浏览器。此后,当用户对相同的对象(网站)提出访问请求时,就由缓存服务器来满足其要求,将已经存储对象(Cache Hit)的拷贝发送给客户浏览器。

3 缓存技术在Web应用中的使用

3.1 静态Web应用中的缓存技术

静态Web应用中页面对用户的响应时间由网页内容传输的时间、Web服务器读取数据以及进行数据输出的时间组成。因此降低静态Web应用中页面的响应时间主要从这两方面着手。根据缓存所处的位置不同,可以把缓存技术分为3类:(1)客户端的缓存技术;(2)基于代理服务器的缓存技术;(3)服务器端的缓存技术。

3.1.1 客户端的缓存技术

在客户浏览器中使用缓存技术的思路很简单,把用户历史访问过的网页都缓存储在用户本地的硬盘上,在用户以后访问同样的网页时,浏览器就可以从本地硬盘中取出网页的内容,而不需要重新建立一次HTTP连接。如果该网页在服务器上有更新,则浏览器重新连接Web服务器,从Web服务器上读取新的网页的内容响应给用户,同时用新的网页去置换缓存中对应的过期的缓存页面。在此种缓存技术中,客户浏览器直接使用了本地缓存中的内容进行显示,未和Web服务器进行通信,因此降低了服务器的负载,间接提高了服务器的并发访问量,同时也降低了网络通信量以及服务器访问的任何后台资源,从而优化了各种Web应用的响应时间。

3.1.2 基于代理服务器的缓存技术

建立一个缓存代理可以使分布的用户访问网络时都经过这个代理,该代理服务器处于客户浏览器和Web服务器的中间。这样能加快使用该代理的用户网络的反应速度。当一个用户访问一个文档时,首先访问该代理服务器,由于该文档在早些时候可能被另一个同局域网的用户访问过而在缓存中,对这个用户来说,文档就可以直接从代理服务器的缓存中获得,而不必到原始的web服务器中获得了。所以,如果用户的web浏览器配置Proxy代理,这样用户对所有Web应用系统的请求都经过代理去访问Internet。在用户请求访问Internet之前,代理服务器首先检查自身是否己经缓存了用户请求访问的Web对象,如果己经缓存并且没有过期,那么就用本地缓存的Web对象响应用户的请求,从而加快了用户的访问时间,并节省了带宽资源。此种类型称Forward-Proxy正向代理。不使用代理服务器的访问流程如图2所示;使用代理服务器的访问流程如图3所示。

使用代理端缓存技术具有以下的优点:(1)减少网络信息流量;(2)减少用户访问延迟;(3)减轻服务器的负载;(4)提高了web应用系统的健壮性。

3.1.3 服务器端的缓存技术

当用户访问Web服务器读取HTML页面时,一般Web服务器需要从硬盘上读取HTML文件,然后传输给用户。每次用户访问,Web服务器都重复相同的处理过程。服务器端缓存的目的是降低服务器对用户请求的反应时间、增加服务器的吞吐量。静态内容缓存则将用户经常访问的HTML页面或者Web处理结果存储在服务器的内存当中,在用户请求某一服务时,服务器首先从内存中检索是否有相同的结果,如果存在,则不必重新处理,而直接将结果发送给用户。由于内存的存取速度远远比硬盘的存取速度快,所以Web应用服务器系统的响应时间可以缩短。服务器端的缓存可以处理大部分的用户静态请求,于是大大加快了用户请求的响应时间,并降低了原始Web应用系统服务器的负载。静态内容缓存设备放在Web服务器前面,用于处理用户对静态内容的请求,因此提高了前端Web服务器处理用户连接的能力,这个办法在静态Web应用系统请求占很大比例的环境中是非常有效的。

3.2 动态Web应用中的缓存技术

动态Web应用中页面的编译和解释执行均是在服务器端解析和执行的。因此对于动态Web应用页面的缓存技术主要体现在服务器端缓存技术上,服务器端缓存的目的是缩短服务器对用户请求的响应时间、增加服务器的吞吐量。其缓存方式一般有两种。

3.2.1 数据库连接缓存

用户通过Web应用服务器访问数据库时,Web服务器上的应用程序和数据库服务器之间需要首先建立数据库连接,然后才能存取数据,在处理结束后,这种连接被关闭。每次用户访问都需要重复这样的步骤。由于数据库连接过程是一个严重消耗系统资源的过程,而且时间开销也比较大,因此通常情况下,数据库连接过程对系统响应时间的影响是巨大的。数据库连接缓存是指在Web服务器和数据库服务器之间建立数据库连接池,在系统初始化时即生成一些数据库连接存放在数据库连接池中。数据库连接池的实质是在内存中开辟一个数组,数组的元素即是数据库连接。当用户需要访问数据库时,直接从数据库连接池中取得一个已经存在的数据库连接,操作结束后,连接仍然保持而不关闭,直接返还给数据库连接池。在此过程中,由于数据库连接是事先生成的,因此在一次业务逻辑操作中,生成和关闭数据库的时间减少到O,这样一来,用户访问数据库的步骤被简化,进而优化动态Web应用系统的效率。

3.2.2 内容缓存

内容缓存则将用户经常访问的动态页面的响应内容或者动态页面处理过程中的中间结果存储在服务器的内存当中,在用户请求某一服务时,服务器首先从内存中检索是否有相同请求的处理结果,如果存在,则不必重新计算和处理,而直接将结果响应给用户或者把中间结果从缓存中取出进行一系列计算后对用户做出响应。由于对用户的输出是把内存中的响应内容对用户输出或者是根据缓存中的“半成品”内容进行计算后的输出,在此过程中省略了执行动态页面的业务逻辑的步骤以及对数据库查询、对其他信息系统访问的过程,所以Web应用服务器系统的响应时间可以大大缩短。内容缓存的内容通常是对数据库查询后,数据库返回给Web应用服务器的结果集。对动态页面进行缓存的关键是尽量减少动态页面中业务逻辑的执行次数。对动态Web应用页面的高速缓存一般采取3种缓存实现方案:(1)动态页面变静态页面技术;(2)利用开源的缓存API缓存请求处理过程中的中间对象;(3)缓存一个对象的方法的执行结果。

4 结束语

缓存技术不是着眼于网络设备性能的提高和扩容,而是在更深一个层次上分析用户数据流的统计特征,利用数据的可复用性和共享性,在边缘网络复制和保存网络数据的一项重要技术。它不但可以减少网络和服务器负载,提高数据访问速率和服务可靠性,而且大大节省了网络运营费用,同时提高Web应用系统的响应速度,增强用户感受和认可,进一步优化Web应用系统的性能。因此缓存技术有着非常广阔的发展前景,相信随着各种Web应用的不断深入,缓存技术会发挥越来越重要的作用。

参考文献

[1]赵玉伟.WWW中缓存机制的应用研究[D].保存地点:武汉理工大学,2006.5,14-23.

[2]贺琛,陈肇雄,黄河燕.Web缓存技术综述[J].小型微型计算机系统,2004,25(5),836-842.

[3]乐德广,郭东辉,吴伯僖.网络缓存技术及应用的研究[J].应用技术,2003.5,33-35.

[4]乐立鸾,李明.Web应用系统性能优化[J].科技信息,2007(11),294-295.

基于缓存框架的Web缓存研究 篇2

1 缓存框架OSCache研究

OSCache由Open Symphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能。OSCache也是一个被广泛采用的高性能的JZEE缓存框架,它能应用于任何Java应用程序的缓存解决方案。

OSCache是Open Symphony组织提供的一个J2EE架构中Web应用层的缓存技术实现组件,它能缓存任何Java对象,拥有全面的API,可以永久缓存,支持集群,缓存过期控制等等。

1.1 缓存标签实现部分页面缓存

OSCache提供一系列的JSP标签库,实现主要缓存功能,这些标签是:cache、usecached、flush等等。

1)cache标签

这是OSCache标签库中最重要的一个标签,使用格式如下:

some JSP content//需要缓存的内容

包括在标签之间的内容将被缓存处理。页面第一次加载的时候,标签中的内容被处理并被缓存起来,页面被再次访问的时候,缓存机制首先会检查这部分内容是否失效。如果缓存内容已经失效,这时缓存内容将被重新处理并且返回处理过后的信息;如果缓存内容没有失效,那么返回给用户的将是缓存中的信息。

2)usecached标签

这个标签是cache标签的一个嵌套标签,主要用在程序控制中通知父标签是否使用以前的缓存内容,如:

<%try{%>

some JSP content//需要缓存的内容

<%}

catch(Exception){%}

<%}%>

上述代码在系统容错性方面提供了很好的容错方案。当程序捕获到异常时,通过Catch分支中usecached标签的use属性执行操作。当use属性值为true时,读取缓存内容。若此时系统发生错误,用户看到的不再是单调乏味的报错页面而是储存在缓存中的内容。

3)flush标签

该标签的作用体现在允许操作者在任意运行期间自主手动刷新缓存内容。格式如下:

上述代码表示刷新session范围内键值为my Example的缓存内容。

1.2 Cache Filter实现整个页面缓存

在OScache组件中提供了一个cache Filter用于实现页面级缓存,开发者只需配置Web.xml便可实现该功能。Cache Filter用于对Web应用中的某些动态页面进行缓存,尤其是那些需要生成PDF格式的页面以及包括大量图片文件的页面。Cache Filter的运用不仅缩短了服务器响应时间,减小了数据库服务器的压力,而且显著提高了Web服务器的性能。

1.3 Java API for OSCache缓存管理

在实际应用中除了JSP标签库,还可以使用OSCache提供的Java API。其中有一个重要的Java类———General Cache Administrator,用它来建立、刷新和管理缓存。

2 Hibernate数据缓存

在操作数据库的时候,通常使用SQL语句添加、删除、更改、查询数据,ORM(object Relational Mapping,对象关系映射)通过使用描述对象和数据库之间的映射,将Java程序中的对象自动持久化到关系数据库中。Hibernate正是一个ORM的实现,它使得与关系数据库打交道变得十分轻松,就像操作普通Java对象一样,同时不必考虑如何把它们从数据库表中取出或放回到数据库表中。Hibernate模型结构如图1所示。

2.1 Hibernate一级缓存和二级缓存

Hibernate提供两级缓存,一级缓存是Session级别的缓存,属于事务范围的缓存。这一级缓存由Hibernate管理,一般情况下无需进行干预;二级缓存是Session Factory级别的缓存,属于进程范围或群集范围的缓存。这一级别的缓存可以进行配置和更改,并且可以动态加载和卸载。Hibernate还为查询结果提供了一个查询缓存,它依赖于第二级缓存。Hibernate的二级缓存由从属于Session Factory的所有session实例共享,Hibernate二级缓存的工作过程如下:

l)查询的时候,形成一条SQL语句“select*from table_name where…(查询条件)”查询数据库,一次性获得所有的数据对象。

2)把获得的所有数据对象根据ID(对象在业务表中的唯一标识)放入二级缓存中。

3)当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查找,并按从一级缓存,到二级缓存,再到数据库的顺序查找,直到找到查询结果,并把结果按照ID放入缓存。

4)删除、更新、增加数据的时候同时更新缓存。

显然,对数据库中所有的数据都实施缓存是最简单的方法。但是,如果没有对当前数据的使用情况进行考察就全部缓存起来,内存会迅速被几乎不可能再重用的数据充斥,系统的性能会急剧下降。因此,只有当数据满足一定的缓存条件时,才可以将其纳入缓存管理。

2.2 Hibernate二级缓存的实现

Hibernate为众多的第三方缓存组件提供接入接口,如JCS,Ehcache,OSCache,Swarm Cache,JBoss Cache等。Hibernate对缓存进行了良好封装,透明化的缓存机制使得在上层结构的实现中无需面对繁琐的缓存维护细节。目前Hibernate支持的缓存机制通过下面的Java类来实现net.sf.Ehcache.hibernate.Provider,net.sf.hibernate.cache.OSCache Provider,net.sf.hibernate.cache.Swarm Cache Provider,net.hibernate.cache.Tree Cache Provider。

3 Web应用缓存方案的提出

企业级的Web应用除了实现核心业务外,还包括必不可少的查询模块。针对查询模块出现的问题,结合上述缓存技术提出一个解决方案。

3.1 查询模块

查询模块,通常是一个用户接口。通过该接口,用户可以查看存储在数据库中的各种信息。一般来说,使用查询模块的员工分为两类:一类人员是使用该系统的一线操作员,另一类人员是通过该模块查看并掌握业务总体情况的领导。

对于一线操作人员来说,查看的数据量相对较少。因为他们只需关心自己最近一小段时间内处理那部分数据,特别是每一条记录的详细明细。这类人员对这些记录的关心程度与时间先后顺序密不可分,越是新近的操作记录他们查看的频率越是高。并且这些记录都保持稳定,生成后不再被更改。因此,对数据库的查询结果进行缓存是一个良好的系统提速方案,可以显著提高系统的响应速度。

一线操作员的查询流程归纳为以下几个步骤:

1)用户选择或者输入查询条件,提交查询请求。此时系统形成完整的SQL语句提交给数据库,例如:“select*from table_name where condition”。

2)系统根据形成的SQL语句从数据库中读取所有符合查询条件的实体列表,显示在前台页面。

3)用户查看实体列表,找到真正关心的某一条数据,查看详情。此时传递该条记录的ID号,形成新的SQL语句:“select*from table_name where id=***”。

4)数据库服务器进行再次查询同时返回该条记录详细信息。

从上述流程了解到,对数据库的实体查询操作并不涉及实体的更新。一旦信息被返回,用户不会关注查询过后数据库中的数据是否发生改变,而且用户更加关注最新的一条或几条记录。因此,对数据库的查询结果进行缓存是一个良好的系统提速方案。具体思想为,将查询出来的所有记录进行分页显示,并将第一页里的每条记录信息由动态页面转化为静态页面缓存起来。提供一个专门的Java类,负责将动态页面按规定的模式解析成为静态页面,并将每条记录的明细页面保存为“***.html”的形式,其中***为该条记录的ID号码。一线操作员使用查询模块的缓存方案流程如图2所示。

使用查询模块的另一类用户是领导。他们通过查询模块了解一段时间内发生业务的总体情况,其时间间隔较长,查询数据量较庞大。对于这样的查询,查询响应的速度显得尤其重要。无论是访问数据库还是将查询结果显示到前台都会耗费过多的系统资源,必须实现分页功能缓解系统压力。将查询出来的数据一并放入缓存,只有当用户需要查看具体某页的时候才显示该页的查询结果。这样做可以避免重新获取和释放对象,不必每次都从数据库中获取数据。

此时需要这样一种机制,不仅能够在内存中保存对象同时也提供保持内存中对象更新的功能,即对象缓存。Hibernate通过对不同数据库的统一接口设计,实现透明化通用分页实现机制。以下是实现分页功能的关键函数:

Criteria.set First Result(int x)//从第x条记录开始获取

Criteria.set Fetch Size(int y)//获取记录大小

更重要的是缓存框架作为第三方插件可以方便的引入到Hibernate中,因此对于查询模块的缓存设计提出Hibernate整合缓存框架的方案。领导使用查询模块的缓存方案如图3所示。

3.2 缓存框架的选择

在选择缓存框架之前,首先列出选择缓存框架需要达到的目标:

1)在Web应用中能够快速访问数据。

2)提供可配置的缓存管理,以便通过描述方式而不是编码方式修改参数。

3)发挥多个缓存框架的优势,提供符合具体项目需求的缓存框架结构。

4)最流行的Java开源缓存框架是OSCache和Ehcache。对于运用JSP开发表示层的Web应用来说,OSCache是一个易于操作并能快速提高性能的页面级缓存,但是对于Hibernate来说OSCache并不是最好的选择。而Ehcache本身出自于Hibernate,能够更好的支持Hibernate。因此,采用Ehcache作为Hibernate的二级缓存实现。

从整个系统的角度来说,具体缓存方案为:利用Ehcache作为Hibernate的二级缓存,实现查询结果的对象缓存,同时利用0SCache实现对JSP页面的缓存。

上述缓存方案应用于湖北省水路交通规费征稽网络系统,实现从略。

4 结束语

改文重点阐述了缓存框架OSCache的缓存组件与Hibernate的数据缓存管理。Hibernate不仅能够提供强大的、高性能的数据查询功能,而且还拥有良好的缓存管理机制。本文提出将第三方组件OSCache、Ehcache和Hibernate整合在一起的Web缓存方案,实现了页面缓存和查询结果的对象缓存,很大程度地改善了系统的性能。

参考文献

[1]赵玉伟.WWW中缓存机制的应用研究[D].武汉:武汉理工大学,2006.

[2]Duane Wessels.Web Caching[M].United States of America:O'Reilly&Associates Inc,2001:1-6.

[3]阎洁.Web应用若干关键技术的研究[D].武汉:武汉理工大学,2008:33-46

[4]opensymphony.What is OSCache[EB/OL].http://www.opensymphony.com/oscache/wiki/what%20is%20OSCache.html,2005.

[5]opensymphony.Tag Reference of OSCache[EB/OL].http://www.opensymphony.com/oscache/wiki/JSP%20Tags.html,2005.

[6]Object Renational Mapping-Persistence and Caching for Java[EB/OL].http://cayene.apache.org,2007.

[7]夏昕,曹晓钢,唐勇.深入浅出Hibernate[M].北京:电子工业出版社,2005.300-301.

Web缓存技术 篇3

随着Internet的高速发展,Web应用已逐渐成为发布和获取信息的主要媒介,它给人们的工作和生活带来了极大的便利,Interntet/Intranet的应用已经渗透到人们工作、学习和生活的各个方面。许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示,但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。

为此人们想到了Web高速缓存服务器技术,它可以缓存用户访问过的对象,对相同对象的访问直接由缓存服务器提供,无需再占用服务器的处理能力和主干的出口带宽,减少网络流量,节约带宽资源,节省资费。同时,由于用户对服务器的请求可以由Cache立即响应,因此可以极大地提高用户访问的响应速度。

Memcached是一个高性能的分布式内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,能够存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。通过Memcached可以构建一个高性能的缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

2 Memcached工作原理

Memcached在分布式应用中,每个结点都是一个Server,结点之间相互独立,不存在同级之间的通信。客户端对多个Server通过一个连接池进行连接,可以设置连接池当中每个Memcached的连接数权重,根据服务器性能调整每台Memcached的连接数比例权重,实现近似的负载均衡。用户不必关心数据存放在哪个节点,交由客户端统一算法进行分配。

Memcached的Server结点对数据的存储操作都是在内存中完成,对内存分配和回收采用了曾在Sun OS实现的分页机制,预分配一个大内存(默认是<=200M),然后分页切块:将1M的内存片(slab),根据需要截取成若干种不同大小的内存块(chunk)进行使用,共有80、100、128、160、...1M这数十种大小不同的内存块(可以设置最小的块大小),默认按照125%递增(可以设置递增比例),对每个数据对象的存储便在所切的块中进行操作,没有涉及到任何磁盘IO操作,绝对不会使用到SWAP虚拟内存,其性能瓶颈都在网络通信部分,而Memcached正是将这一部分抛给了一个中间层完成。可以说Memcached是一个单进程、单线程、监听某个网络端口的daemon(或非daemon),是一个轻量级的应用服务进程。

Memcached中所有缓存的内容都在服务器的内存中。内存中的缓存数据可以通过API的方式被存取。数据是以key/value的配对方式存在的,就像一个巨大的Hash表。淘汰内存中的数据可以通过LRU算法进行实现,也可以通过删除和设置失效时间来实现。

分布式是Memcached的主要特性,可以通过在多台服务器上安装Memcached组建一个缓存服务器集群。这样可以使数据库访问的压力降到最低,从而可以构建出更快的、更具扩展性的Web应用。其中Memcached与数据库端协同工作的原理如图1所示。

Memcachedf具有以下特点:1)基于c/s架构,协议简单;2)基于libevent事件处理;3)自主内存存储处理;4)基于客户端的Memcached分布式。

3 Web缓存服务器的构建

3.1 Windows下的Memcached安装

1)下载Memcached的windows稳定版,解压放某个盘下面,比如在c:Memcached;

2)在cmd命令界面下输入‘c:MemcachedMemcached.exe-d install’安装;

3)再输入:‘c:MemcachedMemcached.exe-d start’启动

4)下载php_Memcached.dll,(要和php版本相对应);

5)在php.ini文件中加入一行‘extension=php_Memcached.dll’;

6)重新启动Apache,安装完成。在phpinfo中将会出现Memcached选项。

NOTE:以后Memcached将作为windows的一个服务每次开机时自动启动。

3.2 Memcached server运行情况

服务器端的环境:Genuine Intel(R)CPU T2050@1.60GHz,1.99 GB memory。

我们对Memcache的运行情况进行了监控,具体情况如图2所示。

4 纺真结果与验证

为了验证memcahced运行机制,设计如图3所示的测试代码:

重复两次运行结果如图3和图4所示,第一次我们是从数据库中取出数据,第二次就直接是从缓存中取出数据。

我们随机从数据库中抽样10000条记录,进行查询操作,对比结果如表1所示:

从表中可以看出,从Memcached中查询的速度大约是从Mysql中查询的速度的3倍。

5 总结

Memcached在高并发的数据查询和海量数据输出的情况下,可以起到很大的作用。因为访问Memcached中的内存数据,要比数据库的磁盘数据快的多。

在实际使用Memcached时还要注意以下几方面的问题:1)使用唯一的Key;2)保证你的Memcached器安全;3)加密数据。

Web cache技术不是着眼于网络硬指标的提高,而是在更一个层次上分析用户数据流的统计特征,巧妙地利用信息的可“盗版”复制性和可共享性,在最佳地点复制和保存供大家使用的信息,减少对网络瓶颈设备和高延迟设备的依赖,从而提高用户的使用效率。实验研究表明,在应用Web cache服务器后,最高可以提高3倍以上的应答速度,减少30%-60%的出口流量,可以说cache是向管理要效益的典型代表。

在有些情况下,缓存数据并不是一个好主意,比如在一个数据被频繁更新的时候,每一次数据的更新,我们都需要去同时更新缓存,缓存的命中率不高,会导致一些额外的性能牺牲。这种情况下,直接查询数据库会更好一些。可以推断的是,随着研究的不断深入,Memcached将会获得越来越多的应用。

摘要:该文简单介绍Memcached的特点和工作原理,详细阐述在Windows下Memcached的安装和配置,对其运行机制进行了验证,并展示实验结果。

关键词:缓存服务器,Memcached,分布式,关系型数据库管理系统

参考文献

[1]陈向辉.即用即查PHP函数参考手册[M].北京:人民邮电出版社,2008.

[2]Williams H E,Lane D.Web Database Applications with PHP&MySQL[M].O'Reilly,译.2nd ed.南京:东南大学出版社,2006.

[3]Gutmans A,Rethans D.PHP 5 Power Programming[M].简张桂,译.北京:电子工业出版社,2007.

[4]赵鹤芹.设计动态网站的最佳:Apache+PHP+Mysql[J].计算机工程与设计,2007,28(4).

[5]李学明,陈丽.Web服务组合的安全性研究[J].计算机应用研究,2009,26(4).

Web缓存技术 篇4

由于缓存空间的限制, 需要一个智能的方式来有效管理Web缓存内容。传统的缓存策略是无效的, 因为其只考虑一个因素, 而忽略了其他对Web缓存效率有影响得因素。因此, 现在有许多缓存策略提出, 并获得了很好的效果。

支持向量机是一种监督式的学习方法, 它有许多良好的品质, 使其成为了最流行的算法之一, 在许多分类应用中, 比如文本分类、网页分类等的应用比其他算法更快、更准确。

本文提出了用支持向量机来预测稍后可重新访问的Web对象, 将这些预测的Web对象存储在代理缓存空间上, 以更有效地利用代理缓存空间。

1 支持向量机

支持向量机 (Support Vector Machine, SVM) 是Corinna Cortes和Vapnik等人于1995年首先提出的, 其在解决小样本、非线性及高维模式识别中表现出许多特有的优势, 并能推广应用到函数拟合等其他机器的学习中。

支持向量机的主要思想是使用一个高维度空间, 在这个空间中找到一个错误率最小的超平面, 进而用来对两个类进行二元划分。支持向量机是一个学习模型, 需要通过学习来运行。在学习阶段, 支持向量机学会发现几个代表学习数据的支持向量。因此, 支持向量机根据学习模型对一个给定的未知的数据集进行分类。

然而, 对于许多现实生活中的问题, 想要找到一个超平面的数据进行分类很困难。对于处理非线性可分数据, 在线性情况下仍然可使用相同的公式和方法, 输入的数据只从其原始空间转换到另一个高维度空间。在这个空间里, 一个线性决策边界可以分离出正面和负面样本, 我们将这个空间称为特征空间。因此, 支持向量机的基本思想是将输入空间中的数据通过一个非线性映射将数据映射到一个特征空间里。

综上所述, 非线性决策边界通过转换将原始数据转换到一个更高维度的特征空间中。然而, 这种转换却从来都没有明确的实施过。相反, 支持向量机的核心函数在学习过程中不需要了解变换功能就可以计算所有的数据点。支持向量机有多个核心函数供用户选择, 以解决不同的问题。不同的核心函数适用于不同的问题类型。

2 基于支持向量机的分类方法

本文提出一个基于支持向量机的对Web代理缓存内容进行分类的分类器方法框架, 如图1所示。该方法包括数据收集、预处理和学习阶段。因此, Web缓存是可以通过经过学习的支持向量机分类器来管理的。

2.1 数据收集

Web代理日志文件可以提供用户在登录到服务器后所进行的一切操作信息。笔者认为, Web代理日志文件是完整的知识体系, 是可以作为学习数据来使用的, 可有效预测下一个Web对象。

2.2 数据预处理

在支持向量机学习阶段之前, 需要对数据进行预处理, 使数据可被支持向量机学习。数据预处理包括数据跟踪准备和数据集准备两方面。

由于在日志文件中有一些无效的条目和不相关的条目, 在数据跟踪准备时需要删除这些条目。数据跟踪准备分为以下3步: (1) 数据分析。明确日志文件中连续记录之间的边界以及每条记录中的不同字段。 (2) 数据过滤。了解不相关的输入, 比如非缓存请求、错误的HTTP状态码输入等, 只考虑正确的输入。 (3) 数据定型。消除不必要的字段, 将数据确定为最终适合支持向量机学习的格式。

2.3 学习阶段

支持向量机已被广泛应用于解决各种分类问题中。在核心函数学习的帮助下, 支持向量机已经应用到了许多领域中, 并取得了成功。

3 结束语

Web缓存是提高Web系统可扩展性的有效解决方案之一。本文提出了基于支持向量机的预测Web对象的智能方案, 用支持向量机预测Web对象随后是否可以重新访问。因此, 支持向量机可以有效地优化代理缓存的使用, 具有良好的性能。

参考文献

[1]郎宇宁, 蔺娟如.基于支持向量机的多分类方法研究[J].中国西部科技, 2010 (17) .

[2]刘成忠.两种不确定支持向量机分类性能的对比研究[J].计算机技术与发展, 2011 (11) .

[3]张松兰.支持向量机的算法及应用综述[J].江苏理工学院学报, 2016 (02) .

网络缓存技术的应用研究 篇5

据业内权威统计, 2010年全球每月网络数据流量达到20EB;到2015年, 这个数值将达到81EB, 是5年前的4倍, 且其中61%为视频数据, 这预示着互联网洪水时代即将来临。一味的提高带宽从高额的带宽费用角度来考虑, 很多企业也承受不起。而很多企业利用流量控制软件虽然能缓解网络瘫痪的问题, 但是还是不能满足用户对网络下载高流量的需求。

当今互联网络的发展从2000~2005年的“互联互通”阶段 (保证基本的网页浏览、通信工具的使用、电子邮件的收发等简单的联通发展) 走向2005~2010年的“应用成长”阶段 (网络游戏的趋势型扩张、数字办公OA技术等多种网络软件的应用发展) , 直到2010~2015年的“注重体验”阶段 (包括视频体验、特别是移动通信设备的视频体验包括Ipad、Iphone等移动设备的网络视频体验需求) , 网络视频正以大容量、大规模的数据形式出现在网络流量中最耗费网络带宽的部分。这导致网络带宽的增长速度远远低于用户的需求, 网络建设的成本不堪重负。

为了缓解网络带宽的压力、应用网络数据的快速增长, 我们希望利用网络缓存技术在未来解决我们“网络体验”阶段所面临的难题。

二、网络缓存技术应用的几种方法

(一) 热点数据统计法。

通过对定期校园网内的下载数据资料进行统计分析发现这些数据中近45%~68%的部分是相同的数据内容, 我们把这部分相同的数据资料称为热点数据, 如果把热点数据保存至内网服务器, 用户需要下载这部分数据时直接从内网下载, 就可以有效地节省理论统计上的带宽了。我们可以看出网络缓存的性能跟热点数据的命中率成正比关系, 热点数据命中率越高, 网络缓存性能越高, 所以要提升缓存的性能就必须为缓存选择合适的算法来提高热点数据命中率。由于服务器可以保存的热点数据容量是有限的, 及时地更新热点数据使之最大效应化, 需要利用热点数据淘汰算法, 目前使用最多的有两种算法:最近最少访问算法 (Least Recently Used, LRU) , 这种算法连续地检测数据访问, 识别出长时间没有被访问到的热点数据。LRU直接释放掉这些数据或者标记它们为可重用。这种算法基于这样一种假设:如果一个热点数据已经很久没有被访问下载, 那么很可能以后它也不会被访问。最近访问算法 (Most Recently Used, MRU) , 这种算法与LRU相反。在MRU算法中, 最近被使用的热点数据将被释放或标记为可重用。这种算法基于的假设是:如果一个热点数据已经被下载过了, 那么在之后的一段时间内它可能不会再被访问。通过以上两种算法可以及时地淘汰和更新网络缓存中的热点数据。

(二) 主动缓存法。

在校园网的数据访问统计分析中, 我们发现其中占网络热点数据百分比最大的数据资料内容是电视网络视频资源, 这些文件通常容量较大, 下载所需时间较长, 多人在线观看视频会严重影响校园网络的带宽, 导致网络速度缓慢、甚至瘫痪。我们可以通过主动缓存的方式在夜间上网用户数量较少、热点服务器下载外网网络数据任务不重的时间段, 让网络缓存服务器主动下载一些访问量高的主流视频网站 (如优酷、迅雷、土豆等) 上的点击率高、排行榜靠前的热门电影、热门视频, 这样在白天用户访问的时候就可以直接从热点服务器上访问了, 从而缓解了校园网络带宽的压力和热点数据服务器的下载负担。

(三) 视频切片法。

前面我们提到, 很多用户在访问视频的时候可以从网络热点服务器上下载来节省带宽, 面对更多的用户数时, 完整地提供整部电影或视频也会对热点服务器造成带宽压力, 可是用户很多时候不能观看完一部完整的视频就会中止观看, 如果我们把网络中的视频A切成若干分片, 在用户访问的时候根据用户需要, 只下载当前用户所需的相应分片内容可以有效地节省带宽, 缓解热点服务器的压力。

(四) 网络缓存的内容更新。

如何保证热点服务器的数据和当前网络中的数据是一致的是网络缓存技术的重要一环, 也是确保数据一致性和及时性的要求。在每次有用户发出网络资源申请时, 热点数据服务器在检查自己包含用户所需的资源时, 会首先和外网服务器的资源进行数据比对 (对数据包包头进行数据检查) , 如果一致则由内网缓存服务器向用户提供资源, 如果不一致则首先由热点服务器从外网服务器下载所需资源进行更新后, 再向用户提供所申请的资源。

(五) 网络缓存的内容管理。

通过热点服务器备份网络资源。随着时间的迁移, 服务器的容量会达到饱和状态, 如何放入更新的资源替换哪些已经不会或很少被访问的数据资源是非热点资源清理的任务。非热点资源清理通过热点数据淘汰算法来实现, 它执行的条件是:当热点服务器硬盘容量达到既定阀值 (如85%) , 我们就要把热点最低、存放时间最久、最近下载次数最少的数据资源删除, 直至清理出5%的硬盘空间。

(六) 网络缓存的设备扩容。

我们可以对多台网络缓存设备进行扩容, 采用云模式进行部署, 以虚拟的方式从逻辑上形成一台网络缓存设备, 并进行负载均衡技术的加载使得数据可以通过多通道的形式进行传输, 缓解单线的网络数据流量压力。

三、结语

网络缓存技术是一个在未来有着重要研究价值的领域, 现在很多网络设备厂商都在积极地研究相应的网络缓存设备来迎接互联网的洪水时代, 用少量的资本投入就可以得到更稳定、高效的网络带宽, 是网络互联网时代的需求。本文针对网络缓存技术中对热点数据的提出, 通过自动缓存、视频切片、内容更新、非热点数据资源清理等方法提出了对未来网络缓存技术发展、缓存设备开发、网络缓存技术应用的新思路。

参考文献

[1].G.Somasundaram Alok Shrivastava.信息存储与管理[M].北京:人民邮电出版社, 2010

存储领域缓存技术的现状 篇6

在存储系统中,缓存主要用作平滑两级系统之间的性能差异。一般地,在缓存系统中,上层介质的性能高,但价格高、容量小;下层介质的性能低,但价格低、容量大。如果整个缓存系统的命中率较高,那么系统作为整体就能够以较便宜介质的价格,获得较高性能介质的性能和较大容量介质的容量。

缓存用途广泛,主要分为以下几种:

(1)CPU缓存:CPU配有一个或多个缓存,每个缓存都有特殊的用途。例如,用作数据缓存(D-cache)和指令缓存 (I-cache)等。CPU内的缓存,比大容量主存的操作速度要快很多,但容量小得多,目前高端的Intel Xeon E5家族处理器缓存容 量高达45MB,但桌面处 理器的缓 存一般小 于10MB。

(2)页表缓存(Translation Lookaside Bufler,TLB):从主存获取页表项的内存管理单元(Memory Management Unit,MMU)有一个专用的缓存,位于CPU内部、用于加快虚拟地址到物理地址的转换速度,该缓存即页表缓存(TLB)。

(3)磁盘缓存:CPU缓存通常情况是由硬件管理的,也有种类繁多的缓存是由软件管理。磁盘缓存是用于加速磁盘I/O的缓存,并非特指以磁盘为缓存介质的缓存。在主存中的页缓存(page cache)即磁盘缓存的一个例子,该缓存是由内核系统管理。由于缓存容量相对于硬盘的容量较小,因而重复的缓存命中情况相对较少。当然,一个快速的本地磁盘也能缓存相对较慢速的数据存储设备里的信息,例如远程服务器 (Web缓存)、本地磁盘驱动或者光盘库,这就是分级存储管理的主要思想。传统的快速本地磁盘一般是SAS(Serial Attached SCSI)或SATA(Serial ATA)接口的机械硬盘。SAS硬盘容量相对小,而SATA硬盘读写较慢。近年来固态硬盘(Solid State Drives,SSD)技术的逐渐成熟为缓存容量和性能带来巨大的突破, 相对于内存,容量大、价格低;相对于机械硬盘,性能高,因此受到了越来越多的青睐。

(4)Web缓存:Web浏览器、HTTP代理服务器、内容分发网络(Content Delivery Network,CDN)采用Web缓存存储来自远程Web服务器的响应信息,例如静态网页和图片。由于Web缓存中存储信息时往往是热数据,常被重复请求(如访问量极大的门户网站),因而Web缓存减少了大量的广域网络传输,降低了网络带宽的占用,同时也降低了原始Web服务器的压力,提高了网络服务的响应质量。Web浏览器采用内置缓存,一些网络服务提供商或者机构也会采用缓存代理服务器,缓存代理服务器即网络用户共享的一种Web缓存。另一种形式的缓存是P2P缓存,P2P网络有两种缓存形式以加速P2P传输,一种是热数据存放在ISP缓存中,另一种是文件以副本形式缓存在P2P的多个节点中,某个节点请求文件时可就近读取,使得P2P社区实现P2P加速功能。

(5)其他缓存:1DNS(Domain Name Server)服务器缓存域名到IP地址的映射表。2搜索引擎以网页快照的形式缓存搜索过的页面。例如Google为每个搜索结果提供一个“缓存”链接,当原始链接暂时或者永久不可用时,“缓存”链接的作用就凸显了。3分布式缓存,包括合作式缓存,运用多个本地或不同的地理区域的节点为应用提供高可扩展性、高可靠性、高可用和高性能。

1缓存替换算法

缓存替换算法为了提高缓存数据访问命中率,每次从缓存空间中替换再次被访问概率最低的数据块。 不同的替换算法基于不同的方法评估数据块的再次访问概率。根据热度评价方法的不同,我们将现有缓存替换算法分为三类:

1.1基于历史访问信息

该类替换算法利用单个数据块的历史访问信息(Block Access History)评价数据访问热度。基本的热度评价指标有热度(Recency)和频度(Frequency)两种,二者分别对应于LRU(Least Recently Used)和LFU(Least Frequently Used)两种替换算法。LRU算法基于栈式模型(Stack Model)[2],它根据数据块距离上一次访问间距衡量数据块的访问热度;LFU算法基于概率分布模型(Probabilistic Model)[2],它根据数据块的访问频度来衡量数据访问热度。然而不论是栈式模型还是概率分布模型都有其各自局限性[3],因此目前高级替换算法在设计上都兼顾了这两种基本热度评价影响因素,其中最为典型的是ARC(Adaptive Replacement Cache)算法[3],该算法能够以在线自适应方式调节热度评价方法中热度和频度所占比例,从而适用于不同的数据访问模式 类型。目前这类 典型的算 法有:LRU、LFU、MRU[2]、LRU-K[4]、2Q[5]、LRFU[6]、 MQ[7]、LIRS[8]和ARC。

基于历史访问信息类算法(又称经典替换算法)的优点在于热度评价方法在实际应用中开销低。目前, 该类算法被广泛应用于各级I/O系统的缓存管理,例如Flashcache[9]和EnhanceIO[10]等等。而这类算法的缺点同样明显,即算法的性能取决于应用的数据访问模式特点,且同一种算法不能够高效地适用于各种不同类型的数据访问模式。

1.2基于访问模式分类

针对经典替换算法的非普适性问题,该类算法假定任何复杂的应用数据访问模式 (Data Access Pattern)都是由若干个并发执行计算流的数据访问模式所构成,而每个计算流又都具有相对稳定且简单的数据访问模式[11]。基于上述假设,该类算法的基本原理如下:

( 1 ) 模式分类 : 根据计算流的不同将应用数据访问负载在线划分为若干数据访问子集 。

( 2 ) 模式识别 : 在线识别数据访问子集的具体数据访问模式类型 。

(3)模式管理:将已识别类型的数据访问子集划归入不同的模式分区中,并为各模式分区配置适用的替换算法。现有研究中定义了四种基本模式类型:循环、随机、概率分布和扫描,与之适用的算法则分别为MRU、LRU、LFU和FIFO。

(4)容量调节:根据不同模式分区的缓存收益调节分区间的缓存资源分配。由于模式类型的相对简单, 现有研究基本采用基于先验公式的非线性按效调节方法[12];

目前这类算法的典型代表有MG-XY[13]、UBM[12]、ULC[14]、PCC[11]、AMP[15]等。这些算法之间的主要区别在于对计算流的区分,例如UBM是以应用作为基本计算流,PCC则以程序中的I/O访问点作为基本计算流。这类算法的优点在于:由于利用了数据访问模式信息指导数据替换,因此在理论上具有较经典替换算法更高的可优化空间;其缺点在于:模式分类探测在实际应用中所带来的开销较大。

1.3基于数据关联语义分类

该类算法利用诸如数据挖掘等交叉学科方法[16]探测出应用数据访问中所潜在的数据关联语义(Data Correlation Semantics)。在已有相关研究中,数据关联语义具体表现在以下两方面:

(1)频繁访问序列:指应用I/O负载中出现的访问子序列(Frequent Access Sequence)[17],简称频繁序列。利用从应用I/O负载中挖掘得到的频繁序列可以指导缓存技术在替换算法、数据预取和数据副本三方面的优化[18],其中替换算法和数据预取的优化通常是结合在一起的:处理数据替换时将频繁序列中的缓存数据组作为整体优先进行替换(替换算法优化);而在处理数据失效时对失效数据所在频繁序列中的其他数据连同失效数据一起读取(预取策略优化)。显而易见,在结合了数据预取技术后,频繁序列中数据失效代价要显著低于其他离散随机访问数据。目前有代表性的相关研究成果有C-Miner[16]、C-Miner*[19]和DULO[20]。其中C-Miner和C-Miner*利用经典数据挖掘技术发现数据访问中的非线性序列,DULO则利用传统页表跟踪技术(Page Table Tracking)[2]探测数据访问中的线性访问序列。由于时空开销、上级缓存过滤、并发、噪声等方面影响,数据挖掘技术可以获得的频繁序列一般较短。

(2)应用数据语义:指数据的内容和数据访问操作所蕴含的应用管理语义。利用该应用数据语义可以用于智能化的缓存资源使用。目前该类研究主要针对两级缓存架构下的聚合缓存空间利用率问题[21],即如何利用一级缓存失效数据所蕴含的应用管理语义来指导二级缓存空间的管理,以避免两级缓存空间的无效数据冗余[22]。例如X-Ray系统[23]根据Ext2文件系统布局信息[24]识别出主机I/O负载中的元数据更新操作(如inode访问和更新);通过对元数据内容的分析来探测出一级缓存中当前活跃的访问数据;通过优先从二级缓存中替换出一级缓存中的数据,提高磁盘阵列缓存和主机内所构成的两级缓存架构下的聚合空间利用率。目前有代表性的相关研究成果有[21,23,25,26]。内存层缓存去冗理论效果良好,但由于现有的SSD缓存具有比内存高两个数据量级以上的缓存容量,因此对于SSD缓存的内容去冗意义不大。

2缓存一致性

数据一致性对于启用缓存的分布式系统而言是一个重大问题,因为缓存的数据可能过时,是否支持不同节点每次读到数据的最新版,涉及数据的一致性模型选择。

存储一致性模型是系统设计者与应用程序员之间的一种约定。缓存一致性模型可分为顺序相关与时间相关两大类,顺序相关的一致性模型主要用在多处理器环境下的分布式内存系统;而时间相关的一致性模型主要用在多节点下的分布式存储(文件系统级或块设备级)系统。

对顺序相关的一致性模型有两大类:强一致性模型与弱一致性模型。在强一致性模型下,不使用同步操作;在弱一致性模型下,对共享变量的访问需要加锁。

对时间相关的一致性模型也有强一致性与弱一致性区别,但定义相对简单:上层应用能读到数据的最新版即属强一致性,否则属弱一致性。但弱一致性亦有细分,例如,Yahoo的分布式数据平台PNUTS[27]提供比最弱的最终一致性稍强的版本一致性,数据更新带有版本号,用户可读取任意版本、指定版本或最新版本。强一致性一般仅适用于本地系统;对于基于本地局域网络、甚至广域网络,维持强一致性往往导致系统整体性能过低。因此,在实际系统中,根据应用需求,采用不同级别的缓存一致性。例如,在文件系统层,就数据大小而言,文件元数据往往远小于文件数据,因此,带缓存的基于网络的文件系统,文件数据可采用弱一致性,而文件元数据可根据应用场景为局域网络还是广域网络采用强一致性或超时失效的弱一致性。几种常见的一致性模型:

(1)严格一致性(Strict Consistency)[28]:严格一致性模型保证所有最近写入能被系统的其他节点或处理器感知,因此,需要产生更多的消息交互以维持此级别的一致性,从而导致时延增大。对于单节点、单CPU系统,缓存总是严格一致的。

(2)顺序一致性(Sequential Consistency)[29]:所有处理器或节点以相同的顺序看到所有数据的修改。 读操作未必能及时得到此前其他处理器或节点对同一数据的写更新,但是各处理器或节点读到的该数据的不同值的顺序是一致的;

(3)处理器一致性(Processor Consistency)[30]:允许某一个处理器或节点可观察到来自其他各处理器或节点的写入的顺序,但可以不按其实际发生的时间顺序出现。若来自某一个处理器或节点内的多个写入, 必须按顺序出现。在这种一致性下,只要能读到数据即可而不要求数据必须是最新的,因此,提高了系统性能。处理器一致性与先入先出序列FIFO(First Input First Output)一致性意思相同。

(4)因果一致性(Casual Consistency)[31]:因果相关的写操作应对所有进程可见,且顺序一致。但并发写操作在不同机器看来顺序是不同的。因果一致性相比较于顺序一致性,放松了约束条件。

(5)宽松一致性(Relaxed Consistency):宽松一致性又称弱一致性(weak consistency)[32],其不需要其他节点观察到本节点对共享变量所作的所有修改,仅在同步阶段完成后,最后的修改对其他节点可见。

(6)最终一致性(eventual consistency)[33]:最终一致性与时间相关。在没有持续更新的情况下,更新最终会传播到所有节点,各节点数据最终会一致。最终一致性适用于对数据一致性要求不高的场合,例如, Amazon Dynamo系统[34]的购物车服务。

3区分服务

在多应用存储环境下,缓存系统需要同时向多种不同类型的应用提供缓存数据服务,这些不同类型的应用通常又具有各自不同的数据访问模式特点。

大多数传统的缓存系统没有实现服务区分,例如Flashcache等。应用数据访问模式的不同将直接导致传统基于单一替换算法(全局替换算法)的缓存性能低下,其具体问题在于:

(1)非最优资源配置:传统缓存系统[35]所采用的全局替换方式实质是基于需求原则进行缓存资源的分配[36]。在基于需求分配原则下,每个应用的实际缓存容量正比于它对缓存的需求强度。然而,在存储系统中应用的缓存需求强度往往和它的数据访问局部性强弱成反比。这样从缓存收益的角度来看,传统缓存系统被用于多应用存储系统时往往是将更多的缓存资源分配给了系统中的低收益缓存应用。

(2)非高效资源利用:缓存资源的利用率取决于替换算法,对于应用数据访问模式的适用性。然而,同一种替换算法无法高效地适用于各种不同类型的应用数据访问模式[37]。这样传统缓存系统中的单一全局替换算法也就无法适用于多应用存储系统中各种不同类型的应用数据访问模式。

(3)非应用性能隔离:应用性能取决于存储系统的服务质量。在多应用存储系统中,传统缓存不区分应用,对于不同的应用的处理方式是相同的,它们共享缓存空间、I/O带宽等资源。不同类型的应用相互干扰, 原来单一访问模式下性能较好的应用会受到单一模式下性能较差的应用的干扰,缓存效果降低,进而导致性能降低。

目前实现区分服务的缓存系统主要运用于集中存储环 境下,以及虚拟机环境下 (如S-CAVE[38]和vCacheShare[39])。区分不同应用的标准分为以下三种:

(1)基于优先级原则:在存储应用模式下,不同类型的应用通常具有不同的性能需求。例如,当人机交互类应用(在线事务处理和信息检索等)和批处理类应用(数据备份)共享后端存储系统时,前者对I/O处理延迟有较高要求,而后者对I/O吞吐率有较高要求,其中I/O处理延迟受存储系统中的缓存性能影响较大; 而I/O吞吐率则更多取决于存储系统中磁盘子系统的物理I/O性能。由此可知,在上述应用模式下,若为人机交互类应用提供优先缓存服务,则可以在不影响批处理类应用性能前提下有效改善人机交互类应用的性能。

(2)基于需求原则:基于需求的缓存分配方法原则上为缓存需求强度高的应用分配更多的缓存资源。 在集中存储应用模式下,由于应用数据访问模式的不同,基于需求原则的缓存分配方式,将导致系统缓存资源的低效分配。

(3)基于效用原则:效用的缓存资源分配方式原则上为缓存收益高的应用分配更多的缓存资源。不同的效用分配方法通常采用不同形式的效用定义,而效用定义的精度直接影响着资源分配方法的实际应用效果。有效用标准:缓存命中率(hit ratio)、缓存失效率(miss ratio)、缓存有效利用率(rECS)[38]、服务响应时间(QoS)等等。

4典型缓存技术应用

(1)NFS客户端缓存:网络文件系统(Network File System,NFS)[22,40]实现了一种可以让一台计算机通过网络透明地访问另一台计算机上文件的协议,它由SUN公司在20世纪80年代中期研发。NFS利用客户端的内存作为缓存,以文件为基本单元进行缓存,并提供比较弱的数据一致性。

(2)Coda文件系统:Coda文件系统[41,42]是在AFS[42]的基础上针对移动计算环境设计的分布式文件系统,相比于AFS,Coda更注重系统的可用性。Coda在客户端采用本地磁盘作为数据缓存介质,它对网络断开后客户端的行为进行了深入的研究,提出了断开操作(disconnect operation)[42],使得客户端在Coda服务器失效时仍然可以访问关键数据。Coda系统以Volume为单位,把数据映射到独立的文件服务器上,每个客户端通过cache管理器(Venus)动态获取和缓存Volume映射信息。当客户端检测到它与服务器的连接断开后,文件系统服务的请求完全由本地缓存满足,从而允许用户完全在客户端缓存的支持下工作。当缓存不命中时,Coda系统则会向上层应用报错。

(3)DCD系统:DCD(Disk Caching Disk)[43,44]是一种提高“频繁小写”这类应用模式性能的廉价解决方案。其主要思想是:利用普通磁盘的顺序写性能远高于随机写这一特点,将突发性的随机小写以顺序日志的形式记录在缓存磁盘上,当系统空闲时再把这些写入的数据迁移到数据盘。当有写请求时,系统首先检查该请求的大小,如果大于一个预先设定的阈值,则说明该请求的顺序性原本就比较强,于是系统将该写请求直接转发到数据盘;否则,系统先将该写请求写入到内存中的缓冲区(RAM Buffer),若RAM Buffer被写满,再使用日志的形式写到“缓存盘”上。由于日志是顺序写模式,因此,DCD系统在吸收突发性的写请求方面效果很好。

(4)S-CAVE缓存技术:S-CAVE是实现于vSphere ESX中的一种基于管理程序的共享SSD缓存技术,主要用于有效地管理多虚拟机环境下的共享SSD缓存。S-CAVE使用缓存有效利用率(rECS)作为每个虚拟机对缓存的需求指标,并且使用rECS集成一种动态缓存分区机制,在多虚拟机环境下高效地管理缓存。通过比较每个虚拟机缓存空间分配的历史信息,动态地调整缓存空间的分配。S-CAVE在虚拟机运行中,动态地统计每个虚拟机的缓存有效利用率(rECS),并对所有虚拟机的rECS进行排序,为最高rECS值的虚拟机增加缓存空间,为最低rECs值得虚拟机缩减缓存空间。S-CAVE采用写穿(write through)的缓存写策略,适用读多写少的应用。

(5)vCacheShare缓存技术:虚拟化环境中越来越多地采用服务器缓存(SFC,Server Flash Cache)用于I/O加速。在多虚拟机环境中,每个虚拟机的缓存空间分配都是由管理者负责。vCacheShare技术提供了一种动态、能感知负载、策略驱动的缓存框架,持续并且自动地优化SFC空间的划分。vCacheShare的决策是基于多I/O的访问特性的,它采用一个缓存效用模块捕获长期的局部性行为和瞬间的局部峰值。vCacheShare实现于广泛运用的ESXi管理程序中。其与S-CAVE不同,vCacheShare需要考虑的因素包括:虚拟机的优先级、负载的局部性、I/O访问特性、后端设备的服务时间以及一些特殊事件(例如迁移)。影响因子较多,算法相对复杂。vCacheShare实现的缓存写策略是写旁路(write around),同样适用于读多写少的应用。

(6)典型缓存技术应用比较:表1列出了对上述典型的缓存技术应用进行了比较和分析,比较范围包括缓存介质、策略扩展支持、区分服务支持以及系统部署灵活性这四个维度。

通过表1可以看出:非内存类缓存介质正在受到越来越多的关注,主要是因为需要缓存的数据量越来越大,而且随着数据持久性要求越来越高,具有较大容量的非易失性缓存介质受到越来越多的关注。缓存系统目前存在的问题:

(1)不能有效支持多应用共享缓存资源:大部分缓存系统并没有提供一种机制来区分不同的服务质量需求。因此,缓存系统无法针对各类应用合理地配置缓存资源,无法发挥出全局最优性能。

(2)策略可扩展性较差:大多数系统策略比较固定单一,当有针对新应用的策略产生时,无法添加到系统中。虽然有的系统可以支持新策略的添加,但是也仅限于简单策略的添加,当策略较为复杂时,缓存系统无法提供充分的支持。

(3)系统部署不灵活:一些缓存系统或者与文件系统绑定,或者与具体的协议绑定,这就导致了这些缓存系统不能灵活的部署到I/O路径上的各个位置。

5结束语

缓存技术是提高计算机系统性能的重要手段之一,其基本思想:利用数据访问的局部性原理[45],有效减少访问低速介质的次数,提高计算机系统的整体性能。缓存技术从几方面提高了存储系统的I/O性能:

(1)直接从高速介质中获取数据:由于缓存介质相对于下级设备存储介质的性能更高,因此,整个系统在缓存命中率较高时,其所请求的数据主要从性能较高的缓存介质中取得,大大减少了对下级低速介质的I/O操作,从而能够能有效地降低数据访问的延迟。

(2)减轻下级存储设备负载:缓存命中将会使得系统直接访问缓存设备取得待访问的数据,这显然减轻了针对下级存储设备的负载。研究[46]表明,磁盘类存储设备在负载较轻时的I/O性能要明显优于其在负载较重时的性能。由于缓存系统减轻了下级存储设备的负载,因此在缓存失效而必须访问下级存储设备时, 存储系统的整体性能也能得到有效的改善。

(3)改善下级存储设备的工作负载模式:缓存的过滤效应[20,47,48]能够有效地改善下级存储设备的工作负载模式,预取和回写操作通过大读和聚合写技术可以有效地增强下级存储设备工作负载的顺序性[49],从而减少、甚至避免了随机这一类对下级存储不利的工作负载模式,提高了存储系统的性能。

缓存和通道联合技术的应用 篇7

关键词:apt-cacher,bonding,缓存,负载均衡

1. 引言

在当前的网络环境中,虽然网络技术不断发展,但是带宽资源还是非常有限的。随着网络应用的进一步扩大,带宽要求越来越高,特别是在高校中,由于扩招、数字化校园建设等因素,学生人数越来越多,网络应用越来越深入,校园网络出口带宽不能满足需求。尤其当基于debian的linux发行版更新时,大量用户同时更新,压力就很明显。仅通过增加出口带宽不仅成本高,而且无法长时间满足用户对带宽的需求。通过基于linux的apt-cacher技术、通道联合技术,把软件仓库缓存到校园网内部,可以减轻网络出口并发流量的压力,把出口带宽留给数字化校园建设中重要的网络应用。

2. apt-cacher技术

随着linux技术的发展,各个linux发行版都建有自己的软件仓库,使得用户可以便捷地获取软件及相关更新。在debian linux快速发展的同时,管理软件仓库的apt包管理工具也出现了,通过该工具用户在获取软件时无须考虑软件包依赖的问题,极大减轻了用户的负担,降低了linux的入门门槛。apt-cacher是基于apt技术和apache web服务器,利用perl脚本实现的。只要有用户通过它获取一次软件,它就会把获取过的软件包缓存到本地服务器,当其他用户再次获取该软件包时,apt-cacher会根据软件包的头文件、上一次的下载时间等条件进行验证,如果符合就直接返回本地软件包给用户,否则则通过本地服务器获取最新的软件包。这样可以减少软件包重复下载而造成的带宽浪费,也不会因为缓存时间较长而导致用户无法获取较新的软件包。apt-cacher服务器还可以通过导入新发行版光盘中的软件包,即时获得较多的软件包缓存,减少第一个利用它升级系统的用户所需要等待的时间。该技术通用性强,可以用于任何基于debian的linux发行版的软件仓库。

3. 与本地软件仓库相比

本地软件仓库是在一定时间间隔内把官方的软件仓库做一次镜像。因此本地软件仓库存放着大量软件,所占空间需要上百GB或更多,在更新时需要占用大量带宽和时间。校园网用户所使用的linux系统和所需要的软件很大部分是一样的,因此制作完整的本地软件仓库是与减轻网络出口并发流量压力的目的是相悖的。apt-cacher是根据用户的需求而缓存下载过的软件包,减少了存储空间,并较大程度上地减少了同步大量的软件包所产生的网络压力和消耗的时间。

4. 通道联合技术

通过apt-cacher技术缓存软件包到本地仅减轻了网络出口的带宽压力,由于用户数较大,还需要在apt-cacher缓存服务器上使用通道联合(bonding)技术。联合服务器上两个或以上的网络接口,增加服务器的网络带宽和冗余,以便达到负载均衡,避免在新发行版发行时大量用户升级出现堵塞。

通道联合技术有7种策略:(1)轮询策略(Round-robin policy),模式代号是0。该策略是按照设备顺序依次传输数据包,直到最后一个设备。这种模式提供负载均衡和容错能力。(2)活动备份策略(Active-backup policy),模式代号是1。该策略只有一个设备处理数据,当它宕机的时候就会由备份代替,仅提供容错能力。(3)异或策略(XOR policy),模式代号是2。该策略是根据MAC地址异或运算的结果来选择传输设备,提供负载均衡和容错能力。(4)广播策略(Broadcast policy),模式代号是3。该策略通过全部设备来传输所有数据,提供容错能力。(5)IEEE 802.3ad动态链接聚合(IEEE802.3ad Dynamic link aggregation),模式代号是4。该策略通过创建聚合组来共享相同的传输速度,需要交换机也支持802.3ad模式,提供容错能力。(6)适配器传输负载均衡(Adaptive transmit load balancing),模式代号是5。该策略是根据当前的负载把发出的数据分给每一个设备,由当前使用的设备处理收到的数据。本策略的通道联合不需要专用的交换机支持,提供负载均衡和容错能力。(7)适配器负载均衡(Adaptive load balancing),模式代号是6。该策略在IPV4情况下包含适配器传输负载均衡策略,由ARP协商完成接收的负载,通道联合驱动程序截获ARP在本地系统发送出的请求,用其中一个设备的硬件地址覆盖从属设备的原地址。

5. 基于apt-cacher和通道联合技术的缓存平台应用

5.1 服务端设置

apt-cacher基于linux系统,对CPU要求不高,利用一台或多台装有两张或以上的网卡的机器就可以进行搭建。在这里,利用一台拥有两张千兆网卡、操作系统为基于debian的ubuntu server 9.10的linux服务器进行搭建。在服务器上以管理员权限执行以下命令:

sudo apt-get update

sudo apt-get install apache2

sudo apt-get install apt-cacher

sudo apt-get install ifenslave

安装好最新的apache web服务器、apt-cacher服务、bonding的通道联合工具。web服务器无需手动配置,在apt-cacher服务的安装过程中会自动对其进行配置。apt-cacher服务配置要点为:主要缓存仓库地址为http://debian.ustc.edu.cn/ubuntu/,缓存过期时间为6个月。这样设置是因为ubuntu linux易用性强,每6个月更新发行版一次,使用ubuntu桌面版作为桌面的用户占了我校linux用户的很大比例,可以使用其升级和更新的软件包为缓存主要对象;而且中国科学技术大学的仓库与ubuntu官方仓库同步时间间隔短,软件包齐全。

5.2 客户端设置

通道联合技术使用轮询策略,这个策略同时利用两个网卡进行并行传输,能提供更高的带宽,容错性强,而且这个策略应用时对其它网络设备没有特殊要求,部署容易,兼容性强,维护方便。

在ubuntu客户端中,只需要把/etc/apt/sources.list中原来的软件仓库地址改成http://apt-cacher服务器ip:3142debian.ustc.edu.cn/ubuntu/,或者通过修改/etc/apt/apt.conf.d/01proxy文件,把apt-cacher服务器设置成为客户端apt更新时所用的http代理,再进行软件更新即可。甚至可以进一步设置为自动更新。通过这个方案的应用,以相对较小的硬盘空间换取网络出口带宽的占用,可以减少网络出口带宽并发流量的压力,缩短下载软件包所需要的时间。

6. 结束语

本文针对校园网流量进行分析,根据用户需求来动态定制缓存服务。经过实践,该平台可以在较低成本的基础上减轻网络出口带宽的并发压力,提供稳定高效的网络服务。因此该方案是提高校园网带宽利用率的可行方法之一。

参考文献

[1]董春生.基于校园网的网络透明缓存系统的构建与实现[J].中国教育信息化:高教职教.2009.

[2]黄文枫.基于主动网络的缓存技术研究[D].西安:西安电子科技大学.2007.

上一篇:课外教学活动下一篇:语文板书艺术教学管理