一种缓存管理中同步版本方法和装置及其缓存管理系统转让专利

申请号 : CN201110041920.4

文献号 : CN102098344B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 司成祥许鲁孟晓烜刘振军韩晓明

申请人 : 中国科学院计算技术研究所

摘要 :

本发明提供一种网络存储中的缓存管理系统通过把本地节点写向缓存的数据备份到集群节点中的空闲网络缓存,来实现写缓存数据的高可靠性。采用“全局版本号+本地版本号+请求序号”的同步版本机制,同步调整全局版本号,异步调整本地版本号和请求序号,降低了节点之间的数据同步开销。而且主节点与备份节点通过在本地比较版本信息可以独自的将缓存数据写向后端存储系统,灵活有效的释放缓存资源;从而实现系统的高性能。

权利要求 :

1.一种缓存管理中同步版本方法,其中所述缓存管理将本地节点写向缓存的写请求数据备份到备份节点,其特征在于所述同步版本方法包括以下步骤:步骤1,判断全局同步时钟是否到时,如果到时,则在节点之间同步系统版本,使本地节点和备份节点的系统版本保持一致,所述系统版本包括全局版本号,本地版本号和请求序号,其中所述全局同步时钟是一个固定时间;

步骤2,判断本地同步时钟是否到时,如果到时,则在节点内调整系统版本,将所述系统版本的本地版本号增加1,请求序号初始化为0,而全局版本号保持不变,其中所述本地同步时钟是一个固定的短时间;

步骤3,在收到写请求时,将所述系统版本的请求序号增加1,并将写请求的开始版本赋值为当前的系统版本;其中,所述写请求的开始版本包括全局版本号,本地版本号和请求序号;

其中,所述全局同步时钟是所述本地同步时钟的n倍,n>0。

2.根据权利要求1所述的同步版本方法,其特征在于在所述步骤1中,所述在节点之间同步系统版本包括以下步骤:将系统版本的全局版本号增加1,本地版本号和请求序号初始化为0;

由本地节点向备份节点发送全局同步请求,备份节点收到全局同步请求,相应地将其当前系统版本的全局版本号增加1,本地版本号和请求序号初始化为0。

3.根据权利要求1所述的同步版本方法,其特征在于所述本地同步时钟根据网络延迟及节点间的时钟误差来动态调整,但其大于2毫秒。

4.根据权利要求1所述的同步版本方法,其特征在于所述全局同步时钟是30秒;所述本地同步时钟是10毫秒。

5.根据权利要求1所述的同步版本方法,其特征在于还包括下面的步骤:

步骤4,在写请求的数据被保存到后端存储后将写请求的结束版本赋值为当前的系统版本,并将其保存在完成列表中;所述写请求的结束版本包括全局版本号,本地版本号和请求序号,其初始值为0;所述完成列表包含一定数量的被后端存储保存的写请求的开始版本和结束版本信息;

步骤5,将所述完成列表由本地节点发送到备份节点,备份节点根据完成列表更新对应写请求的结束版本。

6.一种缓存管理中同步版本装置,其中所述缓存管理将本地节点写向缓存的写请求数据备份到备份节点,其特征在于所述同步版本装置包括:用于全局同步的部件,判断全局同步时钟是否到时,如果到时,则在节点之间同步系统版本,使本地节点和备份节点的系统版本保持一致,所述系统版本包括全局版本号,本地版本号和请求序号,其中所述全局同步时钟是一个固定时间;

用于本地同步的部件,判断本地同步时钟是否到时,如果到时,则在节点内调整系统版本,将所述系统版本的本地版本号增加1,请求序号初始化为0,而全局版本号保持不变,其中所述本地同步时钟是一个固定的短时间;

用于标记写请求开始版本的部件,在收到写请求时,将所述系统版本的请求序号增加

1,并将写请求的开始版本赋值为当前的系统版本;其中,所述写请求的开始版本包括全局版本号,本地版本号和请求序号;

其中,所述全局同步时钟是所述本地同步时钟的n倍,n>0。

7.根据权利要求6所述的同步版本装置,其特征在于所述用于全局同步部件还包括用于调整系统版本的部件,将系统版本的全局版本号增加1,本地版本号和请求序号初始化为

0;以及

