分布式缓存技术

2024-10-30

分布式缓存技术(精选8篇)

分布式缓存技术 篇1

一、前言

在高访问量的web系统中,大量的请求会造成数据库访问的压力增大,并可能造成系统响应变慢并最终影响到用户体验。在系统设计中,增加硬件资源和应用节点的同时,进行缓存设计已经变的不可或缺。针对一些公用的、变化不大的、用户只读的数据采用缓存系统存储和访问,可以提高系统的性能,提供比RDB更高的TPS和扩展性。在技术和业务都可以接受的情况下,尽量把读写压力从数据库转移到缓存上,以保护看似强大其实却很脆弱的关系型数据库。商用的内存数据库或开源的分布式缓存系统都能不同程度的解决上述相关问题。

二、选型指标

2.1容量

这主要取决于要缓存的对象数量和单个对象的大小。一般来说,可以采用对象属性在内存中的存储长度简单加和的方法来计算单个对象的体积,再乘以缓存对象的数量和预期增长,大概得出需要使用的缓存空间。

2.2并发量

这里的缓存不是直接面向用户的,而只面向应用的,所以肯定不会有那个高的并发访问;所以我们关心一个缓存系统平均每秒能够承受多少的访问量。缓存系统能够支撑的并发量是一个非常重要的指标,如果它的性能还不如关系型数据库,那我们就没有使用的必要了。

不妨按照下边的方案来估算并发量:QPS=日PV×读写次数/PV÷总访问时间(秒为单位)。在计算出平均值之后,再乘以一个峰值系数,基本就可以得出你的缓存系统需要承受的最高QPS,一般情况下,这个系数定为10是合理的。

2.3响应时间

一般来说,要求一个缓存系统在1ms或2ms之内返回数据是合理的,当然前提是数据不会太大。大部分的缓存系统,由于是基于内存,所以响应时间都很短,但是问题一般会出现在数据量和QPS变大之后,由于内存管理策略、数据查找方式、I/O模型、业务场景等方面的差异,响应时间可能会差异很多,所以对于QPS和响应时间这两项指标,还要靠上线前充分的性能测试来进一步确认,不能只单纯的依赖官方的测试结果。

2.4使用成本

一般分布式缓存系统会包括服务端和客户端两部分,所以其使用成本上也要分为两个部分来讲:服务端,应能够方便部署和方便运维的,不需要高端硬件、不需要复杂的环境配置、不能有过多的依赖条件,同时还要稳定、易维护;客户端,则关系到程序员的开发效率和代码维护成本,基本有三点:单一的库依赖、简洁的配置和人性化的API。丰富的文档和技术支持也是必不可少的。

2.5扩展性

在空间不足的情况下,通过增加机器等方式快速的在线扩容。这也是能够支撑业务系统快速发展的一个重要因素。一般来讲,分布式缓存可以采用客户端和服务器端两种负载均衡策略。

2.6容灾

缓存系统的初衷是当数据请求量很大,数据库无法承受的情况,能够通过缓存来抵挡住大部分的请求流量,所以一旦缓存服务器发生故障,而缓存系统又没有一个很好的容灾措施的话,所有或部分的请求将会直接压到数据库上,这可能是我们所不能接受的。并不是所有的缓存系统都具有容灾特性的,所以我们在选择的时候,一定要根据自己的业务需求,对缓存数据的依赖程度来决定是否需要缓存系统的容灾特性。

三、常见分布式缓存系统比较

3.1 Memcached

Memcached更像一个单机的缓存系统,所以从这方面讲其容量上是限制的;但由于Memcached的开源,其访问协议也都是公开的,所以目前有很多第三方的客户端或扩展,在一定程度上对Memcached的集群扩展做了支持,但是大部分都只是做了一个简单Hash或者一致性Hash。

由于Memcached内部通过chunk链的方式去管理内存数据,实现很简洁,所以其读写性能都非常高,官方给出的数据,64KB对象的情况下,单机QPS可达到15w(估计是极限条件下)以上。

Memcached集群的多机之间是相互独立的,没有数据方面的通信,所以也不具备failover的能力,也无法在发生数据倾斜的时候进行自动调整

