缓存数据共享的方法及设备与流程

文档序号:12278800阅读:577来源:国知局
缓存数据共享的方法及设备与流程

本申请涉及计算机领域,尤其涉及一种缓存数据共享的方法及设备。



背景技术:

大规模分布式计算系统中,为了加快对服务器端数据的访问,计算节点中的进程通常会引入缓存来管理经常访问的数据。在分布式场景下,服务器端的数据随时可能发生变化,因此为了保证每个进程维持的缓存的时效性,进程管理的缓存需要不定时地更新。但是,无论是每个计算节点定期从服务器端拉取(Pull)数据,或者服务器端不定时推送(Push)数据至各计算节点进程的缓存,均会给分布式计算系统带来访问压力。

在分布式协调系统中,计算节点上的进程可以使用“缓存+订阅”来获取订阅的数据文件的最新内容,进而更新本地缓存的内容。每个进程均维护着自己独立的缓存以及单独到服务器的连接,通过与订阅服务器中某个数据文件,来获知该数据文件的内容是否为最新,从而保证缓存中数据的时效性。随着业务规模的迅速增长,整个系统中往往运行着成千上万乃至更多的进程,并且单个计算节点上运行的进程也越来越多。

由此,数据订阅行为也会随着进程数量的增加而增加,随之将导致以下问题:a)由于每个进程的订阅行为都依附该进程建立的独立到服务器的连接,随着连接数的增加,会增加服务器的负载,对服务器的性能带来了严峻挑战。b)由于服务器的负载增加,单个订阅行为的获取反馈的延迟增加,进而影响进程获取订阅数据最新内容的时效性。c)由于每个进程拥有独立的缓存,单个计算节点上订阅数量增加意味着缓存资源消耗的增加,以及处理订阅反馈的操作增加,进而消耗计算节点的计算资源。



技术实现要素:

本申请的一个目的是提供一种缓存数据共享的方法及设备,从而节约计算节点上缓存与计算资源,减少因为订阅行为带来的大量到服务器的连 接,减轻服务器的负载。

为实现上述目的,本申请提供了一种缓存代理节点端进行缓存数据共享的方法,该方法包括:

获取被代理进程发送的关于数据文件的数据访问请求,其中,所述被代理进程为所述缓存代理节点负责管理的计算节点上的多个进程之一;

根据所述数据访问请求向所述被代理进程发送所述数据文件。

进一步地,根据所述数据访问请求向所述被代理进程发送所述数据文件,包括:

根据所述数据访问请求在所述缓存代理节点的缓存中查找所述数据文件;

若所述缓存代理节点的缓存中存在所述数据文件,且所述数据文件的状态为最新,则向所述被代理进程发送所述数据文件;

若所述缓存代理节点的缓存中不存在所述数据文件,或所述缓存代理节点的缓存中的所述数据文件的状态为非最新,则向服务器发送关于所述数据文件的数据获取请求,并在接收到所述服务器根据所述数据获取请求发送的数据文件之后,向所述被代理进程发送由服务器接收到的数据文件。

进一步地,所述数据访问请求包含所述数据文件的标识信息;

根据所述数据访问请求在所述缓存代理节点的缓存中查找所述数据文件,包括:

根据所述数据访问请求中所述数据文件的标识信息在所述缓存代理节点的缓存中查找所述数据文件。

进一步地,在接收到所述服务器根据所述数据获取请求发送的数据文件之后,还包括:

若所述缓存代理节点的缓存中不存在所述数据文件,则在缓存中保存由服务器接收到的数据文件,并将所述数据文件的状态设置为最新;

若所述缓存代理节点的缓存中的所述数据文件的状态为非最新,则更新缓存中的所述数据文件,并将所述数据文件的状态设置为最新。

进一步地,该方法还包括:

在获取被代理进程发送的关于数据文件的数据访问请求时,向所述服务器发送关于所述数据文件的订阅请求,以在所述服务器的所述数据文件的内容更改时,从所述服务器获取对应于所述订阅请求的更改通知。

进一步地,该方法还包括:

获取服务器发送的关于数据文件的更改通知,根据所述更改通知将所述数据文件的状态设置为非最新。

进一步地,获取服务器发送的关于数据文件的更改通知,包括:

