基于分布式系统的数据访问方法和装置转让专利

申请号 : CN201510795090.2

文献号 : CN106713250B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 林沐晖陈立钢董益兼

申请人 : 杭州华为数字技术有限公司

摘要 :

本发明公开了一种基于分布式系统的数据访问方法和装置,属于分布式系统领域。所述方法包括:当第一分布式节点接收到写指令时,将第一分布式节点缓存的目标数据替换为写指令携带的写数据,第一分布式节点基于存储的第一元数据,从当前所在分布式系统包括的分布式节点标识中,获取第二分布式节点标识,第一分布式节点基于第二分布式节点标识,将写数据发送给第二分布式节点,使第二分布式节点对缓存的目标数据进行更新。本发明中分布式节点无需对共享资源加分布式锁,所以其他分布式节点也无需耗费大量时间来等待分布式锁的解锁,提高了分布式系统的运行效率。

权利要求 :

1.一种基于分布式系统的数据访问方法,其特征在于,所述方法包括:

当第一分布式节点接收到写指令时,将所述第一分布式节点缓存的目标数据替换为所述写指令携带的写数据,所述写指令用于对所述目标数据进行访问;

所述第一分布式节点基于存储的第一元数据,从当前所在分布式系统包括的分布式节点标识中,获取第二分布式节点标识,第二分布式节点为缓存有所述目标数据的分布式节点,所述第一元数据为所述目标数据的元数据,且所述第一元数据包括所述目标数据的属性信息、缓存有所述目标数据的分布式节点标识和所述目标数据的状态信息;

所述第一分布式节点基于所述第二分布式节点标识,将所述写数据发送给所述第二分布式节点,使所述第二分布式节点对缓存的所述目标数据进行更新。

2.如权利要求1所述的方法,其特征在于,所述第一分布式节点基于所述第二分布式节点标识,将所述写数据发送给所述第二分布式节点之后,还包括:所述第一分布式节点向第三分布式节点发送数据更新请求,所述数据更新请求携带第一全局地址和所述写数据,使所述第三分布式节点基于所述第一全局地址和所述写数据,更新共享资源中的所述目标数据,所述第三分布式节点为存储所述目标数据所在共享资源的节点,所述第一全局地址为所述目标数据的全局地址,且所述第一全局地址为所述第一分布式节点从存储的全局资源视图中获取得到。

3.如权利要求1所述的方法,其特征在于,所述第一分布式节点将缓存的目标数据替换为所述写指令携带的写数据之前,还包括:所述第一分布式节点接收读指令,所述读指令中携带第一全局地址和第三分布式节点标识;

所述第一分布式节点基于所述第三分布式节点标识,向第三分布式节点发送第一读请求,所述第一读请求中携带所述第一全局地址,使所述第三分布式节点基于所述第一全局地址返回所述目标数据;

当所述第一分布式节点接收到所述第三分布式节点返回的所述目标数据时,将所述目标数据进行缓存。

4.如权利要求3所述的方法,其特征在于,所述第一分布式节点接收读指令之前,还包括:当所述第一分布式节点上电启动且所述第一分布式节点为所述分布式系统的主节点时,所述第一分布式节点接收已上电分布式节点发送的共享资源配置信息,所述共享资源配置信息中包括所述已上电分布式节点上存储的共享资源所占的存储空间;

所述第一分布式节点基于所述已上电分布式节点上存储的共享资源所占的存储空间,为所述已上电分布式节点分别分配一个全局地址空间;

所述第一分布式节点基于所述已上电分布式节点对应的全局地址空间,生成全局资源视图,所述全局共享资源视图中存储有共享资源标识与全局地址之间的对应关系;

所述第一分布式节点将所述全局资源视图发送给所述分布式系统中的每个分布式节点。

5.如权利要求3所述的方法,其特征在于,所述第一分布式节点接收读指令之前,还包括:当所述第一分布式节点上电启动且所述第一分布式节点不为所述分布式系统中的主节点时,所述第一分布式节点向所述分布式系统的主节点发送共享资源配置信息,所述共享资源配置信息包括所述第一分布式节点中存储的共享资源所占的存储空间,使所述主节点基于所述存储空间返回全局资源视图;

所述第一分布式节点接收所述主节点发送的全局资源视图。

6.如权利要求5所述的方法,其特征在于,所述第一分布式节点接收所述主节点发送的全局资源视图之后,还包括:所述第一分布式节点从所述全局资源视图中,获取所述主节点为所述第一分布式节点分配的全局地址空间;

所述第一分布式节点将所述全局地址空间中的每个全局地址映射为系统地址;

存储全局地址与系统地址之间的映射关系。

7.如权利要求1-6任一权利要求所述的方法,其特征在于,所述方法还包括:当所述第一分布式节点接收到第四分布式节点发送的第二读请求时,所述第一分布式节点基于所述第二读请求携带的第二全局地址,从存储的全局地址与系统地址之间的映射关系中,获取对应的系统地址;

所述第一分布式节点基于所述系统地址,从存储的共享资源中,获取对应的数据;

所述第一分布式节点将获取的数据发送给所述第四分布式节点,使所述第四分布式节点将所述数据进行缓存。

8.如权利要求1-6任一权利要求所述的方法,其特征在于,所述方法还包括:当所述第一分布式节点为所述分布式系统的主节点且检测到所述分布式系统的从节点掉电时,基于所述从节点的标识,更新存储的全局资源视图,以及更新第三元数据和第四元数据,所述第三元数据为所述从节点上缓存的数据的元数据,所述第四元数据为缓存有所述从节点上存储的共享资源的元数据;

所述第一分布式节点将更新后的全局资源视图发送给所述分布式系统中的每个分布式节点,将更新后的第三元数据发送给第五分布式节点,以及将更新后的第四元数据发送给第六分布式节点,所述第五分布式节点为缓存有所述从节点上缓存的数据的分布式节点,所述第六分布式节点为缓存有所述从节点上共享资源的分布式节点。

9.一种基于分布式系统的数据访问装置,其特征在于,所述装置包括:

替换模块,用于当第一分布式节点接收到写指令时,将所述第一分布式节点缓存的目标数据替换为所述写指令携带的写数据,所述写指令用于对所述目标数据进行访问;

第一获取模块,用于所述第一分布式节点基于存储的第一元数据,从当前所在分布式系统包括的分布式节点标识中,获取第二分布式节点标识,第二分布式节点为缓存有所述目标数据的分布式节点,所述第一元数据为所述目标数据的元数据,且所述第一元数据包括所述目标数据的属性信息、缓存有所述目标数据的分布式节点标识和所述目标数据的状态信息;

第一发送模块,用于所述第一分布式节点基于所述第二分布式节点标识,将所述写数据发送给所述第二分布式节点,使所述第二分布式节点对缓存的所述目标数据进行更新。

10.如权利要求9所述的装置,其特征在于,所述装置还包括:

第二发送模块,用于所述第一分布式节点向第三分布式节点发送数据更新请求,所述数据更新请求携带第一全局地址和所述写数据,使所述第三分布式节点基于所述第一全局地址和所述写数据,更新共享资源中的所述目标数据,所述第三分布式节点为存储所述目标数据所在共享资源的节点,所述第一全局地址为所述目标数据的全局地址,且所述第一全局地址为所述第一分布式节点从存储的全局资源视图中获取得到。

11.如权利要求9所述的装置,其特征在于,所述装置还包括:

第一接收模块,用于所述第一分布式节点接收读指令,所述读指令中携带第一全局地址和第三分布式节点标识;

第三发送模块,用于所述第一分布式节点基于所述第三分布式节点标识,向第三分布式节点发送第一读请求,所述第一读请求中携带所述第一全局地址,使所述第三分布式节点基于所述第一全局地址返回所述目标数据;

缓存模块,用于当所述第一分布式节点接收到所述第三分布式节点返回的所述目标数据时,将所述目标数据进行缓存。

12.如权利要求11所述的装置,其特征在于,所述装置还包括:

第二接收模块,用于当所述第一分布式节点上电启动且所述第一分布式节点为所述分布式系统的主节点时,所述第一分布式节点接收已上电分布式节点发送的共享资源配置信息,所述共享资源配置信息中包括所述已上电分布式节点上存储的共享资源所占的存储空间;

分配模块,用于所述第一分布式节点基于所述已上电分布式节点上存储的共享资源所占的存储空间,为所述已上电分布式节点分别分配一个全局地址空间;

生成模块,用于所述第一分布式节点基于所述已上电分布式节点对应的全局地址空间,生成全局资源视图,所述全局共享资源视图中存储有共享资源标识与全局地址之间的对应关系;

第四发送模块,用于所述第一分布式节点将所述全局资源视图发送给所述分布式系统中的每个分布式节点。

13.如权利要求11所述的装置,其特征在于,所述装置还包括:

第五发送模块,用于当所述第一分布式节点上电启动且所述第一分布式节点不为所述分布式系统中的主节点时,所述第一分布式节点向所述分布式系统的主节点发送共享资源配置信息,所述共享资源配置信息包括所述第一分布式节点中存储的共享资源所占的存储空间,使所述主节点基于所述存储空间返回全局资源视图;