Memcached目前可支持C/C++、Java、C#、PHP、Python、Perl、Ruby等常用语言,也有大量的文档和示例代码可供参考,而且其稳定性也经过了长期的检验,应该说比较适合于中小型系统和初学者使用的缓存系统。

3.2 Redis

Redis也是比较流行的一个缓存系统,在国内外很多互联网公司都在使用(新浪微博等),很多人把Redis看成是Memcached的替代品。下面就简单介绍下Redis的一些特性。

Redis除了像Memcached那样支持普通的类型的存储外,还支持List、Set、Map等集合类型的存储,这种特性有时候在业务开发中会比较方便。

Redis源生支持持久化存储,但是根据很多人的使用情况和测试结果来看,Redis的持久化会造成性能迅速下降,甚至会相差一个数量级。

Redis支持Master-Slave集群模式,这种模式只在可用性方面有一定的提升,当主机宕机时,可以快速的切换到备机。

Redis支持订阅模式,即一个缓存对象发生变化时,所有订阅的客户端都会收到通知,这个特性在分布式缓存系统中是很少见的。

在扩展方面,Redis目前还没有成熟的方案,官方只给出了一个单机多实例部署的替代方案,并通过主备同步的模式进行扩容时的数据迁移,但是还是无法做到持续的线性扩容。

3.3淘宝Tair

Tair是一个Key/Value结构数据的解决方案,它默认支持基于内存和文件的两种存储方式,分别和我们通常所说的缓存和持久化存储对应。

Tair除了普通Key/Value系统提供的功能,比如get、put、delete以及批量接口外,还有一些附加的实用功能,使得其有更广的适用场景,包括:Version支持、原子计数器和Item支持。

Version支持:

Tair中的每个数据都包含版本号,版本号在每次更新后都会递增。这个特性有助于防止由于数据的并发更新导致的问题。比如,系统有一个value为“a,b,c”,A和B同时get到这个value。A执行操作,在后面添加一个d,value为“a,b,c,d”。B执行操作添加一个e,value为”a,b,c,e”。如果不加控制,无论A和B谁先更新成功,它的更新都会被后到的更新覆盖。Tair无法解决这个问题,但是引入了version机制避免这样的问题。还是拿刚才的例子,A和B取到数据,假设版本号为10,A先更新,更新成功后,value为”a,b,c,d”,与此同时,版本号会变为11。当B更新时,由于其基于的版本号是10,服务器会拒绝更新,从而避免A的更新被覆盖。B可以选择get新版本的value,然后在其基础上修改,也可以选择强行更新。

原子计数器:

Tair从服务器端支持原子的计数器操作,这使得Tair成为一个简单易用的分布式计数器。

Item支持:

Tair还支持将value视为一个item数组,对value中的部分item进行操作。比如有个key的value为[1,2,3,4,5],我们可以只获取前两个item,返回[1,2],也可以删除第一个item,还支持将数据删除,并返回被删除的数据,通过这个接口可以实现一个原子的分布式FIFO的队列。

Tair实现了缓存框架和缓存存储引擎的独立,在遵守接口规范的情况下,可以根据需求更换存储引擎,目前支持memcached、Redis和levelDB几种引擎;由于基于mdb和rdb,所以Tair能够兼具两者的特性,而且在并发量和响应时间上,也接近二者的裸系统。

3.4内存数据库

这里的内存数据库主要是指关系型内存数据库,如商用的有ExtremeDB、TimesTen、Altibase等。

一般来说,内存数据库使用场景可大致分为两种情况:一种是对数据计算实时性要求比较高,基于磁盘的数据库很难处理;同时又要依赖关系型数据库的一些特性,比如说排序、加合、复杂条件查询等等。这样的数据一般是临时的数据,生命周期比较短,计算完成或者是进程结束时即可丢弃;另一种是数据的访问量比较大,但是数据量却不大,这样即便丢失也可以很快的从持久化存储中把数据加载进内存。

但不管是在哪种场景中,存在于内存数据库中的数据都必须是相对独立的或者是只服务于读请求的,这样不需要复杂的数据同步处理。

下面简单介绍几种关系型内存数据库:

eXtremeDB:

eXtremeDB实时数据库是McObject公司的一款特别为实时与嵌入式系统数据管理而设计的数据库,只有50K到130K的开销,速度达到微秒级。eXtremeDB完全驻留在主内存中,不使用文件系统(包括内存盘)。eXtremeDB采用了新的磁盘融合技术,将内存拓展到磁盘,将磁盘当做虚拟内存来用,实时性能保持微秒级的同时,数据管理量在32BIT下能达到20G。

TimesTen:

TimesTen是Oracle从TimesTen公司收购的一个内存优化的关系数据库,它为应用程序提供了实时企业和行业(例如电信、资本市场和国防)所需的即时响应性和非常高的吞吐量。Oracle TimesTen可作为高速缓存或嵌入式数据库被部署在应用程序层中,它利用标准的SQL接口对完全位于物理内存中的数据存储区进行操作。

Altibase:

ALTIBASE公司从1999年起就一直致力于内存数据库软件和其应用的开发,提供高性能和高可用性的软件解决方案。特别适合通信、网上银行、证券交易、实时应用和嵌入式系统领域。目前占据80%以上内存数据库市场,可以说是当今数据库软件技术的领导者。目前Altibase在国内成功案例也比较多,尤其是在电信行业,已经得到了广泛认可。

四、小结

总之,随着云计算与Web 2.0的进一步发展,许多企业或组织时常会面对空前的需求:百万级的并发用户访问、每秒数以千计的并发事务处理、灵活的弹性与可伸缩性、低延时及7×24可用性等。传统事务型应用面临极限规模的并发事务处理,出现了极限事务处理型应用,典型的有铁路售票系统。如何在廉价的、标准化的硬件和软件平台之上,对大容量、业务关键型的事务处理应用提供良好的支撑。

分布式缓存技术作为一种关键的XTP技术,可为事务型应用提供高吞吐率、低延时的技术解决方案。其延迟写机制可提供更短的响应时间,同时极大地降低数据库的事务处理负载,分阶段事件驱动架构可以支持大规模、高并发的事务处理请求。此外,分布式缓存在内存中管理事务并提供数据的一致性保障,采用数据复制技术实现高可用性,具有较优的扩展性与性能组合。

分布式缓存技术 篇2

默认GemFire使用IP多播来发现新成员,然而所有成员间的通信都采用TCP。对于部署环境禁止使用IP多播或者网络跨越多个子网时,GemFire提供备用方法:使用轻量级的定位服务器(locator server)来追踪所有成员的连接。新成员加入集群时,将询问定位服务并建立类似于IP多播的socket到socket的TCP连接。

3.2数据分发

每个成员都会创建一个或多个缓存数据区域(data region),通过区域的划分,我们能给每个区域配置不同的分发属性、内存管理以及数据一致性模型。默认GemFire使用P2P分发模型,每个成员都能和其他任何成员通信。同时根据不同的内网特点,传输层可选TCP/IP或可靠多播(UDP)。在这些配置中,有两个属性很重要,范围(scope)和镜像类型(mirror-type)。

首先,范围(scope)有四种选项:

? Local:不分发。那为什么不直接保存到HashMap中。因为GemFire额外提供了数据自动持久化到磁盘、OQL(Object Query Language)查询数据、数据操作的事务等特性。

? Distribute-no-ack:发送数据给成员1,在发送数据给成员2时不等待成员1的响应。适用于对数据一致性要求不高,并要求低网络延迟的情况。这是GemFire的默认配置,能够提供低延迟、高吞吐,并通过尽快分发来降低数据冲突的概率。

? Distribute-ack:在发送给成员2前,发送数据并等待成员1的响应。这样每条数据都是同步分发的。

? Global:分发前在其他成员上获得锁,再分发数据。适用于悲观的应用场景,通过全局锁服务来管理锁的获得、释放和超时。

现在来看一下第二个重要的配置属性镜像类型(mirror-type):

? none:仅当缓存中有此数据时才更新,任何其他成员发来的新数据都会被忽略掉。适用于某一数据区域仅用来保存另一区域数据的子集。

? keys:数据区域仅保存key来节约内存,当真正有请求时再从其他区域抓取数据并保存到本地,之后接受对此数据项的更新。适用于无法预测哪些数据会被某一结点访问的情况。

? keys-values:真正的镜像,将保存全量数据。适用于需要立即访问所有数据的结点,以及数据冗余备份。