通过缓存代理节点与服务器之间的心跳通信获取服务器发送的关于数据文件的更改通知。

进一步地,所述缓存代理节点的缓存基于非易失性的存储介质。

相应地,本申请还提供了一种计算节点端进行缓存数据共享的方法,该方法包括:

所述计算节点的被代理进程向缓存代理节点发送关于数据文件的数据访问请求,其中,所述被代理进程为所述缓存代理节点负责管理的计算节点上的多个进程之一;

所述被代理进程接收所述缓存代理节点根据所述数据访问请求发送的所述数据文件。

进一步地,所述数据访问请求包含所述数据文件的标识信息。

根据本申请的另一方面,还提供了一种缓存数据共享的缓存代理节点,该缓存代理节点包括:

请求获取装置,用于获取被代理进程发送的关于数据文件的数据访问请求,其中,所述被代理进程包括所述缓存代理节点负责管理的计算节点上的多个进程;

文件发送装置,用于根据所述数据访问请求向所述被代理进程发送所述数据文件。

进一步地,所述文件发送装置,包括:

查找模块,用于根据所述数据访问请求在所述缓存代理节点的缓存中查找所述数据文件;

发送模块,用于若所述缓存代理节点的缓存中存在所述数据文件,且 所述数据文件的状态为最新,则向所述被代理进程发送所述数据文件;以及若所述缓存代理节点的缓存中不存在所述数据文件,或所述缓存代理节点的缓存中的所述数据文件的状态为非最新,则向服务器发送关于所述数据文件的数据获取请求,并在接收到所述服务器根据所述数据获取请求发送的数据文件之后,向所述被代理进程发送由服务器接收到的数据文件。

进一步地,所述数据访问请求包含所述数据文件的标识信息;

所述查找模块,用于根据所述数据访问请求中所述数据文件的标识信息在所述缓存代理节点的缓存中查找所述数据文件。

进一步地,所述文件发送装置,还包括:

缓存更新模块,用于在接收到所述服务器根据所述数据获取请求发送的数据文件之后,若所述缓存代理节点的缓存中不存在所述数据文件,则在缓存中保存由服务器接收到的数据文件,并将所述数据文件的状态设置为最新;以及若所述缓存代理节点的缓存中的所述数据文件的状态为非最新,则更新缓存中的所述数据文件,并将所述数据文件的状态设置为最新。

进一步地,该缓存代理节点还包括:

订阅装置,用于在获取被代理进程发送的关于数据文件的数据访问请求时,向所述服务器发送关于所述数据文件的订阅请求,以在所述服务器的所述数据文件的内容更改时,从所述服务器获取对应于所述订阅请求的更改通知。

进一步地,该缓存代理节点还包括:

通知获取装置,用于获取服务器发送的关于数据文件的更改通知,根据所述更改通知将所述数据文件的状态设置为非最新。

进一步地,所述通知获取装置,用于通过缓存代理节点与服务器之间的心跳通信获取服务器发送的关于数据文件的更改通知,根据所述更改通知将所述数据文件的状态设置为非最新。

进一步地,所述缓存代理节点的缓存基于非易失性的存储介质。

相应地,本申请还提供了一种缓存数据共享的计算节点,该计算节点包括:

请求发送装置,用于控制所述计算节点的被代理进程向缓存代理节点 发送关于数据文件的数据访问请求,其中,所述被代理进程为所述缓存代理节点负责管理的计算节点上的多个进程之一;

文件获取装置,用于控制所述被代理进程接收所述缓存代理节点根据所述数据访问请求发送的所述数据文件。

进一步地,所述数据访问请求包含所述数据文件的标识信息。

与现有技术相比,通过缓存代理节点来管理一个或者多个计算节点上的进程,这些被代理进程需要使用的数据文件均保存于缓存代理节点的缓存中,因此计算节点上的进程无需维持自己独立的缓存空间,对于缓存代理节点缓存中的某个特定数据文件可以实现对多个进程的共享,节约了缓存与计算资源;同时被代理进程无需再与服务器直接建立连接,对于同一缓存代理节点管理下的多个进程,仅需与服务器建立一个连接即可,由此减少了因为订阅行为带来的大量到服务器的连接,减轻服务器的负载。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:

图1(a)为本申请实施例提供一种缓存数据共享的系统的结构示意图;

图1(b)为本申请实施例提供缓存数据共享的系统的另一种实现方式的结构示意图;

图2为本申请实施例提供一种进行缓存数据共享的方法;

图3为本申请实施例提供的一种在缓存代理节点端进行缓存数据共享的方法;

图4为本申请实施例提供的一种缓存数据共享的缓存代理节点的结构示意图;

图5为本申请实施例提供的一种缓存数据共享的计算节点的结构示意图;

图6为本申请实施例中缓存数据共享的缓存代理节点中文件发送装置的结构示意图;

图7为本申请实施例提供的一种优选的缓存数据共享的缓存代理节点 的结构示意图;

图8为本申请实施例中进行缓存数据共享过程中各设备之间的交互示意图;

附图中相同或相似的附图标记代表相同或相似的部件。

具体实施方式

下面结合附图对本申请作进一步详细描述。

在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

图1(a)示出了由计算节点、缓存代理节点和服务器构成的实现缓存数据共享的系统的结构示意图,该系统至少包括计算节点110、缓存代理节点120和服务器130。计算节点110运行有多个进程111、112、113,每个进程均与所述代理缓存代理节点120建立有连接,缓存代理节点120和服务器130之间建立有连接。由此,所述计算节点110中的进程不直接与服务器130建立连接并进行交互,而是通过缓存代理节点120与所述服务 器130进行交互。为简明起见,图1(a)中示出的计算节点、缓存代理节点和服务器均为一个,其数量可能小于一个实际系统中的数量,但这种省略无疑地是以不会影响对本发明进行清楚、充分的公开为前提的。例如,在实际应用中,所述每个服务器可能与一个或多个缓存代理节点建立连接,而每个缓存代理节点也可能与一个或多个计算节点上的进程建立连接,对这些计算节点上的进程进行管理。

在此,本领域技术人员应当理解,该系统涉及的计算节点、缓存代理节点以及服务器均可以包括但不限于如网络主机、单个网络服务器、多个网络服务器集或基于云计算的计算机集合等实现。在此,云由基于云计算(Cloud Computing)的大量主机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟计算机。此外,所述缓存代理节点也可以集成于所述计算节点中,作为该计算节点130中具备相应功能的缓存代理模块120’的形式实现,具体可参见图1(b)。

图2示出了一种进行缓存数据共享的方法,其中,在缓存代理节点端,该方法包括:

步骤S202,缓存代理节点获取被代理进程发送的关于数据文件的数据访问请求。其中,所述被代理进程为所述缓存代理节点负责管理的计算节点上的多个进程之一,例如前述图1(a)中的进程111、112、113均为缓存代理节点120的被代理进程。

步骤S203,缓存代理节点根据所述数据访问请求向所述被代理进程发送所述数据文件。

相应地,在计算节点端,该方法包括:

步骤S201,计算节点的被代理进程向缓存代理节点发送关于数据文件的数据访问请求;

步骤S204,所述被代理进程接收所述缓存代理节点根据所述数据访问请求发送的所述数据文件。

通过缓存代理节点来管理一个或者多个计算节点上的进程,这些被代理进程需要使用的数据文件均保存于缓存代理节点的缓存中,因此计算节点上的进程无需维持自己独立的缓存空间,对于缓存代理节点缓存中的某 个特定数据文件可以实现对多个进程的共享,节约了缓存与计算资源。例如,以图1(a)所示的系统为例,进程111、112、113均缓存代理节点120的被代理进程,其运行过程中需要的数据文件均保存在缓存代理节点120的缓存中,对于三个进程均需要使用的数据文件A。若采用现有的方式,每个进程均维持自己独立的缓存,进程111、112和113均需要在其独立的缓存中保存一个数据文件A,即需要保存三份相同的数据文件A,而采用缓存代理节点后,由于三个进程可以共用缓存代理节点缓存中的数据文件A,此时仅需要保存一份数据文件A即可,由此节约了缓存和计算资源。