第三接收模块,用于所述第一分布式节点接收所述主节点发送的全局资源视图。

14.如权利要求13所述的装置,其特征在于,所述装置还包括:

第二获取模块,用于所述第一分布式节点从所述全局资源视图中,获取所述主节点为所述第一分布式节点分配的全局地址空间;

映射模块,所述第一分布式节点将所述全局地址空间中的每个全局地址映射为系统地址;

存储模块,用于存储全局地址与系统地址之间的映射关系。

15.如权利要求9-14任一权利要求所述的装置,其特征在于,所述装置还包括:第三获取模块,当所述第一分布式节点接收到第四分布式节点发送的第二读请求时,所述第一分布式节点基于所述第二读请求携带的第二全局地址,从存储的全局地址与系统地址之间的映射关系中,获取对应的系统地址;

第四获取模块,所述第一分布式节点基于所述系统地址,从存储的共享资源中,获取对应的数据;

第六发送模块,所述第一分布式节点将获取的数据发送给所述第四分布式节点,使所述第四分布式节点将所述数据进行缓存。

16.如权利要求9-14任一权利要求所述的装置,其特征在于,所述装置还包括:更新模块,当所述第一分布式节点为所述分布式系统的主节点且检测到所述分布式系统的从节点掉电时,基于所述从节点的标识,更新存储的全局资源视图,以及更新第三元数据和第四元数据,所述第三元数据为所述从节点上缓存的数据的元数据,所述第四元数据为缓存有所述从节点上存储的共享资源的元数据;

第七发送模块,所述第一分布式节点将更新后的全局资源视图发送给所述分布式系统中的每个分布式节点,将更新后的第三元数据发送给第五分布式节点,以及将更新后的第四元数据发送给第六分布式节点,所述第五分布式节点为缓存有所述从节点上缓存的数据的分布式节点,所述第六分布式节点为缓存有所述从节点上共享资源的分布式节点。

说明书 :

基于分布式系统的数据访问方法和装置

技术领域

[0001] 本发明涉及分布式系统领域,特别涉及一种基于分布式系统的数据访问方法和装置。

背景技术

[0002] 分布式系统是由多个自治的计算机节点作为分布式节点,通过通信网络组成的机群系统,该系统上的共享资源能够被分布式节点所访问。为了降低分布式节点数据访问的延迟、提升数据处理的吞吐量、减少对共享资源的访问压力,以及减少拥塞的可能,分布式节点可以在读取处于分布式系统中的共享资源时,暂时将读取的数据进行缓存,当该分布式节点需要再次读取该共享资源时只需读取缓存的数据即可。但当某个分布式节点修改该共享资源时,其它分布式节点从缓存中读取的数据未必会是最新的数据。因此,亟需一种基于分布式系统的数据访问方法。
[0003] 现有相关技术中,都是通过分布式锁来进行分布式系统的数据访问。即当第一分布式节点需要修改第二分布式节点上存储的共享资源时,第一分布式节点可以向第二分布式节点发送写请求,当第二分布式节点接收到该写请求时,对该共享资源加分布式锁,拒绝其他分布式节点访问该共享资源,然后第一分布式节点便可以对缓存的数据进行修改,并将修改后的数据发送给第二分布式节点,使第二分布式节点修改存储的共享资源,其中,第一分布式节点缓存的数据是事先从第二分布式节点的共享资源中读取得到。
[0004] 在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
[0005] 使用分布式锁来避免其他分布式节点访问该共享资源,降低了数据访问的并发性;另外,在第一分布式节点对该共享资源进行修改的过程中,由于第二分布式节点会对该共享资源加分布式锁,此时其他分布式节点只能等待该分布式锁解锁后才能再访问该共享资源,即其他分布式节点的需要消耗大量的时间来等待分布式锁的解锁,因此,降低了分布式系统的运行效率。

发明内容