企业计算新看点:固态缓存技术 篇3

今天我们就来看看Fusion-io固态盘和固态缓存的数据传输原理吧!固态盘作为磁盘使用时,数据传输路径相对于其他磁盘没有改变,通常经过图1上部分所示的6个环节,不能简化数据传输过程。而图1下部分中的Fusion-io固态缓存可以大大简化数据传输路径、提高数据传输效率。同时,相对于固态盘,固态缓存的性能更接近于DRAM,比固态盘高出三个数量级,解决了应用性能瓶颈,最大限度减少了时间延迟,并可以同时保持高速度、低延迟读写性能。这正是保证应用软件操作性能的关键。

Fusion的直通式逻辑存储块映射可实现:

·低延迟带来的更快的应用加速

·更大程度的并行

·更好的读取/写入混合性能

·更低的复杂性

·更高的可靠性

·更低的成本

·更低的功耗

·更少的物理空间需求

此外,固态缓存的使用,可以大幅度的减少服务器、存储、应用软件和降低能耗。

下面是一个使用Fusion-io可以减少服务器和存储的实例。

Fusion-io固态缓存无可比拟的低能耗,使其成为企业及数据中心、高性能和云计算的首选。它能为用户在减少服务器、存储、应用软件和耗能而带来的总拥有成本的降低,使固态缓存对用户非常有吸引力。

Visual Studio 2010中国率先上市

2010年4月12日。微软公司宣布,全球最受欢迎的开发工具Visual Studio 2010在中国率先上市。新一代Visual Studlo 2010是微软云计算架构重要组成部分之一,它拥有强大的开发功能,支持开发者基于Windows Azure开发更多应用,从而进一步丰富微软的云计算平台。它的发布是微软迈向云计算架构的一个新的里程碑。Visual Studlo 2010还支持移动与嵌入式装置开发,实践当前最热门的Aaile/Scrum开发方法,并能充分发挥多核并行运算威力。它的推出将为开发者带来技术上的新机遇、实践上的新突破和创新上的新动力,帮助开发人员迎接云时代的更多机遇与挑战。此外,微软还于同日发布,NET Framework 4,并宣布高交互网页技术Siiverlight 4也将于近日发布。

协同QA进入国产化时代

最近,我国第一份由国家级行业协会发布的中国协同软件综合调查报告显示,中国市场上国产协同软件的影响力和竞争力已经超过国外同行,有15款国产协同OA和商务管理软件,得到该报告发布单位“中国电子商务协会CECA”的推荐。其中用友与致远台作的OA软件被评定为在同行中市场知名度最高,来自复旦大学的协达软件。以其最高的性能和最强的功能,获得产品竞争力第一的殊荣。同时其产品的美誉度也居同行首位。

Compuware新款Chanqepoint Accelerator

Compuware Corporatfon近日发布最新的ChanqepointAccelerator,旨在帮助科技公司通过产品和专业服务交付最佳实践快速获得他们的ChanqepoInt投资回报。全新的Accelerator解决方案提供针对产品规划、产品开发及服务交付的业经市场证明的最佳实践,包括易用且预配置的工作流程、仪表板、报告、指标数据等,从而帮助科技公司加快业绩增长、确保IT与业务之间的一致性并提高效率。

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

随着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.

分布式缓存技术 篇5

1.云计算概述

云计算这个名词随着计算机技术的全面发展而备受关注,其在学术界、商界、政府都得到了较大的肯定并成为了业界的热议话题。云计算可以将丰富的互联网资源联系起来形成全新的计算机模式。其使用的方便性、快捷性与经济性得到了企业的广泛关注,其对IT业影响巨大,不仅能减轻IT业工作的复杂性,还能促使IT业发展自己的核心业务。但目前云计算面临很大的安全问题,其安全问题也得到了人们的广泛关注。因为云计算的安全问题,很多企业对云计算系统产生了担忧,并有一部分企业打算终止对云计算的使用,比如2009年2月和7月亚马逊网络出现了瘫痪的问题,2009年3月谷歌的用户信息遭到泄露等,这些问题不得不使人们对云计算系统重新审视并高度重视其安全问题。

2.云计算环境下分布式缓存技术的现状及特点

2.1分布式缓存技术的结构