用于同步系统版本的部件,由本地节点向备份节点发送全局同步请求,备份节点收到全局同步请求,相应地将其当前系统版本的全局版本号增加1,本地版本号和请求序号初始化为0。

8.根据权利要求6所述的同步版本装置,其特征在于所述本地同步时钟根据网络延迟及节点间的时钟误差来动态调整,但其大于2毫秒。

9.根据权利要求6所述的同步版本装置,其特征在于所述全局同步时钟是30秒;所述本地同步时钟是10毫秒。

10.根据权利要求6所述的同步版本装置,其特征在于还包括:

用于标记写请求的结束版本的部件,在写请求的数据被保存到后端存储后将写请求的结束版本赋值为当前的系统版本,并将其保存在完成列表中;所述写请求的结束版本包括全局版本号,本地版本号和请求序号,其初始值为0;所述完成列表包含一定数量的被后端存储保存的写请求的开始版本和结束版本信息;

用于同步完成列表的部件,将所述完成列表由本地节点发送到备份节点,备份节点根据完成列表更新对应写请求的结束版本。

11.一种缓存管理系统,包括共享缓存装置,用于为写请求分配缓存资源以及回收缓存资源,其特征在于还包括如权利要求6、7、8、9或10所述的同步版本装置。

12.根据权利要求11所述的缓存管理系统,其特征在于还包括写资源回收装置,用于接收来自所述共享缓存装置回写请求,所述回写请求用于请求将写请求的数据保存到后端存储;以及用于比较写请求的版本信息,如果写请求的开始版本≤写请求的结束版本,则删除此写请求信息,并直接通知共享缓存装置可回收该写请求占用的资源,否则保存写请求数据到后端存储,修改此写请求的结束版本为当前的系统版本。

说明书 :

一种缓存管理中同步版本方法和装置及其缓存管理系统

技术领域

[0001] 本发明属于信息技术领域,尤其涉及共享缓存管理系统的可靠性。

背景技术

[0002] 数据缓存技术作为一种重要的I/O性能优化手段被广泛应用于各级存储系统中,它将未来可能被访问的数据保存在主存中,利用应用I/O负载中普遍存在的数据访问局部性原理来加速存储系统的I/O性能,屏蔽慢速磁盘设备对应用性能的影响。网络存储应用模式下,位于IO路径上的后端处理节点上的数据缓存资源,对上层应用的性能有重要的影响。
[0003] 然而,主存的不可靠性造成了存储性能和可靠性之间的冲突。采用回写(write-back)方式在接收到应用的写请求后将数据写到主存中即返回应答,在后台最大程度的延迟写磁盘,这种方式虽然最大化性能,但其可靠性也最差。由于主存的易失性的特点,在这种情况下如果出现软硬件错误或者断电等异常而导致系统崩溃,会导致数据丢失和数据不可访问性。为了保证缓存的可靠性,传统采用通写(write-through)方式同步的把数据写到磁盘,虽然能够保证数据可靠性,但由于磁盘的机械特性,写性能比异步写性能相差大约一个数量级。
[0004] 在网络存储应用模式中同样存在存储性能和可靠性之间的冲突。在网络存储应用中,通常采用专有硬件,如NVRAM、缓存磁盘等来解决此冲突,但是需要特殊硬件支持,且价格昂贵,性价比较低,通用性较差;不符合现在基于通用软硬件存储系统发展的技术趋势。随着网络延迟的降低和网络带宽的提高,通过网络传输把写数据备份到空闲节点上的内存,作为写数据缓存的备份。由于数据在另外的节点上保持了备份,而且两个或多个节点同时出现故障的几率很小,因此可以容忍节点的软硬件失效。当一个节点失效重启后,可以从备份节点读入数据,保证了数据的可靠性。另一方面,采用网络内存来存储数据,数据写到网络内存之后即返回写应答,也可以保证较高的数据读写性能。虽然使用网络内存是一种较好的解决缓存可靠性的方法,但仍存在如下的性能问题:(1)资源回收机制效率低:由于可靠性需求,只有主节点把数据真正回写到后端存储上之后,备份节点上的数据才可以进行释放;若备份节点出现资源紧张,则必须等待主节点的回写完成;(2)数据一致性(同步机制)开销很大:在现有技术中基本采用“索引号+版本号”的版本机制来解决一致性问题,为每个数据页维持一个版本,管理开销较大,而且对性能影响较大。