[0006] 为了解决现有技术的问题,本发明实施例提供了一种基于分布式系统的数据访问方法和装置。所述技术方案如下:
[0007] 第一方面,提供了一种基于分布式系统的数据访问方法,所述方法包括:
[0008] 当第一分布式节点接收到写指令时,将所述第一分布式节点缓存的目标数据替换为所述写指令携带的写数据,所述写指令用于对所述目标数据进行访问;
[0009] 所述第一分布式节点基于存储的第一元数据,从当前所在分布式系统包括的分布式节点标识中,获取第二分布式节点标识,第二分布式节点为缓存有所述目标数据的分布式节点,所述第一元数据为所述目标数据的元数据,且所述第一元数据包括所述目标数据的属性信息、缓存有所述目标数据的分布式节点标识和所述目标数据的状态信息;
[0010] 所述第一分布式节点基于所述第二分布式节点标识,将所述写数据发送给所述第二分布式节点,使所述第二分布式节点对缓存的所述目标数据进行更新。
[0011] 在本发明实施例中,当第一分布式节点接收写指令时,将该第一分布式节点缓存的目标数据替换为写指令携带的写数据;由于第二分布式节点中也缓存有该目标数据,且第三分布式节点存储有该目标数据所在的共享资源,因此,第一分布式节点可以将该写数据发送给该第二分布式节点和第三分布式节点,同时将第二分布式节点存储的目标数据和第三分布式节点存储的共享资源进行更新,从而保证了分布式系统所有分布式节点所能获取到的目标数据的一致性。另外,该分布式系统中的分布式节点在进行数据访问时,无需对共享资源加分布式锁,所以其他分布式节点也无需耗费大量时间来等待分布式锁的解锁,提高了分布式系统的运行效率。
[0012] 结合第一方面,在上述第一方面的第一种可能的实现方式中,所述第一分布式节点基于所述第二分布式节点标识,将所述写数据发送给所述第二分布式节点之后,还包括:
[0013] 所述第一分布式节点向第三分布式节点发送数据更新请求,所述数据更新请求携带第一全局地址和所述写数据,使所述第三分布式节点基于所述第一全局地址和所述写数据,更新所述共享资源中的所述目标数据,所述第三分布式节点为存储所述目标数据所在共享资源的节点,所述第一全局地址为所述目标数据的全局地址,且所述第一全局地址为所述第一分布式节点从存储的全局资源视图中获取得到。
[0014] 其中,第三分布式节点为存储该目标数据所在的共享资源的分布式节点。当第三分布式节点将存储的共享资源中的目标数据更新之后,当该分布式系统中的其他分布式节点需要访问该目标数据时,便会访问最新的目标数据,保证访问的目标数据与其他第二分布式节点所缓存的目标数据一致。
[0015] 在上述第一方面的另一种可能的实现方式中,所述第一分布式节点基于所述第二分布式节点标识,将所述写数据发送给所述第二分布式节点之后,还包括:
[0016] 所述第一分布式节点基于所述写数据,将所述第一元数据中的状态信息进行更新,得到第二元数据;
[0017] 当所述第一分布式节点为所述分布式系统的主节点时,所述第一分布式节点将所述第二元数据发送给所述第二分布式节点,使所述第二分布式节点将存储的第一元数据替换为所述第二元数据。
[0018] 其中,第一元数据包括该目标数据的属性信息、缓存有该目标数据的分布式节点标识和该目标数据的状态信息,当更新目标数据时,可能会导致该目标数据的属性信息、状态信息等信息改变,从而与第一元数据包括的信息不一致,因此,当第一分布式节点更新目标数据时,可以将该目标数据的第一元数据更新为第二元数据,同时更新第二分布式节点和主节点中的第一元数据。
[0019] 需要说明的是,当第一分布式节点为主节点时,将该第二元数据发送给第二分布式节点。
[0020] 在上述第一方面的另一种可能的实现方式中,所述第一分布式节点基于所述写数据,将所述第一元数据中的状态信息进行更新,得到第二元数据之后,还包括:
[0021] 当所述第一分布式节点不为所述分布式系统的主节点时,所述第一分布式节点向所述分布式系统的主节点发送元数据更新请求,所述元数据更新请求中携带所述第二元数据,使所述主节点将存储的第一元数据替换为所述第二元数据,并将所述第二元数据发送给所述第二分布式节点,由所述第二分布式节点将存储的第一元数据替换为所述第二元数据;或者,
[0022] 当所述第一分布式节点不为所述分布式系统的主节点时,所述第一分布式节点分别向所述分布式系统的主节点和所述第二分布式节点发送元数据更新请求,所述元数据更新请求中携带所述第二元数据,使所述主节点和所述第二分布式节点分别将存储的第一元数据替换为所述第二元数据。
[0023] 其中,第一分布式节点可以从第一元数据中获得第二分布式节点标识,因此,第一分布式节点可以向主节点发送元数据更新请求,使得主节点将第一元数据更新为第二元数据之后,由主节点将第二元数据发送给第二分布式节点;或者,第一分布式节点分别向主节点和第二分布式节点发送元数据更新请求。
[0024] 结合第一方面或第一方面的第一种可能的实现方式,在上述第一方面的第二种可能的实现方式中,所述第一分布式节点将缓存的目标数据替换为所述写指令携带的写数据之前,还包括:
[0025] 所述第一分布式节点接收读指令,所述读指令中携带第一全局地址和第三分布式节点标识;
[0026] 所述第一分布式节点基于所述第三分布式节点标识,向第三分布式节点发送第一读请求,所述第一读请求中携带所述第一全局地址,使所述第三分布式节点基于所述第一全局地址返回所述目标数据;
[0027] 当所述第一分布式节点接收到所述第三分布式节点返回的所述目标数据时,将所述目标数据进行缓存。
[0028] 其中,该第一全局地址为该目标数据在第三分布式节点存储的共享资源中的地址,因此,第一分布式节点可以基于该第一全局地址获取并缓存该目标数据。
[0029] 结合第一方面的第二种可能的实现方式,在上述第一方面的第三种可能的实现方式中,所述第一分布式节点接收读指令之前,还包括:
[0030] 当所述第一分布式节点上电启动且所述第一分布式节点为所述分布式系统的主节点时,所述第一分布式节点接收已上电分布式节点发送的共享资源配置信息,所述共享资源配置信息中包括所述已上电分布式节点上存储的共享资源所占的存储空间;
[0031] 所述第一分布式节点基于所述已上电分布式节点上存储的共享资源所占的存储空间,为所述已上电分布式节点分别分配一个全局地址空间;
[0032] 所述第一分布式节点基于所述已上电分布式节点对应的全局地址空间,生成全局资源视图,所述全局共享资源视图中存储有共享资源标识与全局地址之间的对应关系;
[0033] 所述第一分布式节点将所述全局资源视图发送给所述分布式系统中的每个分布式节点。
[0034] 其中,第一分布式节点可以是分布式系统中的任一个节点,且主节点由该分布式系统中的分布式节点运行选举法或者指定产生,因此第一分布式节点可以是该分布式系统的主节点。当该第一分布式节点为主节点时,根据其它分布式节点发送的共享资源配置信息,为每个共享资源分配全局地址空间,使得该分布式系统中的每一个分布式节点都可以基于该全局地址空间访问到每一个共享资源。
[0035] 需要说明的是,共享资源配置信息可以包括共享资源所需的存储空间,当然根据该分布式系统的需要,还可以包括该共享资源的属性信息、所在分布式节点的存储介质等信息,然后由主节点根据这些信息对该共享资源分类,例如根据该共享资源所在的分布式节点的存储介质,将该共享资源分为快速存储介质中的共享资源和慢速存储介质中的共享资源,然后基于分类后的共享资源,对全局地址空间进行分段,将同一类的共享资源分配在同一段全局地址空间中,使得该分布式系统中的共享资源分布更加规律,便于管理。
[0036] 在上述第一方面的另一种可能的实现方式中,所述第一分布式节点将所述全局资源视图发送给所述分布式系统中的每个分布式节点之后,还包括:
[0037] 所述第一分布式节点每监听到一个新增分布式节点上电启动且接收到所述新增分布式节点发送的共享资源配置信息时,基于所述分布式节点存储的共享资源所占的存储空间,为所述新增分布式节点分配一个全局地址空间;
[0038] 所述第一分布式节点基于所述新增分布式节点对应的全局地址空间,更新所述全局资源视图;
[0039] 所述第一分布式节点将所述更新后的全局资源视图发送给所述分布式系统中的每个分布式节点。
[0040] 其中,当第一分布式节点为主节点时,可以监听到新增分布式节点上电启动,并接收该新增分布式节点发送的共享资源配置信息,为该共享资源分配去全局地址,更新全局资源视图,能够不断丰富该分布式系统的内容,在数据一致性的前提下,支持动态增加分布式节点。
[0041] 结合第一方面的第二种可能的实现方式,在上述第一方面的第四种可能的实现方式中,所述第一分布式节点接收读指令之前,还包括:
[0042] 当所述第一分布式节点上电启动且所述第一分布式节点不为所述分布式系统中的主节点时,所述第一分布式节点向所述分布式系统的主节点发送共享资源配置信息,所述共享资源配置信息包括所述第一分布式节点中存储的共享资源所占的存储空间,使所述主节点基于所述存储空间返回全局资源视图;
[0043] 所述第一分布式节点接收所述主节点发送的全局资源视图。
[0044] 其中,第一分布式节点向主节点发送资源配置信息,共享资源配置信息包括第一分布式节点中存储的共享资源所占的存储空间,使得主节点为该共享中资源分配与该存储空间相应大小的全局地址,保证了每个共享资源都能够获得一个全局地址。
[0045] 结合第一方面的第四种可能的实现方式,在上述第一方面的第五种可能的实现方式中,所述第一分布式节点接收所述主节点发送的全局资源视图之后,还包括:
[0046] 所述第一分布式节点从所述全局资源视图中,获取所述主节点为所述第一分布式节点分配的全局地址空间;
[0047] 所述第一分布式节点将所述全局地址空间中的每个全局地址映射为系统地址;
[0048] 存储全局地址与系统地址之间的映射关系。
[0049] 需要说明的是,第一分布式节点可以直接通过系统地址访问该第一分布式节点存储的共享资源;而分布式系统中的其它分布式节点只存储有该共享资源标识所对应的全局地址,因此,第一分布式节点将主节点分配的全局地址映射为系统地址,使得该分布式系统中的其它节点可以通过该全局地址访问到该共享资源,提高了分布式节点访问共享资源的准确性。
[0050] 在上述第一方面的另一种可能的实现方式中,所述第一分布式节点基于存储的第一元数据,从当前所在分布式系统包括的分布式节点标识中,获取第二分布式节点标识之前,还包括:
[0051] 当所述第一分布式节点为所述分布式系统的主节点时,所述第一分布式节点将第一分布式节点标识添加到缓存有所述目标数据的分布式节点标识中;
[0052] 所述第一分布式节点基于所述目标数据的属性信息、缓存有所述目标数据的分布式节点标识和所述目标数据的状态信息,生成所述第一元数据。
[0053] 其中,该目标数据的属性信息可以是该目标数据对应的共享资源的配置信息、该目标数据对应的共享资源所在的全局地址空间等。
[0054] 需要说明的是,主节点存储有该分布式系统中所有缓存的数据的元数据,因此,当第一分布式节点为主节点时,该第一分布式节点基于目标数据的属性信息、缓存有目标数据的分布式节点标识和目标数据的状态信息,生成所述第一元数据。
[0055] 在上述第一方面的另一种可能的实现方式中,所述第一分布式节点基于存储的第一元数据,从当前所在分布式系统包括的分布式节点标识中,获取第二分布式节点标识之前,还包括:
[0056] 当所述第一分布式节点不为所述分布式系统的主节点时,所述第一分布式节点向所述分布式系统的主节点发送元数据获取请求,所述元数据获取请求中携带所述目标数据的属性信息,使所述主节点基于所述目标数据的属性信息返回所述第一元数据;
[0057] 所述第一分布式节点接收所述主节点返回的所述第一元数据。
[0058] 其中,第一分布式节点可以是在缓存该目标数据时向分布式系统的主节点发送元数据获取请求,也可以是该第一分布式节点在将缓存的该目标数据替换为写数据时向分布式系统的主节点发送元数据获取请求。
[0059] 结合第一方面至第一方面的第五种可能的实现方式中的任一种实现方式,在上述第一方面的第六种可能的实现方式中,所述方法还包括:
[0060] 当所述第一分布式节点接收到第四分布式节点发送的第二读请求时,所述第一分布式节点基于所述第二读请求携带的第二全局地址,从存储的全局地址与系统地址之间的映射关系中,获取对应的系统地址;
[0061] 所述第一分布式节点基于所述系统地址,从存储的共享资源中,获取对应的数据;
[0062] 所述第一分布式节点将获取的数据发送给所述第四分布式节点,使所述第四分布式节点将所述数据进行缓存。
[0063] 需要说明的是,由于分布式系统中的每一个分布式节点都可以访问该分布式系统的每一个共享资源,因此,该第一分布式节点也可以接收第四分布式节点的都请求,将该第一分布式节点存储的共享资源发送给第四节点,当然也可以接收第四分布式节点的写数据,从而更新该第一分布式节点存储的共享资源。
[0064] 结合第一方面至第一方面的第六种可能的实现方式中的任一种实现方式,在上述第一方面的第七种可能的实现方式中,所述方法还包括:
[0065] 当所述第一分布式节点为所述分布式系统的主节点且检测到所述分布式系统的从节点掉电时,基于所述从节点的标识,更新存储的全局资源视图,以及更新第三元数据和第四元数据,所述第三元数据为所述从节点上缓存的数据的元数据,所述第四元数据为缓存有所述从节点上存储的共享资源的元数据;
[0066] 所述第一分布式节点将更新后的全局资源视图发送给所述分布式系统中的每个分布式节点,将更新后的第三元数据发送给第五分布式节点,以及将更新后的第四元数据发送给第六分布式节点,所述第五分布式节点为缓存有所述从节点上缓存的数据的分布式节点,所述第六分布式节点为缓存有所述从节点上共享资源的分布式节点。
[0067] 需要说明的是,当该第一分布式节点是主节点时,可以检测到新增节点上电启动,当然也可以检测到分布式系统中的节点掉电。
[0068] 其中,当检测到分布式节点掉电时,该第一分布式节点更新元数据,删除该掉电分布式节点的共享资源标识和全局地址空间的对应关系,从而更新全局资源视图,保证了该全局资源视图的准确性。
[0069] 在上述第一方面的另一种可能的实现方式中,所述方法还包括:
[0070] 当所述第一分布式节点为所述分布式系统的从节点且检测到所述分布式系统的主节点掉电时,从当前未掉电的从节点中,选择一个新主节点;
[0071] 所述第一分布式节点将存储的元数据发送给所述新主节点。
[0072] 需要说明的是,当第一分布式节点为该分布式系统主节点且需要掉电时,该第一分布式节点也可以在当前从当前未掉电的从节点中,选择一个新主节点,将存储的元数据发送给新主节点,然后该第一分布式节点掉电,当新主节点监测到第一分布式节点掉电,更新全局资源视图,并将该全局资源视图发送给其它分布式节点,增强了分布式系统的稳定性。
[0073] 第二方面,提供了一种基于分布式系统的数据访问装置,所述装置包括:
[0074] 替换模块,用于当第一分布式节点接收到写指令时,将所述第一分布式节点缓存的目标数据替换为所述写指令携带的写数据,所述写指令用于对所述目标数据进行访问;
[0075] 第一获取模块,用于所述第一分布式节点基于存储的第一元数据,从当前所在分布式系统包括的分布式节点标识中,获取第二分布式节点标识,第二分布式节点为缓存有所述目标数据的分布式节点,所述第一元数据为所述目标数据的元数据,且所述第一元数据包括所述目标数据的属性信息、缓存有所述目标数据的分布式节点标识和所述目标数据的状态信息;
[0076] 第一发送模块,用于所述第一分布式节点基于所述第二分布式节点标识,将所述写数据发送给所述第二分布式节点,使所述第二分布式节点对缓存的所述目标数据进行更新。
[0077] 结合第二方面,在上述第二方面的第一种可能的实现方式中,所述装置还包括:
[0078] 第二发送模块,用于所述第一分布式节点向第三分布式节点发送数据更新请求,所述数据更新请求携带第一全局地址和所述写数据,使所述第三分布式节点基于所述第一全局地址和所述写数据,更新所述共享资源中的所述目标数据,所述第三分布式节点为存储所述目标数据所在共享资源的节点,所述第一全局地址为所述目标数据的全局地址,且所述第一全局地址为所述第一分布式节点从存储的全局资源视图中获取得到。
[0079] 在上述第二方面的另一种可能的实现方式中,所述装置还用于:
[0080] 所述第一分布式节点基于所述写数据,将所述第一元数据中的状态信息进行更新,得到第二元数据;
[0081] 当所述第一分布式节点为所述分布式系统的主节点时,所述第一分布式节点将所述第二元数据发送给所述第二分布式节点,使所述第二分布式节点将存储的第一元数据替换为所述第二元数据。
[0082] 在上述第二方面的另一种可能的实现方式中,所述装置还用于:
[0083] 当所述第一分布式节点不为所述分布式系统的主节点时,所述第一分布式节点向所述分布式系统的主节点发送元数据更新请求,所述元数据更新请求中携带所述第二元数据,使所述主节点将存储的第一元数据替换为所述第二元数据,并将所述第二元数据发送给所述第二分布式节点,由所述第二分布式节点将存储的第一元数据替换为所述第二元数据;或者,
[0084] 当所述第一分布式节点不为所述分布式系统的主节点时,所述第一分布式节点分别向所述分布式系统的主节点和所述第二分布式节点发送元数据更新请求,所述元数据更新请求中携带所述第二元数据,使所述主节点和所述第二分布式节点分别将存储的第一元数据替换为所述第二元数据。
[0085] 结合第二方面或第二方面的第一种可能的实现方式中的任一种实现方式,在上述第二方面的第二种可能的实现方式中,所述装置还包括:
[0086] 第一接收模块,用于所述第一分布式节点接收读指令,所述读指令中携带第一全局地址和第三分布式节点标识;
[0087] 第三发送模块,用于所述第一分布式节点基于所述第三分布式节点标识,向第三分布式节点发送第一读请求,所述第一读请求中携带所述第一全局地址,使所述第三分布式节点基于所述第一全局地址返回所述目标数据;
[0088] 缓存模块,用于当所述第一分布式节点接收到所述第三分布式节点返回的所述目标数据时,将所述目标数据进行缓存。
[0089] 结合第二方面的第二种可能的实现方式,在上述第二方面的第三种可能的实现方式中,所述装置还包括:
[0090] 第二接收模块,用于当所述第一分布式节点上电启动且所述第一分布式节点为所述分布式系统的主节点时,所述第一分布式节点接收已上电分布式节点发送的共享资源配置信息,所述共享资源配置信息中包括所述已上电分布式节点上存储的共享资源所占的存储空间;
[0091] 分配模块,用于所述第一分布式节点基于所述已上电分布式节点上存储的共享资源所占的存储空间,为所述已上电分布式节点分别分配一个全局地址空间;
[0092] 生成模块,用于所述第一分布式节点基于所述已上电分布式节点对应的全局地址空间,生成全局资源视图,所述全局共享资源视图中存储有共享资源标识与全局地址之间的对应关系;
[0093] 第四发送模块,用于所述第一分布式节点将所述全局资源视图发送给所述分布式系统中的每个分布式节点。
[0094] 在上述第二方面的另一种可能的实现方式中,,所述装置还用于:
[0095] 所述第一分布式节点每监听到一个新增分布式节点上电启动且接收到所述新增分布式节点发送的共享资源配置信息时,基于所述分布式节点存储的共享资源所占的存储空间,为所述新增分布式节点分配一个全局地址空间;
[0096] 所述第一分布式节点基于所述新增分布式节点对应的全局地址空间,更新所述全局资源视图;
[0097] 所述第一分布式节点将所述更新后的全局资源视图发送给所述分布式系统中的每个分布式节点。
[0098] 结合第二方面的第二种可能的实现方式,在上述第二方面的第四种可能的实现方式中,所述装置还包括:
[0099] 第五发送模块,用于当所述第一分布式节点上电启动且所述第一分布式节点不为所述分布式系统中的主节点时,所述第一分布式节点向所述分布式系统的主节点发送共享资源配置信息,所述共享资源配置信息包括所述第一分布式节点中存储的共享资源所占的存储空间,使所述主节点基于所述存储空间返回全局资源视图;
[0100] 第三接收模块,用于所述第一分布式节点接收所述主节点发送的全局资源视图。
[0101] 结合第二方面的第四种可能的实现方式,在上述第二方面的第五种可能的实现方式中,所述装置还包括:
[0102] 第二获取模块,用于所述第一分布式节点从所述全局资源视图中,获取所述主节点为所述第一分布式节点分配的全局地址空间;
[0103] 映射模块,用于所述第一分布式节点将所述全局地址空间中的每个全局地址映射为系统地址;
[0104] 存储模块,用于存储全局地址与系统地址之间的映射关系。
[0105] 在上述第二方面的另一种可能的实现方式中,所述装置还用于:
[0106] 当所述第一分布式节点为所述分布式系统的主节点时,所述第一分布式节点将第一分布式节点标识添加到缓存有所述目标数据的分布式节点标识中;
[0107] 所述第一分布式节点基于所述目标数据的属性信息、缓存有所述目标数据的分布式节点标识和所述目标数据的状态信息,生成所述第一元数据。
[0108] 在上述第二方面的另一种可能的实现方式中,所述装置还用于:
[0109] 当所述第一分布式节点不为所述分布式系统的主节点时,所述第一分布式节点向所述分布式系统的主节点发送元数据获取请求,所述元数据获取请求中携带所述目标数据的属性信息,使所述主节点基于所述目标数据的属性信息返回所述第一元数据;
[0110] 所述第一分布式节点接收所述主节点返回的所述第一元数据。
[0111] 结合第二方面至第二方面的第五种可能的实现方式中的任一种实现方式,在上述第二方面的第六种可能的实现方式中,所述装置还包括:
[0112] 第三获取模块,用于当所述第一分布式节点接收到第四分布式节点发送的第二读请求时,所述第一分布式节点基于所述第二读请求携带的第二全局地址,从存储的全局地址与系统地址之间的映射关系中,获取对应的系统地址;
[0113] 第四获取模块,用于所述第一分布式节点基于所述系统地址,从存储的共享资源中,获取对应的数据;
[0114] 第六发送模块,用于所述第一分布式节点将获取的数据发送给所述第四分布式节点,使所述第四分布式节点将所述数据进行缓存。
[0115] 结合第二方面至第二方面的第六种可能的实现方式中的任一种实现方式,在上述第二方面的第七种可能的实现方式中,所述装置还包括:
[0116] 更新模块,用于当所述第一分布式节点为所述分布式系统的主节点且检测到所述分布式系统的从节点掉电时,基于所述从节点的标识,更新存储的全局资源视图,以及更新第三元数据和第四元数据,所述第三元数据为所述从节点上缓存的数据的元数据,所述第四元数据为缓存有所述从节点上存储的共享资源的元数据;
[0117] 第七发送模块,用于所述第一分布式节点将更新后的全局资源视图发送给所述分布式系统中的每个分布式节点,将更新后的第三元数据发送给第五分布式节点,以及将更新后的第四元数据发送给第六分布式节点,所述第五分布式节点为缓存有所述从节点上缓存的数据的分布式节点,所述第六分布式节点为缓存有所述从节点上共享资源的分布式节点。
[0118] 在上述第二方面的另一种可能的实现方式中,所述装置还用于:
[0119] 当所述第一分布式节点为所述分布式系统的从节点且检测到所述分布式系统的主节点掉电时,从当前未掉电的从节点中,选择一个新主节点;
[0120] 所述第一分布式节点将存储的元数据发送给所述新主节点。
[0121] 在本发明实施例中,当第一分布式节点接收写指令时,将该第一分布式节点缓存的目标数据替换为写指令携带的写数据;由于第二分布式节点中也缓存有该目标数据,且第三分布式节点存储有该目标数据所在的共享资源,因此,第一分布式节点可以将该写数据发送给该第二分布式节点和第三分布式节点,同时将第二分布式节点存储的目标数据和第三分布式节点存储的共享资源进行更新,从而保证了分布式系统所有分布式节点所能获取到的目标数据的一致性。另外,该分布式系统中的分布式节点在进行数据访问时,无需对共享资源加分布式锁,所以其他分布式节点也无需耗费大量时间来等待分布式锁的解锁,提高了分布式系统的运行效率。
[0122] 应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