分布式缓存技术将互联网之间的服务器通过网状的连接方式连接起来,使数据通过多副本机制在互联网之间进行传输。分布式缓存系统采用的事无中心操作控制台即其可以在任何一个服务器上进行登录并能实现对全部数据的控制、对集群的访问及进行实时监控等,还可以通过操作维护台对集群软件进行统一配置和升级等。

2.2分布式缓存系统具有可靠性

互联网数据之所以能够得到广泛的认可和应用,是应为其数据具有可靠性,分布式缓存系统也具有高度的可靠性。数据缓存采用的是R、N、W原则,R为读取副本数,读取一定的副本才能认为读成功,N为数据副本数,W为所写副本数,写够一定数量的副本才算写成功。这三个量有一定的数据关系:当W+R>N时,可以认为系统中的数据是可靠地。其主要通过副本机来保证数据的可靠性。在R、N、W原则中,数据循环表由各节点的IP按大小组成,让第一个节点寻找其他活结点,并将其作为备用,在没有故障的情况下,协同器即为路由的第一个节点,如果协同器节点发生了故障,可以选择下一个活结点作为协同器,这样以此类推来保证数据的安全性与可靠性。

2.3分布式缓存系统具有扩展性

分布式缓存能实现数据的高扩展性,其通过增加数据服务节点和低延时的数据访问服务来增强数据的处理能力,且访问服务高度透明。例如,要扩充A点的数据,通过一定的命令可以将B上的数据直接添加到节点A中,实现数据的传输。分布式缓存系统的高扩展性可以大大的扩展节点空间,使数据空间得到最大化,这样方便数据的整合和数据的传输与储存。

2.4分布式缓存系统的性能特点

分布式缓存系统的高性能保证了数据的有效传输。其采用异步接口和同步接口来实现对数据的处理,同步接口在服务店执行返回命令后可以使客户端应用返回,异步接口则通过回调函数的方式来使应用打开。影响分布式缓存服务端口性能的因素有很多,比如,内存的组织访问形式,执行效率,线粒锁的粒度等都会影响其性能。分布式缓存的高性能能在反复的实验测试的过程中提高数据的实行效果。

2.5分布式缓存系统的数据能始终保持一致

分布式缓存系统通过控制数据值副本的一致性来实现的,即使数据传送的节点不同也能实现数据的一致。但在对数据进行操作时一定要确定整个副本版号的实际数据,来保证写入数据后其版本的最新性和一致性。在操作过程中,协同器要获取全部的副本数据,并通过检测副本数据的一致性来确定所读取数据的对错,并不断对版本进行更新,为下次使用做好准备。

3.云计算环境下分布式缓存技术面临的挑战

3.1缓存策略的方法及其管理面临挑战

缓存策略是根据不同的机器设备和应用环境有针对性的进行设计的,一般有一致策略和替换策略等,缓存适应机制的设立是为了进一步的补充和完善分布式缓存系统的服务性能,并进一步提高缓存系统的适应性。目前,分布式缓存策略面临两方面的问题和挑战,一是缓存系统的自适应问题,自适应是系统在更新后的一种内部调整模式,使其性能能很快的适应更新后的系统,而分布式缓存系统在自行进行更新后自适用能力不强,系统反应慢等问题时有发生。二是分布式缓存系统的管理问题,其主要是如何保证缓存系统中的数据与所传输的数据保持一致,并且不同的人对缓存内容进行应用后如何保持数据的一致性,而不被不同的人进行修改后数据发生变化,现在分布式缓存系统所面临的一个挑战是,不同的用户对缓存内容进行修改后,总以最后修改人的内容进行储存,其就改变了缓存内容的客观性和真实性,如何保证数据的客观与真实是现在缓存管理所面临的一个挑战。

3.2缓存服务性能面临挑战

分布式缓存系统会为很多客户服务,如果每个用户在不同的时段对分布式缓存系统进行应用的话,分布式缓存系统会很好的为其服务,并提供其所需要的数据内容。但当多个用户同时使用分布式缓存系统的时候就会出现信息被劫持的现象,即有些客户在数据库中找不到自己想要内容,资源被其他客户所霸占,所以,如何做到资源的合理分配与公平的共享及如何最大限度地提高资源的利用率,满足客户的实际需要是缓存服务器所面临的一个问题和挑战。