此外,由于被代理进程无需再与服务器直接建立连接,对于同一缓存代理节点管理下的多个进程,仅需与服务器建立一个连接即可,由此减少了因为订阅行为带来的大量到服务器的连接,减轻服务器的负载。仍以图1(a)所示的系统为例,若采用现有的方式,每个进程均维持自己独立的到服务器130的连接,此时服务器130需要管理三个连接,而采用缓存代理节点后,三个进程的订阅行为统一通过缓存代理节点完成,因此服务器130仅需要管理服务器130与缓存代理节点120之间的一个连接即可,由此减轻服务器的负载。

由于数据文件在缓存代理节点缓存中的存储状况不同,缓存代理节点根据会采用不同的方式向所述被代理进程发送所述数据文件。为此,本申请实施例还提供了一种优选的在缓存代理节点端进行缓存数据共享的方法,该方法的流程如图3所示,包括:

步骤S301,缓存代理节点获取被代理进程发送的关于数据文件的数据访问请求。

步骤S302,根据所述数据访问请求在所述缓存代理节点的缓存中查找所述数据文件;

步骤S303,若所述缓存代理节点的缓存中存在所述数据文件,且所述数据文件的状态为最新,则向所述被代理进程发送所述数据文件;

步骤S304,若所述缓存代理节点的缓存中不存在所述数据文件,或所述缓存代理节点的缓存中的所述数据文件的状态为非最新,则向服务器发送关于所述数据文件的数据获取请求,并在接收到所述服务器根据所述数 据获取请求发送的数据文件之后,向所述被代理进程发送由服务器接收到的数据文件。

优选地,所述数据访问请求可以包含所述数据文件的标识信息;相应地,步骤S302根据所述数据访问请求在所述缓存代理节点的缓存中查找所述数据文件,具体包括:根据所述数据访问请求中所述数据文件的标识信息在所述缓存代理节点的缓存中查找所述数据文件。其中,所述标识信息可以是任意可以唯一标识所述数据文件的信息,例如本实施例中所采用的标识信息为所述数据文件的路径信息。在查找数据文件时,缓存代理节点根据数据访问请求中包含的路径信息在缓存中进行匹配查找,若在缓存中匹配到某一数据文件具有相同的路径信息,则可以确定缓存中存在所述数据访问请求对应的数据文件。由此,可以准确快速地确定数据文件在缓存代理节点缓存中的存储状况不同,进而采取不同的方式向所述被代理进程发送所述数据文件。在此,本领域技术人员应当理解,上述路径信息作为数据文件的标识信息的方式为举例,其他现有的或今后可能出现的标识信息的实现方式如可适用于本发明,也应包含在本发明保护范围以内,并在此以引用方式包含于此。

当缓存代理节点根据所述数据访问请求在缓存中查找所述数据文件后,可能存在以下几种存储状况:一、缓存中存在所述数据文件,且该数据文件的状态为最新(即在服务器中该数据文件的内容与在缓存中的内容一致);二、缓存中存在所述数据文件,但是该数据文件的状态为非最新(即在服务器中该数据文件的内容已经更改,但是缓存中还未更改);三、缓存中不存在所述数据文件。

对于第一种情况,可以直接根据数据访问请求将缓存中最新内容的数据文件发给计算节点的进程。以图1(a)所示的系统为例,其缓存代理节点120接收到计算节点110中的进程111发送的关于数据文件A的数据访问请求后,会根据该数据访问请求在缓存中查找数据文件A。在该系统中,缓存代理节点120缓存中的文件状态可以采用Update和Dirty表示,其中Update表示数据文件状态为最新,Dirty表示数据文件的状态为非最新。若为前述的第一种情况,缓存中存在数据文件A,且该数据文件A的状态 为Update,则缓存代理节点120直接将缓存中的数据文件A发送给进程111。

而对于第二和第三种情况,缓存代理节点需要向服务器发送关于所述数据文件的数据获取请求,以获取最新内容的数据文件。仍以前述系统为例,若代理缓存节点120的缓存中不存在数据文件A或者缓存中存在数据文件A但该数据文件A的状态为Dirty,则缓存代理节点120会向服务器130发送数据获取请求,服务器130根据数据获取请求向缓存代理节点120发送最新内容的数据文件A,由此缓存代理节点120在接收到该数据文件A后,将其发送给进程111。