发明内容

[0005] 因此,本发明的目的在于克服上述现有技术的缺陷,为网络存储应用模式中的缓存管理提供了同步版本机制及利用版本信息的资源回收机制,在保证数据可靠性的同时,提供高效的数据读写性能,从而打破可靠性和性能的折衷(tradeoff)。
[0006] 根据本发明的一个方面,本发明提供了一种缓存管理中同步版本方法,其中所述缓存管理将本地节点写向缓存的写请求数据备份到备份节点,所述同步版本方法包括以下步骤:
[0007] 步骤1,判断全局同步时钟是否到时,如果到时,则在节点之间同步系统版本,使本地节点和备份节点的系统版本保持一致,所述系统版本包括全局版本号,本地版本号和请求序号,其中所述全局同步时钟是一个固定时间;
[0008] 步骤2,判断本地同步时钟是否到时,如果到时,则在节点内调整系统版本,将所述系统版本的本地版本号增加1,请求序号初始化为0,而全局版本号保持不变,其中所述本地同步时钟是一个固定的短时间;
[0009] 步骤3,在收到写请求时,将所述系统版本的请求序号增加1,并将写请求的开始版本赋值为当前的系统版本;其中,所述写请求的开始版本包括全局版本号,本地版本号和请求序号。
[0010] 根据本发明实施例的同步版本方法,在步骤1中的在节点之间同步系统版本包括以下步骤:
[0011] 将系统版本的全局版本号增加1,本地版本号和请求序号初始化为0;
[0012] 由本地节点向备份节点发送全局同步请求,备份节点收到全局同步请求,相应地将其当前系统版本的全局版本号增加1,本地版本号和请求序号初始化为0。
[0013] 根据本发明实施例的同步版本方法,其中,本地同步时钟可根据网络延迟及节点间的时钟误差来动态调整,一般应大于2毫秒;所述全局同步时钟是所述本地同步时钟的n倍,n>0。在本发明的一些实施例中,全局同步时钟设置为30秒;本地同步时钟设置为10毫秒。
[0014] 根据本发明实施例的同步版本方法,还包括下面的步骤:
[0015] 步骤4,在写请求的数据被保存到后端存储后将写请求的结束版本赋值为当前的系统版本,并被保存在完成列表中;所述写请求的结束版本包括全局版本号,本地版本号和请求序号,其初始值为0;所述完成列表包含一定数量的被后端存储保存的写请求的开始版本和结束版本信息;
[0016] 步骤5,将所述完成列表由本地节点发送到备份节点,备份节点根据完成列表更新对应写请求的结束版本。
[0017] 根据本发明的另一方面,本发明提供了一种缓存管理中同步版本装置,其中所述缓存管理将本地节点写向缓存的写请求数据备份到备份节点,所述同步版本装置包括:
[0018] 用于全局同步的部件,判断全局同步时钟是否到时,如果到时,则在节点之间同步系统版本,使本地节点和备份节点的系统版本保持一致,所述系统版本包括全局版本号,本地版本号和请求序号,其中所述全局同步时钟是一个固定时间;
[0019] 用于本地同步的部件,判断本地同步时钟是否到时,如果到时,则在节点内调整系统版本,将所述系统版本的本地版本号增加1,请求序号初始化为0,而全局版本号保持不变,其中所述本地同步时钟是一个固定的短时间;
[0020] 用于标记写请求开始版本的部件,在收到写请求时,将所述系统版本的请求序号增加1,并将写请求的开始版本赋值为当前的系统版本;其中,所述写请求的开始版本包括全局版本号,本地版本号和请求序号。
[0021] 根据本发明实施例的同步版本装置,所述用于全局同步部件还包括用于调整系统版本的部件,将系统版本的全局版本号增加1,本地版本号和请求序号初始化为0;以及[0022] 用于同步系统版本的部件,由本地节点向备份节点发送全局同步请求,备份节点收到全局同步请求,相应地将其当前系统版本的全局版本号增加1,本地版本号和请求序号初始化为0。
[0023] 根据本发明实施例的同步版本装置,所述本地同步时钟可根据网络延迟及节点间的时钟误差来动态调整,一般应大于2毫秒;所述全局同步时钟是所述本地同步时钟的n倍,n>0。在本发明的一些实施例中,全局同步时钟设置为30秒;本地同步时钟设置为10毫秒。
[0024] 根据本发明实施例的同步版本装置,还包括:用于标记写请求的结束版本的部件,在写请求的数据被保存到后端存储后将写请求的结束版本赋值为当前的系统版本,并将其保存在完成列表中;所述写请求的结束版本包括全局版本号,本地版本号和请求序号,其初始值为0;所述完成列表包含一定数量的被后端存储保存的写请求的开始版本和结束版本信息;
[0025] 用于同步完成列表的部件,将所述完成列表由本地节点发送到备份节点,备份节点根据完成列表更新对应写请求的结束版本。
[0026] 根据本发明的又一方面,本发明提供了一种缓存管理系统,包括共享缓存装置,用于为来自数据通信装置的写请求分配缓存资源以及回收缓存资源,和包括如上面所述的同步版本装置。
[0027] 在一些实施例中,上述缓存管理系统还包括写资源回收装置,所述写资源回收装置用于接收来自共享缓存装置的回写请求,所述回写请求用于请求将写请求的数据保存到后端存储;以及用于比较写请求的版本信息,如果写请求的开始版本≤写请求的结束版本,则删除此写请求信息,并直接通知共享缓存装置可回收该写请求占用的资源,否则保存写请求数据到后端存储,修改此请求的结束版本为当前的系统版本。
[0028] 与现有技术相比,本发明的有益效果在于,把写向缓存的数据备份到集群节点中的空闲网络缓存,由于集群中两个节点同时出现故障的概率很小,故可以实现写缓存数据的高可靠性。同时,采用“全局版本号+本地版本号+请求序号”的同步版本机制,在节点间同步调整全局版本号,在节点内部异步调整本地版本号和请求序号,降低了节点之间的数据同步开销。而且主节点与备份节点通过在本地比较版本信息可以独自的将缓存数据写向后端存储系统,灵活有效的回收缓存资源;从而实现系统的高性能。