参考文献

[1]刘义,陈荦,景宁.基于R-树索引的MapReduce空间连接聚集操作[J].国防科技大学学报,2013,01(10):136-141.

分布式缓存技术 篇6

关键词:分布式缓存技术,海量数据,分布式内存数据管理,验证性测试

0 引言

随着云计算的发展,越来越多的企业都会搭建自己的云平台,同时越来越多的应用程序都是以云平台为支撑,为用户提供云服务。随着互联网上应用系统的访问用户增加、某些电子商务网站特定时间的促销活动而引发的特大规模的数据等等,使得云服务在普及推广的同时,数据访问量、访问速度、访问安全的需求都在急剧增加,而云计算的分布式处理、分布式数据库和云存储、虚拟化技术则为进行海量数据的分析处理提供了技术支持和基本保证。同时用户对云服务的数据提交及服务响应的时限要求也日渐提升,因而针对海量数据的数据库高并发访问的现实解决处理则需要立足于有关分布式缓存技术的先导性研究和关联式内容整合基础之上的。本文即围绕这一课题内容展开如下设计论述。

1 分布式缓存技术

分布式缓存技术可以解决数据库服务器和应用服务器之间的瓶颈问题,提高对数据的访问速度。分布式缓存的思想是分而治之,将数据分别布设到多个缓冲服务器上,使用缓存阵列路由协议,如此即使得多台缓存服务器形同一台,对外统一数据的访问接口,从而产生一种高效率无接缝式的缓存。

分布式缓存具有高性能、动态扩展性、易用性、高可用性、分布式代码执行等特点。而且为了解决大并发下的性能问题,同时避免过高的响应延迟,分布式缓存抛弃原始的关系型数据库,采用key/value形式存储数据,同时配以高速内存作为存储介质,这样可以保证系统的高性能性、动态可扩展性。不仅如此,分布式缓存又采用NRW多副本机制,避免缓存的单点故障问题,从而在提高数据访问速度的基础上,进一步保证数据的可靠性、最终数据一致性。分布式缓存系统还应实现数据冗余机制,藉此最终保证系统的安全性。

分布式key/value内存数据库大多通过在客户端充分发挥分布式逻辑功能来有效实现多种数据类型的分布式缓存,使用内存数据库可以显著提高数据访问速度及系统性能。常见的分布式key/value数据库内存缓存系统有Oracle Coherence、dbcached、IBM Web Sphere e Xtreme Scale、Redis、Memcached、Vmware Gemfire、Mem Cache[1]等。

1. 1 数据分区

数据分区中经常使用的就是一致性哈希算法。一致性哈希算法( Consistent Hashing) ,最早由麻省理工学院于1997 年提出,主要用于解决因特网中热点问题。时下,一致性哈希算法更多见于数据分布式技术中。分布式缓存中的一致性哈希算法的主要原理是: 计算出缓存服务器各个节点的哈希值,将其包含的所有缓存服务器节点抽象为一个环即哈希环,再将根据哈希函数计算出的缓存服务器哈希值分配到哈希环中,该环的数值域为0 ~ 232-1。然后对缓存的数据对象进行哈希计算,并分配到哈希环上。最后按顺时针方向将缓存数据对象映射到离其最近的缓存服务器节点上去。若增加或减少缓存服务器,则只需要局部改变该缓存服务器逆时针方向的缓存数据位置即可。

在缓存数据较少的情况下,数据对象可能无法均匀分布,而且缓存服务器集群里的服务器的性能和容量也可能未获统一,此时为了保证绝对的平衡,一致性哈希算法就相应引入了“虚拟节点”,一个物理的缓存服务器节点将根据自身性能对应了若干个“虚拟节点”,从而缓解物理服务节点少时数据倾斜等负载不均衡问题的发生,从而实现了数据的均匀分布[2,3]。

1. 2 分布式缓存的一致性