进一步地,缓存代理节点在接收到所述服务器根据所述数据获取请求发送的数据文件之后,还会对缓存进行更新,以便在接到其它关于同一数据文件的数据访问请求时,能够直接在缓存中找到最新内容的所述数据文件,而无需再访问服务器,以便解决处理资源,减轻服务器负载。具体地,缓存代理节点在接收到所述服务器根据所述数据获取请求发送的数据文件之后,还包括:若所述缓存代理节点的缓存中不存在所述数据文件,则在缓存中保存由服务器接收到的数据文件,并将所述数据文件的状态设置为最新;若所述缓存代理节点的缓存中的所述数据文件的状态为非最新,则更新缓存中的所述数据文件,并将所述数据文件的状态设置为最新。接上例,缓存代理节点120在接收到服务器130发送的该数据文件A后,若代理缓存节点120在先前的查找过程中发现缓存中不存在数据文件A,则直接在缓存中保存数据文件A,并将其状态设置为Update;若在先前的查找过程中发现缓存中的数据文件A的状态为Dirty,则根据接收到的数据文件A,对原数据文件A的内容进行更新,同时将其状态置为Update。

由于在分布式场景下,服务器中数据文件的内容随时可能发生变化,因此需要对缓存中的数据文件的状态进行实时的更新,以保证计算节点的进程可以获取到最新内容的数据文件。由此,前述的在缓存代理节点端进行缓存数据共享的方法,还包括:获取服务器发送的关于数据文件的更改通知,根据所述更改通知将所述数据文件的状态设置为非最新。

在实际应用中,缓存中数据文件状态的更新可以通过订阅的方式实 现。由于所有被代理进程通过其对应的缓存代理节点获取最新内容的数据文件,因此缓存代理节点会对所有其被代理节点需要的数据文件进行订阅。具体地,缓存代理节点在获取被代理进程发送的关于数据文件的数据访问请求时,向所述服务器发送关于所述数据文件的订阅请求,以在所述服务器的所述数据文件的内容更改时,从所述服务器获取对应于所述订阅请求的更改通知。由于缓存代理节点仅在获取数据访问请求时,才发送针对特定数据文件的订阅请求,使得订阅的数据文件均是其被代理进行实际使用到的,可以避免无效的订阅,节约处理资源。

仍以图1(a)所示的系统为例,缓存代理节点120在收到进程111发送的关于该数据文件A的数据访问请求,会向服务器130发送关于数据文件A的订阅请求,以完成对数据文件A的订阅,以确保后续能够收到数据文件A的更改通知。在完成数据文件A的订阅后。相应地,在服务器130中,在接收到订阅请求后,会对每个订阅了数据文件A的缓存代理节点(包括缓存代理节点120)的信息进行保存。当数据文件A的内容变更时,会向订阅了数据文件A的所有缓存代理节点发送更改通知。缓存代理节点120在接收到更改通知后,会将数据文件A的状态设置为Dirty,使得下次处理被代理进程的关于数据文件A的数据访问请求时,向对该数据文件A的内容进行更新。

优选地,缓存代理节点获取服务器发送的关于数据文件的更改通知,包括:缓存代理节点通过缓存代理节点与服务器之间的心跳通信获取服务器发送的关于数据文件的更改通知。由于在实际应用中,缓存代理节点和服务器之间会通过心跳通信来确认双方是否仍然在线。由此缓存代理节点和服务器之间可以利用定时收发的心跳信号来传输关于数据文件的更改通知,利用现有的定时通信实现信息的传递,节约通信资源的开支。例如服务器会在收到缓存代理节点的心跳请求(Heartbeat Request)之后,向其发送心跳回复(Heartbeat Response),当服务器需要发送更改通知时,可以将更改通知的信息写入心跳回复中,使得缓存代理节点在收到心跳回复时,即可获得更改通知。

进一步地,所述缓存代理节点的缓存基于非易失性的存储介质,例如 PCM(Phase-Change Random Access Memory,相变随机存取存储器),使得缓存代理节点重启后,其缓存内保存的数据文件不会丢失,从而减少缓存预热(warm up)的次数,增强整个系统的鲁棒性。