附图说明

[0029] 以下参照附图对本发明实施例作进一步说明,其中:
[0030] 图1是根据本发明实施例的版本的结构示意图;
[0031] 图2是根据本发明实施例的缓存管理系统的结构图;
[0032] 图3是根据本发明实施例的缓存管理系统的各装置的工作流程图;

具体实施方式

[0033] 为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0034] 在本发明的实施例中,通过把本地节点写向缓存的数据备份到集群节点中的空闲网络缓存,来实现写缓存数据的高可靠性。其中,写请求所操作的本地节点也可称为主节点,而备份写向缓存的数据的空闲节点也可称为备份节点或镜像节点,其中备份节点或镜像节点可以有多个,其个数可以依据可靠性的级别来配置。例如,在一些实施例中,为了提高可靠性,主节点可以将所需要备份的缓存数据同时保存到两个备份节点上。在一些实施例中,为了提高空间利用率,主节点对每个写请求可以随机选择网络中的空闲节点来备份其写向缓存的数据。
[0035] 在本发明的实施例中采取同步和异步相结合的同步版本方法来实现系统的高性能。同步方法的核心问题就是将核心部分(小部分)同步化,边缘部分(大部分)异步化。在本发明的实施例中,提供了一种用于缓存管理的同步版本方法,每隔一个固定时间在节点之间同步调整系统版本,每个一个固定的短时间在节点内调整系统版本;以及为每个写请求标记开始版本,其中系统版本和写请求的开始版本采用如图1所示的结构,包括全局版本号,本地版本号和请求序号;在节点之间同步调整系统版本是指将系统版本的全局版本号增加1,本地版本号和请求序号初始化为0;由本地节点向备份节点发送全局同步请求,备份节点收到全局同步请求,相应地将其当前系统版本的全局版本号增加1,本地版本号和请求序号初始化为0;在节点内调整系统版本是指将系统版本的本地版本号增加1,请求序号初始化为0,而全局版本号保持不变。
[0036] 在本发明的一些实施例的同步版本方法还包括在写请求的数据被保存到后端存储后将写请求的结束版本赋值为当前的系统版本,并保存在完成列表中;所述写请求的结束版本包括全局版本号,本地版本号和请求序号,其初始值为0;所述完成列表包含一定数量的被后端存储保存的写请求的开始版本和结束版本信息;所述完成列表由本地节点发送到备份节点,备份节点可以根据完成列表更新对应写请求的结束版本。
[0037] 图1是根据本发明实施例的版本的结构,所述版本由全局版本号101、本地版本号102、请求序号103组成。在本实施例中,每个进入系统的请求都有两个版本号,(开始版本,结束版本),其中开始版本指请求进入系统的初始版本,结束版本指请求离开系统的最终版本。
[0038] 系统版本的全局版本号201,是节点间同步调整的对象。系统版本的全局版本号的初始化和调整是两个节点完全同步完成的,即每隔一个固定的时间,由缓存节点向备份节点发送同步请求,进行系统版本的同步,即将系统版本的全局版本号增加1,本地版本号和请求序号初始化为0。本质上,全局版本号是一个时间概念,全局版本号每隔一个固定时间(如30秒)就增加1。在其中一个节点上,对于所有写请求,当本节点的当前系统版本的全局版本号≥写请求的全局版本号+2时,意味着该写请求在对方节点所对应的写请求一定已被写到了磁盘上,即对应的备份缓存已被保存,因此,该请求在本地节点上所占用的资源就可以释放了。这是由于每隔一个固定的时间,如30秒,系统版本的才进行同步一次,因此如果当前系统版本的全局版本号如果大于写请求的全局版本号,说明这个写请求在此节点上已经存在了30秒;而每个写请求在内存缓存中驻留时间是有限的,操作系统的内存缓存管理可以保证在一个固定时间范围内(如30秒)将写数据一定写回到非易失性介质(如磁盘),因此可以释放该写请求所占用的资源。其中,加2的目的是保证边界条件成立,其实加1也可以。在节点之间每隔30秒对系统版本同步调整一次,而在这30秒内,无需进行同步,而由每个节点各自进行版本计数,在此过程中,节点上所有请求比较操作完全不需与对方节点进行通讯,因此可节省同步的开销。另外,本地资源的释放也不依赖于对方节点的响应。在一些实施例中这个固定时间也可选其他值,例如10秒,20秒,50秒等等。
[0039] 系统版本的全局版本号的同步也使两个节点在后期的写请求能够比较的异步化。在每次系统版本的全局版本号进行绝对同步调整时(即全局版本号加1),系统版本的本地版本号202被初始化为0。之后,系统版本的本地版本号202的调整是两个存储节点完全异步进行的,由各节点独立地进行计算。
[0040] 系统版本的本地版本号202,是节点内版本调整的对象;本质上,本地版本号也是一个时间概念。在两个节点上,各自的系统版本的本地版本号每隔某一固定的短时间(如10毫秒)就增加1。对于同一个块地址,当本地节点上写请求的结束版本的本地版本号≥写请求的开始版本的本地版本号+2时,这表示对方节点上的写请求在本地节点的对应请求一定已被写到了磁盘上,同时也意味着该请求在对方节点上所占用的资源就可以释放了。
在此过程中对方节点需要从本地节点上获取完成列表。不同于现有技术,本地版本号的比较是在各自节点上独立完成。在现有技术中只有主节点把数据真正回写到后端存储上之后,备份节点上的数据才可以进行释放;若备份节点出现资源紧张,则必须等待主节点的回写完成。而在本发明的实施例中主节点与备份节点都可以独自的将缓存数据写向后端存储系统,灵活有效的释放缓存资源。这是由于一个写请求在两个节点上提交的绝对时间差和短时间内时钟误差(Timer Skew)是有限的,即不同的机器在一个固定时间段内的时钟误差及网络传输的时间差肯定是不会超过某个上限值的。互联机制可以保证一个写请求在两个节点分别进入块设备栈进行处理的绝对时间差小于某一固定的短时间(如10毫秒)。在两个节点间,通过间断性的同步本地版本号重置(全局版本号调整时)和根据各自本地时钟调整本地版本号,虽然本地版本号不是绝对同步的,但是相对同步的,通过本地版本号的相对同步性使能两个节点在后期写请求具有可比性。
[0041] 系统版本的全局版本号的调整与固定时间有关,这个固定时间也可以称为全局同步时钟;系统版本的本地版本号的调整与固定的短时间有关,这个固定的短时间也可以称为本地同步时钟。在本发明的一些实施例中,固定的短时间可根据网络延迟及节点间的时钟误差来动态调整,一般应大于2毫秒;而上述的固定时间是所述固定的短时间的n倍,n>0。在本实施例中固定时间设置为30秒;固定的短时间设置为10毫秒。
[0042] 系统版本的请求序号203,在每次全局版本号或本地版本号调整时都初始化为0;在每次处理一个写请求时,系统版本的请求序号自动加1;同时将该写请求的开始版本复制为当前系统版本,这样可以确保在每个存储节点上每个写请求可以通过(全局版本号|本地版本号|请求序号)而唯一标识。
[0043] 下面结合表1对本发明一个实施例的同步版本方法的具体过程进行详细介绍,在本实施例中,每个写请求都有两个版本号,(开始版本,结束版本),其中开始版本指写请求的初始版本,结束版本指写请求的数据被保存到后端存储后的写请求的版本。
[0044] 表1
[0045]全局版本号 本地版本号 请求序号 请求编号
1 0 0
1 1 0
1 1 1 1
1 1 2 2
1 2 0
1 3 0
1 3 1 3
1 3 1 1
2 0 0
2 0 1 4
2 0 1 2
[0046] 步骤1,主节点与备份节点的版本初始化后,当前系统版本为100;
[0047] 步骤2,经过一固定的短时间(如10毫秒),本地节点调整本地版本号,当前系统版本更新为110;
[0048] 步骤3,收到写请求1(编号为1的写请求)时,首先更新系统版本,由110更新为111;并把当前系统版本赋值给写请求1的开始版本,其结束版本赋0,即(111,0)),并对请求向下一层设备栈进行转发;
[0049] 步骤4,请求1写至本地共享缓存;同时对写请求进行同步复制,将其通过高性能网络的远程内存访问方式发送到备份节点。请求在备份节点的处理类似于步骤3;
[0050] 步骤5,收到写请求2(编号为2的写请求)时,首先更新系统版本,由111更新为112;并把当前系统版本赋值给请求2的开始版本,其结束版本赋0,即(112,0),并对请求向下一层设备栈进行转发;
[0051] 步骤6,写请求2写至本地共享缓存;同时对写请求进行同步复制,后通过高性能网络的远程内存访问方式发送到备份节点。请求在备份节点的处理类似于步骤5;
[0052] 步骤7,经过一固定的短时间(如10毫秒),本地节点调整本地版本号,当前系统版本更新为120;
[0053] 步骤8,经过一固定的短时间(如10毫秒),本地节点调整本地版本号,当前系统版本更新为130;
[0054] 步骤9,收到请求3(编号为3的写请求)时,首先更新系统版本,由130更新为131;并把当前系统版本赋值给请求3的开始版本,其结束版本赋0,即(131,0),并对请求向下一层设备栈进行转发;
[0055] 步骤10,请求3写至本地共享缓存;同时对写请求进行同步复制,后通过高性能网络的远程内存访问方式发送到备份节点。请求在备份节点的处理类似于步骤9;
[0056] 步骤11,写请求1写至后端存储,更新写请求1的结束版本,把当前系统版本赋值给写请求1的结束版本,即(111,131),并把写请求1的开始版本和结束版本加入完成列表,发送给备份节点;备份节点收到完成列表后,更新对应请求的结束版本;当备份节点进行资源回收时,通过比较请求的开始版本和结束版本来辅助资源回收;
[0057] 步骤12,经过一个固定时间(如30秒),调整全局版本号,当前的系统版本更新为200,主节点向备份节点发送全局同步请求,备份节点更新系统版本;
[0058] 步骤13,收到写请求4(编号为4的写请求)时,首先更新系统版本,由200更新为201;并把当前系统版本赋值给请求4的开始版本,其结束版本赋0,即(201,0),并对请求向下一层设备栈进行转发;
[0059] 步骤14,写请求4写至本地共享缓存;同时对写请求进行同步复制,后通过高性能网络的远程内存访问方式发送到备份节点。请求在备份节点的处理类似于步骤13;
[0060] 步骤15,写请求2写至后端存储,更新写请求2的结束版本。把当前系统版本赋值给写请求2的结束版本,即(112,201),并把写请求2的开始版本和结束版本加入完成列表,发送给备份节点;备份节点收到完成列表后,更新对应请求的结束版本;当备份节点进行资源回收时,通过比较请求的开始版本和结束版本来辅助资源回收。
[0061] 在本发明的另一方面,本发明还提供了实现上述同步版本方法的同步版本装置,包括:
[0062] 用于全局同步的部件,判断全局同步时钟是否到时,如果到时,则在节点之间同步调整系统版本,将系统版本的全局版本号增加1,本地版本号和请求序号初始化为0;由本地节点向备份节点发送全局同步请求,备份节点收到全局同步请求,相应地将其当前系统版本的全局版本号增加1,本地版本号和请求序号初始化为0。
[0063] 用于本地同步的部件,判断本地同步时钟是否到时,如果到时,则将所述系统版本的本地版本号增加1,请求序号初始化为0,而全局版本号保持不变。
[0064] 用于标记写请求开始版本的部件,在收到写请求时,将所述系统版本的请求序号增加1,并将写请求的开始版本赋值为当前的系统版本。
[0065] 在本发明的一些实施例中上述同步版本装置还包括:用于标记写请求的结束版本的部件,在写请求的数据被保存到后端存储后将写请求的结束版本赋值为当前的系统版本,并将其保存在完成列表中;所述写请求的结束版本包括全局版本号,本地版本号和请求序号,其初始值为0;所述完成列表包含一定数量的被后端存储保存的写请求的开始版本和结束版本信息;和用于同步完成列表的部件,将所述完成列表由本地节点发送到备份节点,备份节点根据完成列表更新对应写请求的结束版本。
[0066] 在又一方面,本发明还提供了一种包含上述同步版本装置的缓存管理系统。下面结合附图对本发明实施例的缓存管理系统进行详细描述。
[0067] 图2是根据本发明实施例的缓存管理系统,包括同步版本装置201、数据通信装置202、共享缓存装置203、写缓存资源回收装置204、失效处理装置205、完成列表通讯装置
206和同步通信装置207。在缓存节点和备份节点上的各个装置具有完全对称的功能结构。
[0068] 同步版本装置201,是外部请求进入系统的入口,负责版本信息的生成,用于在节点之间同步系统版本并且为每个进入系统的写请求标记开始版本。每个写请求有两个版本,开始版本和结束版本,其中,开始版本指写请求进入系统的初始版本,结束版本指写请求被保存到后端存储后的最终版本。当一个写请求进入系统时,同步版本装置201首先更新系统版本并且将请求的初始版本赋值为当前的系统版本,当一个请求在两个节点的各自设备层穿越时,通过所标记的写请求的版本才可以进行两个存储节点间的请求比较。在写请求的数据被保存到后端存储时,将请求的结束版本,即写请求离开系统的最终版本,赋值为当前的系统版本,并将此请求的版本信息(包括请求的开始版本和结束版本)存放在完成列表中。
[0069] 数据通信装置202,对写请求数据进行复制,并通过高性能网络备份到其他节点。具体而言,针对来自同步版本装置201的写请求,进行请求复制,源写请求转发到本节点的共享缓存装置,所复制的写请求通过远程直接内存访问发送到备份节点。
[0070] 共享缓存装置203,主要承载着应用的读写缓存需求,为应用的数据分配缓存资源;在资源紧张时,进行缓存资源的回收。共享缓存装置203包括缓存分配装置和缓存分区装置;其中,缓存分区,具有独立缓存空间,可以同应用关联,在所述缓存空间中承载所述应用当前访问的数据;缓存分配装置,用于以共享缓存池的方式管理所有空闲缓存资源并负责缓存资源的回收。
[0071] 写缓存资源回收装置204,通过比较写请求的开始版本和结束版本,辅助对写缓存资源进行回收。如果请求的开始版本≤请求的结束版本,意味着可以不必把写数据块回写到后端存储,而直接回收,此时将该写请求直接向上返回成功,并在系统中删除此请求信息;否则,向后端存储系统转发写请求,保存数据到后端存储,修改此请求的结束版本为当前的系统版本。
[0072] 失效处理装置205,在节点或网络出现故障时,当一个节点失效重启后,失效处理装置205可以从备份节点读入数据。由于数据在另外的节点上保持了备份,而且两个或多个节点同时出现故障的几率很小,因此可以容忍节点的软硬件失效,从而保证了数据的可靠性。
[0073] 完成列表通讯装置206,在节点间发送或接收完成列表信息。将完成列表发送到其他节点,对方节点通过完成列表通讯装置206获取完成列表会更新对应请求的结束版本。
[0074] 同步通讯装置207,用于在节点间发送或接收版本同步信息。
[0075] 在一些实施例中,同步通讯装置207和完成列表通讯装置206是在用户级运行而同步版本装置在内核级运行。
[0076] 在一些实施例中,同步通讯装置207和完成列表通讯装置206可以合并为一个通讯装置,负责发送和接收消息,通过设置消息的类型来区分是同步版本消息还是完成列表消息。在一些实施例中,可以不设置同步通讯装置207和完成列表通讯装置206,其对应的功能由同步版本装置201来完成。
[0077] 图3所示是根据本发明实施例的缓存管理方法的一个具体工作流程。
[0078] 步骤301,当IO线程向缓存系统进行写数据,写请求进入系统时,同步版本装置201首先更新系统版本,将写请求的开始版本赋值为当前系统版本,写请求的结束版本赋值为0,并将写请求转发至数据通信装置202;同时检查是否有全局同步请求需要处理,若有,则停止请求转发,进行全局同步,即将当前系统版本的全局版本号增加1、本地版本号和请求序号初始化为0,完成全局同步后重新进入请求转发状态。
[0079] 步骤302,当接收到来自同步版本装置201转发的写请求时,数据通信装置202向共享缓存装置203转发写请求;同时对写请求进行同步复制,并通过网络的远程内存访问方式发送到备份节点;当源请求和所复制的请求都完成后,才对上层结束请求。
[0080] 步骤303,在共享缓存装置203接收到写请求时,首先,在缓存空间查找是否存在对应的缓存块;若存在,说明命中,直接把数据写入到对应的缓存块中;否则,从空闲资源池中为数据分配缓存块,后把数据写入到新分配的缓存块中;如果在为写请求分配缓存块的过程中,出现缓存资源紧张,则触发系统进行缓存资源的回收;在资源回收过程中,如需回收写数据块,在回收之前,需要把写数据块回刷到后端存储,因此向下转发写数据块的回写请求。
[0081] 步骤304,当写缓存资源回收装置204收到来自共享缓存装置203的回写请求时,比较该请求的开始版本和结束版本。若请求的开始版本≤请求的结束版本,意味着可以不把写数据块回写到后端存储,而直接回收,此时将该写请求直接向上返回成功,并在系统中删除此请求信息;否则,向后端存储系统转发写请求,当后端存储系统完成此请求后,修改此请求的结束版本为当前的系统版本。因此,写缓存资源回收装置204使得主节点与备份节点都可以独自的将缓存数据写向后端存储系统,灵活有效的释放缓存资源。而在现有技术中,只有主节点把数据真正回写到后端存储上之后,备份节点上的数据才可以进行释放;若备份节点出现资源紧张,则必须等待主节点的回写完成。
[0082] 步骤305,将步骤304中一定数量的回写到后端存储的写请求的版本信息(包括此请求的开始版本和结束版本)组成完成列表,通过完成列表通讯装置206,发送到备份节点;备份节点收到完成通讯列表后,更新对应请求的结束版本。这样当备份节点资源紧张,需要进行资源回收时,可以在步骤304中依据请求的版本信息来辅助资源的回收。
[0083] 可见根据本发明实施例的缓存管理系统通过把写向缓存的数据备份到集群节点中的空闲网络缓存,由于集群中两个节点同时出现故障的概率很小,故可以实现写缓存数据的高可靠性。同时,采用“全局版本号+本地版本号+请求序号”的同步版本机制,在节点间同步调整全局版本号,在节点内部异步调整本地版本号和请求序号,降低了节点之间的数据同步开销。而且主节点与备份节点通过在本地比较版本信息可以独自的将缓存数据写向后端存储系统,灵活有效的回收缓存资源;从而实现系统的高性能。
[0084] 虽然本发明已经通过优选实施例进行了描述,然而本发明并非局限于这里所描述的实施例,在不脱离本发明范围的情况下还包括所作出的各种改变以及变化。