分布式缓存可以提高数据读取速度,降低数据读取延迟时间、减轻服务器负载压力,因而在整体上优化了系统可靠性; 虽然能够获得良好的读取性能,但在更新数据时却会存在重大的数据不一致的风险,由此而导致数据脏读等现象出现。为了保证客户端总能读到最新的数据,分布式缓存可以通过多副本机制( NRW) 和租约机制( Leases) 来支持实现分布式缓存数据的一致性; 而在达成此一目的过程中,分布式缓存系统却要因所采取的相应措施而支付一定的开销,这就可能降低系统的性能,所以即需要在系统的可靠性、高性能和数据一致性问题上取得综合权衡。综上可知,为解决数据一致性问题,就需要考虑数据读取/更新流程、数据同步、副本问题等。分布式系统中对于数据的存储将支持采用多副本机制,即采用多份数据副本存放在不同节点上,每个物理缓存服务器上存储自身的缓存数据以及其他节点的热备数据,读取或者更新数据时将需要对多个副本进行同时操作; 分布式缓存系统也提供了轮询操作,可以每隔一定时间轮询数据库,并在更新数据时进行数据同步,读取数据更新后的全新副本。

Quorum的NRW机制当中,N代表数据的所有副本数,R代表完成一次成功的读操作所需要读取的最小副本数,W代表完成一次写操作所需要写入的最小副本数。在NRW多副本机制中,只要满足R + W > N条件,就保证了数据不同副本中的一致性,因此R和W的设置是否合理则将影响系统的性能和数据的一致性,而Quorum机制却具备了更新数据时减少需要即刻完成的副本数,读取数据增加需要读取的副本数,即读写操作的平衡扩展功能,从而保证了系统性能的提高和数据的一致性[4]。

1. 3 分布式内存数据管理

Oracle Coherence是Oracle提供的一款适用于应用层的集群数据管理和分布式内存数据管理的现实理想解决方案。Coherence可以提供完善的读取性能、极低的延迟时间、高吞吐量、数据可靠性、100%的事务完整性、容错性、良好的动态可扩展性、持续的可用性、并行处理、支持锁和事务处理、自动代理服务和动态负载均衡和支持超级大容量的缓存等强大的功能。

对于由Coherence组成的缓存服务器集群,其集群的节点的地位不分主次,可以自动执行集群节点的检测和删除,节点之间采用P2P协议进行数据通信。Coherence能够实现集群管理,并提供各种缓存服务。数据存储在Coherence缓存当中,集群当中的每个节点都会备份全部数据,所以Coherence集群呈现有出众的可靠性,只要有一个节点能正常运行,就能保证系统不致瘫痪,但其缺点却是更新速度相对而言较差。

Coherence设有两个非常重要的配置文件,分别是: 缓存配置文件和运行配置文件。其中,缓存配置文件,用于配置缓存的类型及模式、缓存策略、服务的分配等信息。运行配置文件则用于缓存集群配置文件路径、日志配置文件路径、缓存数据配置文件路径,并进一步具体设定集群配置文件及集群的通信、服务机构组成等信息[5,6]。

2 分布式缓存模式设计

为了满足网站高并发访问,搭建一个由多台分布式缓存服务器组成的分布式缓存服务器集群,该集群结构采用无主架构,服务器节点地位不分主次,数据均匀分布在集群各服务器节点上,节点数越多,其数据处理能力也越强。分布式缓存服务器提供支持该缓存服务器通信协议的客户端,通过客户端可以与分布式缓存服务器进行通信以及相关操作。其现实通用的分布式缓存系统的部署设计则如图1 所示[5]。

由图1 可见,该分布式缓存部署设计的优势特点可做如下描述:

1) 将程序应用与缓存分开部署,缓存系统部署在缓存服务器集群上,可通过增加缓存服务器节点自动在线扩展集群规模,具有良好的可伸缩性。

2) 一般分布式缓存系统支撑多种语言客户端,在应用服务器上可以开发出丰富多样的应用程序客户端,并通过一致性哈希算法等路由算法将数据均匀分散到不同的缓存服务器节点上,而且自动在其它节点生成备份,或者选择不同的缓存服务器远程实现访问该缓存服务器上的数据。

3) 在缓存服务器集群中,若某缓存服务器节点故障则会自动启用其它节点的备份数据,保障服务器集群系统能正常运行。同样,可以根据需要动态增加或减少缓存服务器节点,提高资源利用率。

4) 在分布式缓存系统中,尽量只读缓存数据,因为缓存不适合大量写和更新操作。缓存系统在设计时尽量做到读写分离。