[0123] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0124] 图1是本发明实施例提供的一种基于分布式系统的数据访问系统架构图;
[0125] 图2是本发明实施例提供的一种基于分布式系统的数据访问方法流程图;
[0126] 图3是本发明实施例提供的第一种基于分布式系统的数据访问装置框图;
[0127] 图4是本发明实施例提供的一种基于分布式系统的数据访问装置示意图。

具体实施方式

[0128] 为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
[0129] 在对本发明实施例进行详细地解释说明之前,先对本发明实施例的系统架构进行介绍。如图1所示,一个分布式系统中可以包括多个分布式节点(其中图1中只画出两个分布式节点),每个分布式节点都可以存储共享资源,并访问和缓存其他分布式节点上的共享资源。另外,在每个分布式节点中都设置有一个基于分布式系统的数据访问装置,该基于分布式系统的数据访问装置通过系统总线和该分布式节点的中央处理器(英文:Central Processing Unit;简称:CPU)相连,该CPU可以为图1中的主机m或者主机n,即该装置占据一段分布式节点的系统地址空间,一种可能的实现方式可以是该装置作为高速外围组件互联(英文:Peripheral Component Interface express;简称:PCIe)端点的形式连接到以PCIe总线为系统总线的主机上,该PCIe端点在自身的基地址寄存器(英文:Base Address Register;简称:BAR)中声明该PCIe端点需要占据的地址空间大小;当分布式节点上电启动时,系统固件基本输入输出系统(英文:Basic Input Output Systerm;简称:BIOS)或者操作系统(英文:Operating System;简称:OS)会在该分布式节点的系统地址空间中为该PCIe端点分配基地址,当然,该装置还可以通过该分布式节点的一部分来实现,本发明实施例对此不做具体限定。
[0130] 如图1所示,该装置包括主机侧内存空间接口、内存空间、内存地址映射控制模块、缓存空间、元数据存储模块、一致性协议引擎和全局地址空间接口。其中,该主机侧内存空间接口用于将上述基地址译码为系统地址;内存空间用于存储共享资源,该分布式节点可以使用系统地址访问该共享资源;内存地址映射控制模块用于将该分布式系统的主节点为该共享资源分配的全局地址映射为系统地址;缓存空间用于缓存该分布式节点访问其他分布式节点的共享资源所缓存的数据;元数据存储模块用于存储所缓存数据的元数据,且该元数据包括所缓存数据的全局地址、缓存有该数据的其它分布式节点标识和所缓存数据的状态信息;一致性协议引擎用于确保该分布式节点缓存的数据总是最新的,且保证该分布式节点缓存的数据和其它分布式节点缓存的数据一致性;全局地址空间接口用于将全局地址空间和该分布式节点存储的共享资源一一对应,使得其他分布式节点可以通过该全局地址空间访问到该分布式节点中的共享资源。进一步地,在该分布式节点上还可以包括可内存映射的资源,这些资源可以包括内存(英文:Memory Device;简称:MEM),非易失性存储(英文:Non-Volatile DIMM;简称:NVDIMM),文件(英文:FILE),对象存储设备(英文:Object-based Storage Device;简称:OSD)等。
[0131] 图2是本发明实施例提供的另一种基于分布式系统的数据访问方法流程图。参见图2,该方法包括:
[0132] 在步骤201中,当第一分布式节点接收到写指令时,将该第一分布式节点缓存的目标数据替换为该写指令携带的写数据,该写指令用于对该目标数据进行访问。
[0133] 第一分布式节点可以是分布式系统中的任意一个分布式节点,该第一分布式节点可以更新该分布式系统的共享资源,为了更新分布式系统的共享资源,该第一分布式节点可以在更新该共享资源时,先更新该第一分布式节点中缓存的目标数据,因此该第一分布式节点可以接收到写指令,该写指令中携带有该目标数据的写数据,当该第一分布式节点接收到该写指令时,可以对缓存的目标数据进行访问,并将缓存的该目标数据替换为该写指令中携带的写数据。
[0134] 其中,该目标数据可以是该共享资源的全部数据或者部分数据,该目标数据由第一分布式节点缓存该共享资源得到,也即是,该目标数据是第一分布式节点将该共享资源缓存到本地得到。另外,该写数据可以是第一分布式节点用于替换该第一分布式节点当前缓存的该目标数据的数据。
[0135] 需要说明的是,该共享资源可以是文档、音乐、视频、可执行程序等可以存储的数据,本发明实施例对此不作具体限定。
[0136] 还需要说明的是,该写指令用于对第一分布式节点缓存的目标数据进行修改,且该写指令可以是由用户通过指定操作触发,该指定操作可以是点击操作、手势操作、按键操作等,本发明实施例对此不做具体限定。
[0137] 进一步地,在第一分布式节点接收到写指令,并将缓存的目标数据替换为该写指令携带的写数据之前,第一分布式节点需要上电启动,并从该分布式系统的主节点中获取该分布式系统中每个分布式节点上存储的共享资源对应的全局地址。而该分布式系统的主节点可以为该分布式系统包括的分布式节点中的任意一个,也即是,第一分布式节点可以作为该分布式系统的主节点,当然,第一分布式节点也可以不作为该分布式系统的主节点,即该分布式系统的从节点,因此,当第一分布式节点在该分布式系统中所充当的角色不同时,该第一分布式节点获取每个分布式节点上存储的共享资源对应的全局地址的操作不同,具体如下:
[0138] 当该第一分布式节点上电启动且该第一分布式节点为该分布式系统的主节点时,该第一分布式节点可以接收已上电分布式节点发送的共享资源配置信息,该共享资源配置信息中包括该已上电分布式节点上存储的共享资源所占的存储空间,该第一分布式节点基于该已上电分布式节点上存储的共享资源所占的存储空间,为该已上电分布式节点分别分配一个全局地址空间,并基于该已上电分布式节点对应的全局地址空间,生成全局资源视图,该全局共享资源视图中存储有共享资源标识与全局地址之间的对应关系,之后,该第一分布式节点可以将该全局资源视图发送给该分布式系统中的每个分布式节点。
[0139] 而当该第一分布式节点上电启动且该第一分布式节点不为该分布式系统中的主节点时,也即是,第一分布式节点为该分布式系统中的从节点,此时,该第一分布式节点可以向该分布式系统的主节点发送共享资源配置信息,该共享资源配置信息包括该第一分布式节点中存储的共享资源所占的存储空间,使该主节点基于该存储空间返回全局资源视图,该第一分布式节点接收该主节点发送的全局资源视图,并从该全局资源视图中,获取该主节点为该第一分布式节点分配的全局地址空间,将该全局地址空间中的每个全局地址映射为系统地址,并存储全局地址与系统地址之间的映射关系,之后,该第一分布式节点可以通过该全局地址快速准确地访问到该分布式系统中的每一个共享资源。
[0140] 进一步地,当该第一分布式节点为该分布式系统的主节点时,第一分布式节点还可以监听新增分布式节点的上电,当该第一分布式节点每监听到一个新增分布式节点上电启动且接收到该新增分布式节点发送的共享资源配置信息时,该第一分布式节点可以基于该新增分布式节点存储的共享资源所占的存储空间,为该新增分布式节点分配一个全局地址空间,并基于该新增分布式节点对应的全局地址空间,更新该全局资源视图,将该更新后的全局资源视图发送给该分布式系统中的每个分布式节点。
[0141] 由于系统地址空间和全局地址空间不在同一个地址空间中,因此在第一分布式节点不为该分布式系统的主节点时,第一分布式节点需要建立两个地址空间的映射关系,映射可以表示成(x’,y’)=F(x,y),其中(x,y)表示该分布式节点上存储的共享资源的系统地址空间,(x’,y’)表示该分布式节点上存储的共享资源的全局地址空间,且该全局地址空间可以被其它分布式节点所访问。对于第一分布式节点,可以直接通过该系统地址访问存储的共享资源;对于其它分布式节点,可以从存储的全局资源视图中获取第一分布式节点上存储的该共享资源的全局地址空间,之后,第一分布式节点基于该映射关系,将该全局地址空间转换成系统地址空间,并实现其他分布式节点对第一分布式节点上存储的共享资源进行访问。
[0142] 需要说明的是,共享资源配置信息用于表征该分布式节点上存储的共享资源的配置信息,该配置信息不仅包括该共享资源所占的存储空间,还可以包括该共享资源的属性信息、所在分布式节点的存储介质、名称、校验值等信息,使得该第一分布式节点在生成全局资源视图时,也将该共享资源的属性信息、名称、校验值等信息存储在全局资源视图中,此时,该全局资源视图中不仅包括共享资源标识与全局地址之间的对应关系,还包括该共享资源的属性信息、所在的分布式节点的存储介质、名称、校验值等信息,本发明实施例对此不作具体限定。
[0143] 其中,该共享资源的属性信息用来说明该共享资源是文档、音乐、视频、还是可执行程序等属性,该所在分布式节点的存储介质用来说明该共享资源存储于快速存储介质还是慢速存储介质,该名称用来说明该共享资源的内容,该校验值可以是数字签名、哈希值等,当某一分布式节点读取该共享资源时,可以用该校验值来检验该共享资源的正确性。
[0144] 另外,该共享资源标识为该共享资源的标识,用于唯一标识该共享资源,且该共享资源标识可以为该共享资源的名称等信息,本发明实施例对此不做具体限定。
[0145] 还需要说明的是,当该第一分布式节点基于该已上电分布式节点上存储的共享资源所占的存储空间,为该已上电分布式节点分别分配一个全局地址空间时,还可以根据该共享资源配置信息,对该共享资源进行分类,例如根据该共享资源所在的分布式节点的存储介质,将该共享资源分为快速存储介质中的共享资源和慢速存储介质中的共享资源,或者根据该共享资源的属性,将该共享资源分为文档、音乐、可执行程序等,然后基于分类后的共享资源,对全局地址空间进行分段,将同一类的共享资源分配在同一段全局地址空间中,使得该分布式系统中的共享资源分布更加规律,便于管理。
[0146] 进一步地,第一分布式节点将缓存的目标数据替换为该写指令携带的写数据之前,第一分布式节点还可以接收读指令,该读指令中携带第一全局地址和第三分布式节点标识,该第一分布式节点基于该第三分布式节点标识,向第三分布式节点发送第一读请求,该第一读请求中携带该第一全局地址,使该第三分布式节点基于该第一全局地址返回该目标数据,当该第一分布式节点接收到该第三分布式节点返回的该目标数据时,将该目标数据进行缓存。
[0147] 其中,该第三分布式节点基于该第一全局地址返回该目标数据的操作可以为:该第三分布式节点从存储的全局地址与系统地址之间的映射关系中,获取对应的系统地址,该第三分布式节点基于该系统地址,从存储的共享资源中,获取对应的数据,并将获取的数据发送给该第一分布式节点。
[0148] 更进一步地,由于该第一分布式节点可以是分布式系统中的任意一个分布式节点,因此,该第一分布式节点也可以接收第四分布式节点发送的第二读请求,当该第一分布式节点接收到第四分布式节点发送的第二读请求时,该第一分布式节点基于该第二读请求携带的第二全局地址,从存储的全局地址与系统地址之间的映射关系中,获取对应的系统地址,基于该系统地址,从存储的共享资源中,获取对应的数据,并将获取的数据发送给该第四分布式节点,使该第四分布式节点将该数据进行缓存。
[0149] 需要说明的是,该读指令用于从第三分布式节点中读取数据,且该读指令可以是由用户通过指定操作触发,本发明实施例对此不做具体限定。
[0150] 还需要说明的是,该第三分布式节点和该第四分布式节点也可以是分布式系统中的任意一个分布式节点,且第三分布式节点为存储目标数据所在共享资源的节点。
[0151] 例如,第一分布式节点a为该分布式系统的主节点,分布式节点b、c、d为该分布式系统的从节点,第一分布式节点a中存储有共享资源标识为ID1的共享资源1,且该共享资源1所占的存储空间为100M,当该第一分布式节点a上电时,分别接收到从节点b中存储有共享资源标识为ID2的共享资源2,且该共享资源2所占的存储空间为50M,从节点c中存储有共享资源标识为ID3的共享资源3,且该共享资源3所占的存储空间为80M,从节点d中存储有共享资源标识为ID4的共享资源4,且该共享资源4所占的存储空间为150M。该第一分布式节点a分别为共享资源1分配全局地址空间A’B’,为共享资源2分配全局地址空间C’D’,为共享资源3分配全局地址空间E’F’,为共享资源4分配全局地址空间G’H’,生成全局资源视图中的共享资源标识与全局地址之间的对应关系如表1所示,并将该全局资源视图发送给分布式节点b、c、d。之后,第一分布式节点a可以将为自身存储的共享资源分配的全局地址空间A’B’映射为第一分布式节点a的系统地址AB,从节点b将全局地址空间C’D’映射为从节点b的系统地址CD,从节点c将全局地址E’F’映射为从节点c的系统地址EF,从节点d将全局地址G’H’映射为从节点d的系统地址GH。
[0152] 表1
[0153]共享资源标识 全局地址
ID1 A’B’
ID2 C’D’
ID3 E’F’
ID4 G’H’
[0154] 需要说明的是,本公开实施例仅以上述表1所示的共享资源标识和全局地址之间的对应关系为例进行说明,上述表1并不对本公开实施例构成限定。
[0155] 其中,当第一分布式节点将缓存的目标数据替换为写指令中携带的写数据之后,由于在该分布式系统中可能还存在其他的分布式节点缓存有该目标数据,因此,为了保证该分布式系统中每个节点缓存的数据一致性,第一分布式节点还可以将其他分布式节点中缓存的该目标数据进行更新,具体如步骤202-203所述。
[0156] 在步骤202中,第一分布式节点基于存储的第一元数据,从当前所在分布式系统包括的分布式节点标识中,获取第二分布式节点标识,第二分布式节点为缓存有该目标数据的分布式节点,该第一元数据为该目标数据的元数据,且该第一元数据包括该目标数据的属性信息、缓存有该目标数据的分布式节点标识和该目标数据的状态信息。
[0157] 在分布式系统中,同一个共享资源可能被多个分布式节点读取并缓存,同一个分布式节点也可能同时缓存有多个不同的共享资源。为了在第一分布式节点将缓存的目标数据替换为写数据时,将其他分布式节点上缓存的目标数据进行更新,第一分布式节点可以获取该目标数据的第一元数据。
[0158] 需要说明的是,该目标数据的属性信息可以是该目标数据对应的共享资源的配置信息、该目标数据对应的共享资源所在的全局地址空间等,本发明实施例对此不作具体限定。
[0159] 还需要说明的是,该目标数据的状态信息可以是该目标数据的时间戳等用来说明该目标数据更新时间的信息。
[0160] 其中,当第一分布式节点在该分布式系统中所充当的角色不同时,该第一分布式节点获取第一元数据的操作不同,具体如下:
[0161] 当该第一分布式节点为该分布式系统的主节点时,该第一分布式节点可以将第一分布式节点标识添加到缓存有该目标数据的分布式节点标识中,并基于该目标数据的属性信息、缓存有该目标数据的分布式节点标识和该目标数据的状态信息,生成该第一元数据。
[0162] 而当该第一分布式节点不为该分布式系统的主节点时,该第一分布式节点可以向该分布式系统的主节点发送元数据获取请求,该元数据获取请求中携带该目标数据的属性信息,使该主节点基于该目标数据的属性信息返回该第一元数据,该第一分布式节点接收该主节点返回的该第一元数据。
[0163] 例如,第一分布式节点a中存储有该分布式系统当前所有已上电分布式节点a、b、c、d缓存的目标数据的元数据如表2所示,从节点b、c、d分别存储有各自缓存的目标数据的元数据,从节点b存储的元数据如表3所示,从节点c存储的元数据如表4所示,从节点d存储的元数据如表5所示,当然,主节点a在存储该分布式系统当前所有已上电分布式节点缓存的目标数据的元数据时,还可以存储该主节点a缓存的目标数据的元数据,如表6所示。
[0164] 表2
[0165]
[0166] 表3
[0167]
[0168] 表4
[0169]
[0170] 表5
[0171]
[0172] 表6
[0173]
[0174] 需要说明的是,本公开实施例仅以上述表2、表3、表4、表5所示的目标数据的元数据为例进行说明,上述表2、表3、表4、表5并不对本公开实施例构成限定。
[0175] 当然,该第一分布式节点不仅可以检测到其它分布式节点上电,也可以检测到其他分布式节点掉电,且检测其他分布式节点掉电时也是针对第一分布式节点在该分布式系统中所充当的角色不同时,该第一分布式节点的检测操作不同,具体如下:
[0176] 当该第一分布式节点为该分布式系统的主节点且检测到该分布式系统的从节点掉电时,基于该从节点的标识,更新存储的全局资源视图,以及更新第三元数据和第四元数据,该第三元数据为该从节点上缓存的数据的元数据,该第四元数据为缓存有该从节点上存储的共享资源的元数据,该第一分布式节点将更新后的全局资源视图发送给该分布式系统中的每个分布式节点,并将更新后的第三元数据发送给第五分布式节点,以及将更新后的第四元数据发送给第六分布式节点,该第五分布式节点为缓存有该从节点上缓存的数据的分布式节点,该第六分布式节点为缓存有该从节点上共享资源的分布式节点。
[0177] 而当该第一分布式节点为该分布式系统的从节点且检测到该分布式系统的主节点掉电时,第一分布式节点可以从当前未掉电的从节点中,选择一个新主节点,并将存储的元数据发送给该新主节点。
[0178] 需要说明的是,该第五分布式节点和第六分布式节点可以是该分布式系统中的任意一个分布式节点。
[0179] 其中,由于该新主节点是该分布式系统中的分布式节点,因此该新主节点也可以存储有该分布式系统的全局资源视图,该新主节点从该全局资源视图中删除已掉电分布式节点的共享资源标识和全局地址之间的对应关系,从而更新该全局资源视图,然后将更新后的全局资源视图发送给该分布式系统中的其他分布式节点。
[0180] 需要说明的是,该分布式系统中的分布式节点可以只存储自身所缓存数据的元数据,也可以像主节点一样存储当前分布式系统内所有从节点所缓存数据的元数据,因此,当该分布式系统中的分布式节点只存储自身所缓存数据的元数据时,该新主节点可以接收该分布式系统的分布式节点发送的元数据;当该分布式系统中的分布式节点存储有当前分布式系统内所有从节点所缓存数据的元数据时,该新主节点可以将该元数据更新后发送给其他分布式节点。
[0181] 还需要说明的是,当该第一分布式节点为该分布式系统的从节点且检测到该分布式系统的主节点掉电时,第一分布式节点从当前未掉电的从节点中选择一个新主节点时,可以在当前未掉电的从节点运行选举法产生,也可以是该第一分布式节点指定产生,本发明对此不做具体限定。
[0182] 进一步地,当该第一分布式节点是该分布式系统的主节点时,该第一分布式节点中可以存储该分布式系统当前所有已上电分布式节点缓存的目标数据的元数据;当该第一分布式节点不是该分布式系统的主节点时,该第一分布式节点可以只存储第一分布式节点缓存的目标数据的元数据,或者该第一分布式节点也可以像主节点一样存储该分布式系统当前所有已上电分布式节点缓存的目标数据的元数据,也即是,该分布式系统的所有从节点和主节点存储的元数据相同。
[0183] 其中,当该第一分布式节点不是该分布式系统的主节点时,如果该第一分布式节点只存储第一分布式节点缓存的目标数据的元数据,则第一分布式节点可以节省存储空间;如果该分布式系统的所有从节点和主节点存储的元数据相同,则当该第一分布式节点检测到该分布式系统中的主节点掉电,选取新的主节点时,该新的主节点不需要接收其他分布式节点发送的元数据更新请求,但是,当第一分布式节点存储的目标数据的元数据更新时,需要同步更新该分布式系统中所有分布式节点存储的元数据,增加了分布式系统的负担。
[0184] 在步骤203中,第一分布式节点基于该第二分布式节点标识,将该写数据发送给该第二分布式节点,使该第二分布式节点对缓存的该目标数据进行更新。
[0185] 为了避免该第一分布式节点将缓存的目标数据替换为写数据时,第二分布式节点存储的数据与第一分布式节点中存储的数据不一致,第一分布式节点可以将缓存的目标数据替换为写数据时,将该写数据发送给第二分布式节点。当第二分布式节点接收到该写数据时,可以将第二分布式节点缓存的该目标数据替换为写数据,此时,所有第二分布式节点上的该目标数据与第一分布式节点上的该目标数据保持一致。
[0186] 其中,当第一分布式节点将缓存有该目标数据的第二分布式节点上的数据进行更新之后,为了保证其他新增分布式节点上电启动时,从第三分布式节点中读取的共享资源与第一分布式节点中缓存的目标数据一致,第一分布式节点还需要将第三分布式节点上的共享资源进行更新,具体如步骤204。
[0187] 在步骤204中,第一分布式节点向第三分布式节点发送数据更新请求,该数据更新请求携带第一全局地址和该写数据,使该第三分布式节点基于该第一全局地址和该写数据,更新该共享资源中的该目标数据,该第三分布式节点为存储该目标数据所在共享资源的节点,该第一全局地址为该目标数据的全局地址,且该第一全局地址为该第一分布式节点从存储的全局资源视图中获取得到。
[0188] 当第一分布式节点将该目标数据替换为该写数据,并发送给第二分布式节点时,所有缓存有该目标数据的分布式节点都会用该写数据替换该目标数据,也即是所有缓存有该目标数据的分布式节点上缓存的目标数据与第一分布式节点上缓存的目标数据一致,但在该目标数据更新之后,该第一分布式节点还需要将该目标数据更新到该目标数据对应的共享资源,因此,该第一分布式节点还可以将写数据发送给该目标数据对应的共享资源所在的第三分布式节点,使得该第三分布式节点基于该写数据更新该共享资源中的该目标数据。
[0189] 由于元数据中存储的状态信息用于说明该缓存数据更新状态,且分布式节点更新缓存的数据时需要基于该缓存数据的状态信息,确保该分布式节点上缓存的数据是最新的数据,因此,第一分布式节点将第二分布式节点上缓存的目标数据进行更新,以及将第三分布式节点上的共享资源中的目标数据进行更新之后,第一分布式节点还可以将该目标数据的第一元数据进行更新,并将第二分布式节点中存储的第一元数据进行更新,具体如步骤205。
[0190] 在步骤205中,该第一分布式节点基于该写数据,将该第一元数据中的状态信息进行更新,得到第二元数据,并将该分布式系统的主节点和第二分布式节点中存储的第一元数据更新为该第二元数据。
[0191] 由于第一元数据包括该目标数据的属性信息、缓存有该目标数据的分布式节点标识和该目标数据的状态信息,因此当该第一分布式节点将该目标数据替换为写数据时,可以基于该写数据,将第一元数据中的状态信息更新,从而得到第二元数据。
[0192] 当第一分布式节点在该分布式系统中所充当的角色不同时,该第一分布式节点将该分布式系统的主节点和第二分布式节点中存储的第一元数据更新为该第二元数据的操作不同,具体如下:
[0193] 当该第一分布式节点为该分布式系统的主节点时,该第一分布式节点可以将该第二元数据发送给该第二分布式节点,使该第二分布式节点将存储的第一元数据替换为该第二元数据。
[0194] 而当该第一分布式节点不为该分布式系统的主节点时,第一分布式节点可以向该分布式系统的主节点发送元数据更新请求,该元数据更新请求中携带该第二元数据,使该主节点将存储的第一元数据替换为该第二元数据,并将该第二元数据发送给该第二分布式节点,由该第二分布式节点将存储的第一元数据替换为该第二元数据,或者,第一分布式节点可以分别向该分布式系统的主节点和该第二分布式节点发送元数据更新请求,该元数据更新请求中携带该第二元数据,使该主节点和该第二分布式节点分别将存储的第一元数据替换为该第二元数据。
[0195] 需要说明的是,当第一分布式节点为该分布式系统的主节点时,该第一分布式节点存储有该分布式系统内所有已上电分布式节点存储的目标数据的元数据,因此,在该第一分布式节点将第一元数据替换为第二元数据时,也可以将该第二元数据发送给该第二分布式节点;当第一分布式节点不为该分布式系统的主节点时,由于该第一分布式节点存储有该目标数据的第一元数据,且该第一元数据中存储有所有缓存有该目标数据的该第二分布式节点,该第一分布式节点可以直接向该分布式系统的主节点发送元数据更新请求,然后再由主节点向第二分布式节点发送元数据更新请求,也可以同时向该分布式系统的主节点和该第二分布式节点发送元数据更新请求。
[0196] 在本发明实施例中,当第一分布式节点接收写指令时,将该第一分布式节点缓存的目标数据替换为写指令携带的写数据;由于第二分布式节点中也缓存有该目标数据,且第三分布式节点存储有该目标数据所在的共享资源,因此,第一分布式节点可以将该写数据发送给该第二分布式节点和第三分布式节点,同时将第二分布式节点存储的目标数据和第三分布式节点存储的共享资源进行更新,从而保证了分布式系统所有分布式节点所能获取到的目标数据的一致性。另外,该分布式系统中的分布式节点在进行数据访问时,无需对共享资源加分布式锁,所以其他分布式节点也无需耗费大量时间来等待分布式锁的解锁,提高了分布式系统的运行效率。再者,当第一分布式节点为主节点时,还可以接收其它从节点发送的共享资源配置信息,为共享资源分配全局地址空间,生成全局资源视图,存储共享资源与全局地址空间的对应关系,以及该分布式系统所有分布式节点的元数据,如此,该分布式系统中的每一个分布式节点都可以快速准确的访问和更新每一个共享资源,进一步提高了分布式系统的运行效率。
[0197] 图3是本发明实施例提供的一种基于分布式系统的数据访问装置框图。参见图3,该装置包括:
[0198] 替换模块301,用于执行上述步骤201所述的操作;
[0199] 第一获取模块302,用于执行上述步骤202所述的操作;
[0200] 第一发送模块303,用于执行上述步骤203所述的操作。
[0201] 可选地,该装置还包括:
[0202] 第二发送模块,用于执行上述步骤204所述的操作。
[0203] 可选地,该装置还包括:
[0204] 第一接收模块,用于执行上述步骤201中接收读指令的操作;
[0205] 第三发送模块,用于执行上述步骤201中向第三分布式节点发送第一读请求的操作;
[0206] 缓存模块,用于执行上述步骤201中缓存该第三分布式节点发送的目标数据的操作。
[0207] 可选地,该装置还包括:
[0208] 第二接收模块,用于执行上述步骤201中当该第一分布式节点上电启动且该第一分布式节点为该分布式系统的主节点时,接收已上电分布式节点发送的共享资源配置信息的操作;
[0209] 分配模块,用于执行上述步骤201中为该已上电分布式节点分别分配一个全局地址空间的操作;
[0210] 生成模块,用于执行上述步骤201中生成全局资源视图的操作;
[0211] 第四发送模块,用于执行上述步骤201中将该全局资源视图发送给该分布式系统中的每个分布式节点的操作。
[0212] 可选地,该装置还包括:
[0213] 第五发送模块,用于执行上述步骤201中当该第一分布式节点上电启动且该第一分布式节点不为该分布式系统中的主节点时,向该分布式系统的主节点发送共享资源配置信息的操作;
[0214] 第三接收模块,用于执行上述步骤201中接收该主节点发送的全局资源视图的操作。
[0215] 可选地,该装置还包括:
[0216] 第二获取模块,用于执行上述步骤201中从该全局资源视图中,获取该主节点为该第一分布式节点分配的全局地址空间的操作;
[0217] 映射模块,用于执行上述步骤201中将该全局地址空间中的每个全局地址映射为系统地址的操作;
[0218] 存储模块,用于执行上述步骤201中存储全局地址与系统地址之间的映射关系的操作。
[0219] 可选地,该装置还包括:
[0220] 第三获取模块,用于执行上述步骤201中当该第一分布式节点接收到第四分布式节点发送的第二读请求时,获取对应的系统地址的操作;
[0221] 第四获取模块,用于执行上述步骤201中从存储的共享资源中,获取对应的数据的操作;
[0222] 第六发送模块,用于执行上述步骤201中将获取的数据发送给该第四分布式节点的操作。
[0223] 可选地,该装置还包括:
[0224] 更新模块,用于执行上述步骤202中当该第一分布式节点为该分布式系统的主节点且检测到该分布式系统的从节点掉电时,更新存储的全局资源视图以及更新第三元数据和第四元数据的操作;
[0225] 第七发送模块,用于执行上述步骤202中将更新后的全局资源视图发送给该分布式系统中的每个分布式节点,将更新后的第三元数据发送给第五分布式节点,以及将更新后的第四元数据发送给第六分布式节点的操作。
[0226] 在本发明实施例中,当第一分布式节点接收写指令时,将该第一分布式节点缓存的目标数据替换为写指令携带的写数据;由于第二分布式节点中也缓存有该目标数据,且第三分布式节点存储有该目标数据所在的共享资源,因此,第一分布式节点可以将该写数据发送给该第二分布式节点和第三分布式节点,同时将第二分布式节点存储的目标数据和第三分布式节点存储的共享资源进行更新,从而保证了分布式系统所有分布式节点所能获取到的目标数据的一致性。另外,该分布式系统中的分布式节点在进行数据访问时,无需对共享资源加分布式锁,所以其他分布式节点也无需耗费大量时间来等待分布式锁的解锁,提高了分布式系统的运行效率。
[0227] 图4是本发明实施例提供了一种多媒体数据播放装置示意图,参见图4,该装置包括:发射机401、接收机402、处理器403、存储器404、通信总线405,处理器403与存储器404通过该总线405连接;
[0228] 存储器404,用于存储消息和数据;
[0229] 处理器403,用于当接收到写指令时,将该第一分布式节点缓存的目标数据替换为该写指令携带的写数据,该写指令用于对该目标数据进行访问,其中,上述替换模块301可以包含于该处理器403中;
[0230] 处理器403,用于基于存储的第一元数据,从当前所在分布式系统包括的分布式节点标识中,获取第二分布式节点标识,第二分布式节点为缓存有该目标数据的分布式节点,该第一元数据为该目标数据的元数据,且该第一元数据包括该目标数据的属性信息、缓存有该目标数据的分布式节点标识和该目标数据的状态信息,其中,上述第一获取模块302可以包含于该处理器403中;
[0231] 发射机401,用于基于该第二分布式节点标识,将该写数据发送给该第二分布式节点,使该第二分布式节点对缓存的该目标数据进行更新,其中,上述第一发送模块303可以包含于该发射机401中。
[0232] 可选地,
[0233] 发射机401,用于向第三分布式节点发送数据更新请求,其中,上述第二发送模块可以包含于该发射机401中。
[0234] 可选地,
[0235] 接收机402,用于接收读指令,其中,上述第一接收模块可以包含于该接收机402中;
[0236] 发射机401,用于向第三分布式节点发送第一读请求,其中,上述第三发送模块可以包含于该发射机401中;
[0237] 处理器403,用于缓存该第三分布式节点发送的目标数据,其中,上述缓存模块可以包含于该处理器403中。
[0238] 可选地,
[0239] 接收机402,用于当该第一分布式节点上电启动且该第一分布式节点为该分布式系统的主节点时,接收已上电分布式节点发送的共享资源配置信息,其中,上述第二接收模块可以包含于该接收机402中;
[0240] 处理器403,用于为该已上电分布式节点分别分配一个全局地址空间,其中,上述分配模块可以包含于该处理器403中;
[0241] 处理器403,用于生成全局资源视图,其中,上述生成模块可以包含于该处理器403中;
[0242] 发射机401,用于将该全局资源视图发送给该分布式系统中的每个分布式节点,其中,上述第四发送模块可以包含于该发射机401中。
[0243] 可选地,
[0244] 发射机401,用于当该第一分布式节点上电启动且该第一分布式节点不为该分布式系统中的主节点时,向该分布式系统的主节点发送共享资源配置信息,其中,上述第五发送模块可以包含于该发射机401中。
[0245] 接收机402,用于接收该主节点发送的全局资源视图,其中,上述第三接收模块可以包含于该接收机402中。
[0246] 可选地,
[0247] 处理器403,还用于从该全局资源视图中,获取该主节点为该第一分布式节点分配的全局地址空间,其中,上述第二获取模块可以包含于该处理器403中;
[0248] 处理器403,还用于将该全局地址空间中的每个全局地址映射为系统地址,其中,上述映射模块可以包含于该处理器403中;
[0249] 存储器404,用于存储全局地址与系统地址之间的映射关系,其中,上述存储模块可以包含于该存储器404中。
[0250] 可选地,
[0251] 处理器403,用于当该第一分布式节点接收到第四分布式节点发送的第二读请求时,获取对应的系统地址,其中,上述第三获取模块可以包含于该处理器403中;
[0252] 处理器403,用于从存储的共享资源中,获取对应的数据,其中,上述第四获取模块可以包含于该处理器403中;
[0253] 发射机401,用于将获取的数据发送给该第四分布式节点,其中,上述第六发送模块可以包含于该发射机401中。
[0254] 可选地,
[0255] 处理器403,用于当该第一分布式节点为该分布式系统的主节点且检测到该分布式系统的从节点掉电时,更新存储的全局资源视图以及更新第三元数据和第四元数据,其中,上述更新模块可以包含于该处理器403中;
[0256] 发射机401,用于将更新后的全局资源视图发送给该分布式系统中的每个分布式节点,将更新后的第三元数据发送给第五分布式节点,以及将更新后的第四元数据发送给第六分布式节点,其中,上述第七发送模块可以包含于该发射机401中。
[0257] 在本发明实施例中,当第一分布式节点接收写指令时,将该第一分布式节点缓存的目标数据替换为写指令携带的写数据;由于第二分布式节点中也缓存有该目标数据,且第三分布式节点存储有该目标数据所在的共享资源,因此,第一分布式节点可以将该写数据发送给该第二分布式节点和第三分布式节点,同时将第二分布式节点存储的目标数据和第三分布式节点存储的共享资源进行更新,从而保证了分布式系统所有分布式节点所能获取到的目标数据的一致性。另外,该分布式系统中的分布式节点在进行数据访问时,无需对共享资源加分布式锁,所以其他分布式节点也无需耗费大量时间来等待分布式锁的解锁,提高了分布式系统的运行效率。
[0258] 需要说明的是:上述实施例提供的基于分布式系统的数据访问装置在基于分布式系统进行数据访问时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的基于分布式系统的数据访问装置与基于分布式系统的数据访问方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
[0259] 本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0260] 以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。