基于本申请的另一方面,本申请实施例提供的一种缓存数据共享的缓存代理节点的结构如图4所示,包括请求获取装置410和文件发送装置420。具体地,请求获取装置410用于获取被代理进程发送的关于数据文件的数据访问请求,其中,所述被代理进程包括所述缓存代理节点负责管理的计算节点上的多个进程,例如前述图1(a)中的进程111、112、113均为缓存代理节点120的被代理进程。文件发送装置420用于根据所述数据访问请求向所述被代理进程发送所述数据文件。

相应地,本申请实施例提供的一种缓存数据共享的计算节点的结构如图5所示,包括请求发送装置510和文件获取装置520。具体地,请求发送装置510用于控制所述计算节点的被代理进程向缓存代理节点发送关于数据文件的数据访问请求。文件获取装置520用于控制所述被代理进程接收所述缓存代理节点根据所述数据访问请求发送的所述数据文件。

通过缓存代理节点来管理一个或者多个计算节点上的进程,这些被代理进程需要使用的数据文件均保存于缓存代理节点的缓存中,因此计算节点上的进程无需维持自己独立的缓存空间,对于缓存代理节点缓存中的某个特定数据文件可以实现对多个进程的共享,节约了缓存与计算资源。例如,以图1(a)所示的系统为例,进程111、112、113均缓存代理节点120的被代理进程,其运行过程中需要的数据文件均保存在缓存代理节点120的缓存中,对于三个进程均需要使用的数据文件A。若采用现有的方式,每个进程均维持自己独立的缓存,进程111、112和113均需要在其独立的缓存中保存一个数据文件A,即需要保存三份相同的数据文件A,而采用缓存代理节点后,由于三个进程可以共用缓存代理节点缓存中的数据文件A,此时仅需要保存一份数据文件A即可,由此节约了缓存和计算资源。

此外,由于被代理进程无需再与服务器直接建立连接,对于同一缓存代理节点管理下的多个进程,仅需与服务器建立一个连接即可,由此减少了因为订阅行为带来的大量到服务器的连接,减轻服务器的负载。仍以图 1(a)所示的系统为例,若采用现有的方式,每个进程均维持自己独立的到服务器130的连接,此时服务器130需要管理三个连接,而采用缓存代理节点后,三个进程的订阅行为统一通过缓存代理节点完成,因此服务器130仅需要管理服务器130与缓存代理节点120之间的一个连接即可,由此减轻服务器的负载。

由于数据文件在缓存代理节点缓存中的存储状况不同,缓存代理节点根据会采用不同的方式向所述被代理进程发送所述数据文件。为此,本申请实施例还提供了一种优选的缓存数据共享的缓存代理节点,结合图4,该缓存代理节点端中的文件发送装置的结构如图6所示,包括:查找模块421和发送模块422。具体地,查找模块421用于根据所述数据访问请求在所述缓存代理节点的缓存中查找所述数据文件;发送模块422用于若所述缓存代理节点的缓存中存在所述数据文件,且所述数据文件的状态为最新,则向所述被代理进程发送所述数据文件;以及若所述缓存代理节点的缓存中不存在所述数据文件,或所述缓存代理节点的缓存中的所述数据文件的状态为非最新,则向服务器发送关于所述数据文件的数据获取请求,并在接收到所述服务器根据所述数据获取请求发送的数据文件之后,向所述被代理进程发送由服务器接收到的数据文件。

优选地,所述数据访问请求可以包含所述数据文件的标识信息;相应地,查找模块421,具体用于根据所述数据访问请求中所述数据文件的标识信息在所述缓存代理节点的缓存中查找所述数据文件。其中,所述标识信息可以是任意可以唯一标识所述数据文件的信息,例如本实施例中所采用的标识信息为所述数据文件的路径信息。在查找数据文件时,缓存代理节点的查找模块421根据数据访问请求中包含的路径信息在缓存中进行匹配查找,若在缓存中匹配到某一数据文件具有相同的路径信息,则可以确定缓存中存在所述数据访问请求对应的数据文件。由此,可以准确快速地确定数据文件在缓存代理节点缓存中的存储状况不同,进而采取不同的方式向所述被代理进程发送所述数据文件。在此,本领域技术人员应当理解,上述路径信息作为数据文件的标识信息的方式为举例,其他现有的或今后可能出现的标识信息的实现方式如可适用于本发明,也应包含在本发明保 护范围以内,并在此以引用方式包含于此。