综合考虑分布式缓存的功能以及分布式内存数据的模型原理体系结构,通过zookeeper分布式服务协调机制获得了具体有效的整合,从而实现一个分布式缓存架构。分布式缓存整体架构图如图2 所示[7]。

3 分布式缓存数据处理系统的测试

分布式缓存技术已然广泛地应用在海量数据处理平台中,并且尤其着重支持高并发、高访问量、低延迟的读多更新少的数据处理系统。本文针对分布式缓存技术在海量数据处理平台中的应用测试则是以某团购网的查询功能作为实例背景而进行系统展开,并获取研究结果和结论的。

本次测试主要针对团购商品的模糊查询、规则引擎应用、订单查询等典型的使用分布式缓存的应用场景进行分布式缓存POC测试。测试的内容包括功能测试、性能测试和可靠性测试。

针对团购网实际使用场景,构造测试案例对Coherence进行功能、性能和可靠性测试。首先是测试环境的搭建,其中包括在机器的IP地址上建立服务器集群主控环境。本次测试采用一台Http服务器,两台分布式缓存服务器,而Http服务器端采用Java客户端进行测试,缓存服务器采用Oracle Coherence[8]。

1) 针对团购网的商品模糊查询为例进行POC测试,其测试的记录数为7 200 000,Cache实例数为40 * 2,每个实例Java heap size为2gb。查询的输入为: 并发数( 用户个数* 每个用户的读取次数) ,输出为: 平均每次读取的时间,实际查询的测试结果如表1 所示。其中CPU的最大使用率可达41%,而其平均使用率则为35%。

2) 针对分布式缓存系统环境进行可靠性测试,包括各缓存节点的数据恢复及数据完整性测试。首先进行测试的是针对无任何操作前提下,删除或者增加一个缓存实例,数据恢复所需要的时间,然后运行商品模糊查询测试时,数据恢复所需要的时间。测试结果如表2 所示。

可靠性的测试还包括缓存节点的完整性测试,可以通过并行删除多个缓存节点后,验证数据的完整性。通过POC测试可知: 该分布式缓存系统能满足应用要求以及符合系统性能要求,采用的分布式内存数据管理具备高可靠性和高扩展性,包含强大的容错特性和支持服务器自我修复的功能。

4 结束语

随着云计算的发展,通过物联网和互联网产生的数据呈几何级数增长,同时网上用户也在不断大幅度增加,随之而来的海量数据和用户高并发访问的问题对传统的缓存提出了挑战。针对这一状况,本文研究如何利用云计算下分布式缓存技术在海量数据处理平台中解决该问题,从而保证系统的高性能、高访问速度、低延迟和高可靠性。首先分析研究了分布式缓存的关键技术、缓存替换策略、分布式缓存的一致性和分布式内存数据管理。然后提出并论述了分布式缓存系统的部署和整体架构设计。最后将该分布式缓存系统的设计模式应用在某团购网上,并进行了POC测试,证明其可行性。

参考文献

[1]崔解宾.分布式内存缓存技术在数据处理平台中的研究与应用[D].北京:北京邮电大学,2015.

[2]黄菊.分布式缓存技术及其在车辆监控系统中的应用[D].北京:北京邮电大学,2015.

[3]张晓慧.试析云计算分布式缓存技术在物联网中的实施要点[J].计算机光盘软件与应用,2014(15):50-51.

[4]高洪,董振江.云计算分布式缓存技术及其在物联网中的应用[J].中兴通讯技术,2012,17(4):37-42.

[5]秦秀磊,张文博,魏峻,等.云计算环境下分布式缓存技术的现状与挑战[J].软件学报,2013,24(1):50-66.

[6]梁德锋.Oracle Coherence入门[Z].北京:百度文库,2010.

[7]李玉玲,张东旭,.虚拟现实环境下的分布式服务器架构策略研究[J/OL].计算机工程与应用,http://www.cnki.net/kcms/detail/11.2127.TP.20150313.1547.009.html.

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

据业内权威统计, 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

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

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

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

(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],从而减少、甚至避免了随机这一类对下级存储不利的工作负载模式,提高了存储系统的性能。

上一篇:高校财务管理体系下一篇:汉语式英语论文