当缓存代理节点根据所述数据访问请求在缓存中查找所述数据文件后,可能存在以下几种存储状况:一、缓存中存在所述数据文件,且该数据文件的状态为最新(即在服务器中该数据文件的内容与在缓存中的内容一致);二、缓存中存在所述数据文件,但是该数据文件的状态为非最新(即在服务器中该数据文件的内容已经更改,但是缓存中还未更改);三、缓存中不存在所述数据文件。

对于第一种情况,可以直接根据数据访问请求将缓存中最新内容的数据文件发给计算节点的进程。以图1(a)所示的系统为例,其缓存代理节点120接收到计算节点110中的进程111发送的关于数据文件A的数据访问请求后,会根据该数据访问请求在缓存中查找数据文件A。在该系统中,缓存代理节点120缓存中的文件状态可以采用Update和Dirty表示,其中Update表示数据文件状态为最新,Dirty表示数据文件的状态为非最新。若为前述的第一种情况,缓存中存在数据文件A,且该数据文件A的状态为Update,则缓存代理节点120直接将缓存中的数据文件A发送给进程111。

而对于第二和第三种情况,缓存代理节点需要向服务器发送关于所述数据文件的数据获取请求,以获取最新内容的数据文件。仍以前述系统为例,若代理缓存节点120的缓存中不存在数据文件A或者缓存中存在数据文件A但该数据文件A的状态为Dirty,则缓存代理节点120会向服务器130发送数据获取请求,服务器130根据数据获取请求向缓存代理节点120发送最新内容的数据文件A,由此缓存代理节点120在接收到该数据文件A后,将其发送给进程111。

进一步地,所述文件发送装置420还包括缓存更新模块(未示出),缓存代理节点在接收到所述服务器根据所述数据获取请求发送的数据文件之后,还会对缓存进行更新,以便在接到其它关于同一数据文件的数据访问请求时,能够直接在缓存中找到最新内容的所述数据文件,而无需再访问服务器,以便解决处理资源,减轻服务器负载。具体地,缓存更新模块于在接收到所述服务器根据所述数据获取请求发送的数据文件之后,若 所述缓存代理节点的缓存中不存在所述数据文件,则在缓存中保存由服务器接收到的数据文件,并将所述数据文件的状态设置为最新;若所述缓存代理节点的缓存中的所述数据文件的状态为非最新,则更新缓存中的所述数据文件,并将所述数据文件的状态设置为最新。接上例,缓存代理节点120在接收到服务器130发送的该数据文件A后,若代理缓存节点120在先前的查找过程中发现缓存中不存在数据文件A,则直接在缓存中保存数据文件A,并将其状态设置为Update;若在先前的查找过程中发现缓存中的数据文件A的状态为Dirty,则根据接收到的数据文件A,对原数据文件A的内容进行更新,同时将其状态置为Update。

由于在分布式场景下,服务器中数据文件的内容随时可能发生变化,因此需要对缓存中的数据文件的状态进行实时的更新,以保证计算节点的进程可以获取到最新内容的数据文件。由此,本申请实施例还提供了一种另一种优选的缓存数据共享的缓存代理节点,该缓存代理节点如图7所示,除图4所示的请求获取装置410和文件发送装置420之外,还包括通知获取装置430。具体地,通知获取装置430用于获取服务器发送的关于数据文件的更改通知,根据所述更改通知将所述数据文件的状态设置为非最新。在此,本领域技术人员应当理解,所述请求获取装置410和文件发送装置420分别与图4实施例中对应装置的内容相同或基本相同,为简明起见,故在此不再赘述,并以引用的方式包含于此。

在实际应用中,缓存中数据文件状态的更新可以通过订阅的方式实现。由于所有被代理进程通过其对应的缓存代理节点获取最新内容的数据文件,因此缓存代理节点会对所有其被代理节点需要的数据文件进行订阅。具体地,缓存代理节点还可以包括订阅装置(未示出),该订阅装置用于在获取被代理进程发送的关于数据文件的数据访问请求时,向所述服务器发送关于所述数据文件的订阅请求,以在所述服务器的所述数据文件的内容更改时,从所述服务器获取对应于所述订阅请求的更改通知。由于缓存代理节点仅在获取数据访问请求时,才发送针对特定数据文件的订阅请求,使得订阅的数据文件均是其被代理进行实际使用到的,可以避免无效的订阅,节约处理资源。

仍以图1(a)所示的系统为例,缓存代理节点120在收到进程111发送的关于该数据文件A的数据访问请求,会向服务器130发送关于数据文件A的订阅请求,以完成对数据文件A的订阅,以确保后续能够收到数据文件A的更改通知。在完成数据文件A的订阅后。相应地,在服务器130中,在接收到订阅请求后,会对每个订阅了数据文件A的缓存代理节点(包括缓存代理节点120)的信息进行保存。当数据文件A的内容变更时,会向订阅了数据文件A的所有缓存代理节点发送更改通知。缓存代理节点120在接收到更改通知后,会将数据文件A的状态设置为Dirty,使得下次处理被代理进程的关于数据文件A的数据访问请求时,向对该数据文件A的内容进行更新。

优选地,所述通知获取装置具体用于通过缓存代理节点与服务器之间的心跳通信获取服务器发送的关于数据文件的更改通知。由于在实际应用中,缓存代理节点和服务器之间会通过心跳通信来确认双方是否仍然在线。由此缓存代理节点和服务器之间可以利用定时收发的心跳信号来传输关于数据文件的更改通知,利用现有的定时通信实现信息的传递,节约通信资源的开支。例如服务器会在收到缓存代理节点的心跳请求(Heartbeat Request)之后,向其发送心跳回复(Heartbeat Response),当服务器需要发送更改通知时,可以将更改通知的信息写入心跳回复中,使得缓存代理节点在收到心跳回复时,即可获得更改通知。

进一步地,所述缓存代理节点的缓存基于非易失性的存储介质,例如PCM,使得缓存代理节点重启后,其缓存内保存的数据文件不会丢失,从而减少缓存预热(warm up)的次数,增强整个系统的鲁棒性。

本实施例以图1(a)所示的系统为例,对缓存数据共享过程中系统的各设备之间的交互流程进行详细说明,具体如图8所示:

步骤S801,计算节点110中的进程111向缓存代理节点120发送数据访问请求。该数据访问请求里包含需要的数据文件的路径信息。

步骤S802,缓存代理节点120接收到数据访问请求后,根据数据文件的路径信息在自身的缓存中查找是否存在这一数据文件;本步骤中,可能会存在三种查找结果,对应三种查找结果,分别执行不同的后续步骤。若 缓存中存在数据文件,且数据文件的状态为Update,则执行步骤S806;若缓存中存在数据文件,且数据文件的状态为Dirty,则执行步骤S803;若缓存中不存在数据文件,则执行步骤S803。

步骤S803,缓存代理节点120向服务器130发送数据获取请求。

步骤S804,服务器130根据数据获取请求将对应的数据文件发送给缓存代理节点120。

步骤S805,缓存代理节点120根据接收到的数据文件更新自身的缓存,若数据文件原来已经存在,则更新其内容,并将状态由Dirty置为Update;若数据文件原来不存在,则直接保存至缓存,并将状态设置为Update。

步骤S806,缓存代理节点120将缓存中的数据文件发送给计算节点110的进程111。

另一方面,缓存代理节点在接收到数据访问请求后,同时执行步骤S807,向服务器130发送订阅请求。

步骤S808,服务器130在接收到订阅请求后,完成对对应数据文件的订阅。若服务器130中该数据文件的内容发生变化,则服务器会130会向订阅该数据文件的缓存代理节点120发送更改通知。

步骤S809,缓存代理节点120根据更改通知,数据文件的状态设置为Dirty。

综上所述,通过缓存代理节点来管理一个或者多个计算节点上的进程,这些被代理进程需要使用的数据文件均保存于缓存代理节点的缓存中,因此计算节点上的进程无需维持自己独立的缓存空间,对于缓存代理节点缓存中的某个特定数据文件可以实现对多个进程的共享,节约了缓存与计算资源;同时被代理进程无需再与服务器直接建立连接,对于同一缓存代理节点管理下的多个进程,仅需与服务器建立一个连接即可,由此减少了因为订阅行为带来的大量到服务器的连接,减轻服务器的负载。

需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现 上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。

另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。

对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1