首页> 中国专利> 数据访问请求的处理方法、装置和设备及存储介质

数据访问请求的处理方法、装置和设备及存储介质

摘要

本发明公开了一种数据访问请求的处理方法、装置和设备及存储介质,属于计算机技术领域,用于解决现有技术中用于批量处理的分布式缓存的资源开销较大的问题。该方法包括:截获到请求获取应用数据段的数据访问请求时,生成至少一个数据访问子请求;对于每个数据访问子请求,根据预设规则从分布式批量处理系统中所有可用的节点中筛选出M个节点并从中选择一个目标节点,将数据访问子请求发送给选择出的目标节点;接收选择出的目标节点返回的数据块,其中,如果目标节点中储存有上述数据块的只读副本,则从本地缓存中获取并发送,否则,从外部存储系统获取后,保存后并发送;将收到的至少一个数据块组合成应用数据段并发送给数据访问请求的发送方。

著录项

  • 公开/公告号CN109375872A

    专利类型发明专利

  • 公开/公告日2019-02-22

    原文格式PDF

  • 申请/专利号CN201811130863.5

  • 发明设计人 王斌;李力;王旻;

    申请日2018-09-27

  • 分类号

  • 代理机构北京同达信恒知识产权代理有限公司;

  • 代理人郭润湘

  • 地址 518044 广东省深圳市南山区高新区科技中一路腾讯大厦35层

  • 入库时间 2024-02-19 06:57:51

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-07-24

    授权

    授权

  • 2019-03-19

    实质审查的生效 IPC(主分类):G06F3/06 申请日:20180927

    实质审查的生效

  • 2019-02-22

    公开

    公开

说明书

技术领域

本发明涉及计算机技术领域,尤其涉及一种数据访问请求的处理方法、装置和设备及存储介质。

背景技术

批量计算(Batch Compute),是一种针对大规模并行批处理作业的分布式云服务,可以为有大数据计算业务需求的企业或者科研单位等提供计算服务。在用户选择了批量计算服务时,通常可以根据用户的要求为其分配多个计算节点,以为用户的业务应用提供计算服务,由于计算任务的数据一般存储在外部存储系统中,在这些计算节点需要这些数据时,就会访问外部存储系统来获取,但是在计算节点较多时,外部存储系统的压力较大,因此目前可以采用分布式缓存来缓解外部存储系统的压力。

目前通常使用一致性哈希算法来实现分布式缓存,但是这种算法需要节点之间的交互环节较多,从而使得各个计算节点的资源开销较大。

发明内容

本发明实施例提供一种数据访问请求的处理方法、装置和设备及存储介质,用于解决现有技术中用于批量处理的分布式缓存的计算节点的资源开销较大的问题。

一方面,提供一种数据访问请求的处理方法,所述方法包括:

截获到请求获取应用数据段的数据访问请求时,生成至少一个数据访问子请求,每个数据访问子请求分别用于获取所述应用数据段中的一个数据块;

分别根据每个数据访问子请求所要获取的数据块,执行如下步骤:

根据预设规则从分布式批量处理系统中所有可用的节点中筛选出M个节点,其中M为正整数;

从所述M个节点中选择一个目标节点;并

将数据访问子请求发送给选择出的目标节点;

接收选择出的目标节点返回的数据块,其中,目标节点在收到数据块访问子请求时,如果本地缓存中储存有数据访问子请求所要获取的数据块的只读副本,则从本地缓存中获取并发送,否则,从外部存储系统获取后,保存到本地缓存中并发送;

将收到的至少一个数据块组合成所述应用数据段并发送给数据访问请求的发送方。

一方面,提供一种数据访问请求的处理方法,所述方法包括:

接收被请求节点发送的数据访问子请求,所述数据访问子请求为所述被请求节点截获到请求获取应用数据段的数据访问请求后,生成的至少一个数据访问子请求中的其中一个,其中,每个数据访问子请求分别用于获取所述应用数据段中的一个数据块;

若确定本地缓存中储存有数据访问子请求所要获取的数据块的只读副本,则从本地缓存中获取并发送给所述被请求节点;否则,确定本地缓存是否能够存储所述数据块;并

在确定结果为是时,从挂载到自身的本地存储系统的外部存储系统中获取所述数据块并存储到本地缓存后,发送给所述被请求节点;或者,

在确定结果为否时,向所述被请求节点返回访问拒绝响应。

一方面,提供一种数据访问请求的处理装置,包括:

截获单元,用于截获到请求获取应用数据段的数据访问请求时,生成至少一个数据访问子请求,每个数据访问子请求分别用于获取所述应用数据段中的一个数据块;

数据块获取单元,用于分别根据每个数据访问子请求所要获取的数据块,执行如下步骤:

根据预设规则从分布式批量处理系统中所有可用的节点中筛选出M个节点,其中M为正整数;

从所述M个节点中选择一个目标节点;并

将数据访问子请求发送给选择出的目标节点;

接收选择出的目标节点返回的数据块,其中,目标节点在收到数据块访问子请求时,如果本地缓存中储存有数据访问子请求所要获取的数据块的只读副本,则从本地缓存中获取并发送,否则,从外部存储系统获取后,保存到本地缓存中并发送;

数据块组合单元,用于将收到的至少一个数据块组合成所述应用数据段并发送给数据访问请求的发送方。

一方面,提供一种数据访问请求的处理装置,包括:

收发单元,用于接收被请求节点发送的数据访问子请求,所述数据访问子请求为所述被请求节点截获到请求获取应用数据段的数据访问请求后,生成的至少一个数据访问子请求中的其中一个,其中,每个数据访问子请求分别用于获取所述应用数据段中的一个数据块;

确定单元,用于在确定本地缓存中储存有数据访问子请求所要获取的数据块的只读副本时,则从本地缓存中获取并发送给所述被请求节点;否则,确定本地缓存是否能够存储所述数据块;并

在确定结果为是时,从挂载到自身的本地存储系统的外部存储系统中获取所述数据块并存储到本地缓存后,发送给所述被请求节点;或者,

在确定结果为否时,向所述被请求节点返回访问拒绝响应。

一方面,提供一种计算机设备,包括:

至少一个处理器;以及

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上述的数据访问请求的处理方法的步骤。

一方面,提供一种计算机存储介质,所述计算机存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如上述的数据访问请求的处理方法的步骤。

本发明实施例所提供的数据访问请求的处理方法、装置和设备及存储介质中,在获取到要访问应用数据段的数据访问请求时,就会生成多个数据访问子请求,每个子请求用于获取一个数据块,对于其中的一个数据块来讲,会将用于获取该数据块的数据访问子请求转发给从多个可用的节点中筛选出的M个节点中的目标节点,在目标节点将上述应用数据段的多个数据块均返回后,将数据块进行组合后返回给数据访问请求的发送方。其中,可以看到,在获取数据块时,计算节点可以根据预设规则获取存储该数据块的多个节点,进而将数据访问子请求转发给该节点,实现数据块的访问,这样,计算节点之间无需在存储数据块,通知其他计算节点数据的存储位置,减少计算节点之间的资源开销,提高批量计算的性能;其次,通过本地缓存来存储数据块,避免了访问外部存储系统的网络延迟,提高了获取数据的效率;此外,本发明实施例中数据存储的最小单位为数据块,而并非是整个文件,也就能够避免文件过大时过多的占用单个计算节点的存储资源。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例提供的应用场景示意图;

图2为本发明实施例提供的分布式批量计算系统的架构示意图;

图3为本发明实施例提供的数据访问请求的处理方法的流程示意图;

图4为本发明实施例提供的数据块划分的示意图;

图5为本发明实施例提供的数据块访问的交互示意图一;

图6为本发明实施例提供的数据块访问的交互示意图二;

图7为本发明实施例提供的数据块访问的交互示意图三;

图8为本发明实施例提供的一种数据访问请求的处理装置的一种结构示意图;

图9为本发明实施例提供的另一种数据访问请求的处理装置的一种结构示意图;

图10为本发明实施例提供的计算机设备的一种结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互任意组合。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

为便于理解本发明实施例提供的技术方案,这里先对本发明实施例使用的一些关键名词进行解释:

批量计算:简称Batch,是一种针对大规模并行批处理作业的分布式云服务,可以为有大数据计算业务需求的企业或者科研单位等提供计算服务。Batch可以认为是一种分布式计算的调度框架,Batch拥有着海量的计算资源,用户可以在Batch中提交批量计算任务,Batch就可以根据用户的需求提供计算资源,来处理用户的批量计算任务。

计算节点:Batch提供给用户的计算资源,用于处理用户的批量处理任务,可以是物理机、虚拟机或容器等。例如,用户在Batch中提交了一段需要运行的应用程序,并要求需要10个计算节点,并对每个计算节点的配置进行设置,例如运行内存等配置,那么Batch则会按照用户需求的配置为该用户分配10个计算节点,来并行的运行用户提交的应用程序。

外部存储系统:用于存储用户提交的批量计算任务运行所需的数据,一般是由用户指定的,可以是用户自有的服务器,也可以是用户购置的云端存储空间。

另外,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,在不做特别说明的情况下,一般表示前后关联对象是一种“或”的关系。

现有的分布式缓存方案,通常使用一致性哈希算法来实现分布式缓存,但是这种算法需要节点之间建立通信,以获取数据的存储位置等信息,例如某个计算节点缓存了某个文件,就需要将该文件的存储位置通知给其他计算节点,节点之间的交互环节较多,从而使得各个计算节点的资源开销较大。同时,由于现有的分布式缓存方案交互环节更多,更加的依赖于网络环境,网络环境的差异为现有分布式缓存方案的实施效果带来了更多的不确定性。

本发明人对现有技术进行分析后发现,由于一致性哈希算法本身的局限性,使得计算节点的资源开销大,并且还使得现有分布式缓存方案的实施效果依赖于网络环境。鉴于此,本发明人考虑到,想要缓解这种情况,那么势必要减少计算节点之间的交互,也就是说如果有一种数据访问的方式,在减少计算节点的交互的同时,依然能够对数据访问不产生影响,那么这种方式就可以减少对网络环境的依赖,同时由于计算节点之间交互的减少,使得各个计算节点的资源开销也就随之减少了,因此这是一种可改进的方向。

鉴于上述的分析和考虑,本发明实施例提供了一种数据访问请求的处理方法,在该方法中,在获取数据块时,计算节点可以根据预设规则获取存储该数据块的多个节点,进而将数据访问子请求转发给该节点,实现数据块的访问,这样,计算节点之间无需在存储数据块时,通知其他计算节点数据的存储位置,只需要通过预设的规则计算节点可以自行知道数据块的存储位置,从而减少计算节点之间的资源开销,提高批量计算的性能。可选的,最高随机权重(Highest Random Weight,HRW)算法是一种分布式协议的算法,通过该算法可以在多个计算节点间达成一致,以决定数据块的存储位置,从而计算节点间无需交互,也能够获取数据块的存储位置,因此可以将HRW算法作为上述预设规则的选择之一。

此外,本发明人还考虑到目前文件存储都是基于文件为基本存储单元来存储的,在文件较大时,单个计算节点存储该文件或者访问该文件都需要占用较多的资源。鉴于此,本发明实施例将一个文件化整为零,拆分为多个数据块来分别进行存储,这样,将单个文件的存储或者访问分担到多个计算节点上来完成,以避免单个计算节点负担较大的情况。

进一步的,在本发明实施例中,还通过本地缓存来存储数据块,这样,在访问数据块时可以直接从本地缓存获取,减少与外部存储系统的交互,即缓解了外部存储系统的访问压力,还避免了从外部存储系统获取数据的网络延迟,提高了获取数据的效率。

在介绍完本发明实施例的设计思想之后,下面对本发明实施例的技术方案能够适用的应用场景做一些简单介绍,需要说明的是,以下介绍的应用场景仅用于说明本发明实施例而非限定。在具体实施过程中,可以根据实际需要灵活地应用本发明实施例提供的技术方案。

请参见图1所示,为发明实施例中的技术方案能够适用的一种应用场景,在该场景中,可以包括用户设备101、外部存储系统102以及分布式批量处理系统103。

用户设备101可以是平板电脑(PAD)、笔记本电脑或者个人计算机(PersonalComputer,PC)等。其中,用户设备101上可以安装batch客户端,或者在浏览器中打开batch的网页,用户可以在客户端或者网页上提交批量计算任务。

外部存储系统102用于存储用户提交的批量计算任务运行时所需的数据,可以通过网络与用户设备101进行通信,用户设备101可以在外部存储系统102存储数据以及读取数据。

分布式批量处理系统103为用户提供批量计算服务,用户在客户端或者网页上提交批量计算任务之后,分布式批量处理系统103就会为该用户分配多个计算节点104,通过多个计算节点104来并行处理用户的批量计算任务,计算节点104可以是分布式批量处理系统103虚拟出的虚拟机,也可以是存在实体的物理机。计算节点104中安装有batch管理程序,用于在计算节点104处理批量计算任务时,监控批量计算任务的处理。其中,在计算节点104处理批量计算任务时,可能需要用到放在外部存储系统102中数据,因此计算节点104可以通过网络访问外部存储系统102,获取其中存储的数据。

当然,本发明实施例提供的方法并不限用于图1所示的应用场景中,还可以用于其他可能的应用场景,本发明实施例并不进行限制。对于图1所示的应用场景的各个设备所能实现的功能脚在后续的方法实施例中一并进行描述,在此先不过多赘述。

为进一步说明本发明实施例提供的技术方案,下面结合附图以及具体实施方式对此进行详细的说明。虽然本发明实施例提供了如下述实施例或附图所示的方法操作步骤,但基于常规或者无需创造性的劳动在所述方法中可以包括更多或者更少的操作步骤。在逻辑上不存在必要因果关系的步骤中,这些步骤的执行顺序不限于本发明实施例提供的执行顺序。所述方法在实际的处理过程中或者装置执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行。

请参见图2,为本发明实施例提供的分布式批量处理系统的架构示意图。其中,在用户提交批量计算任务之后,分布式批量处理系统则会根据用户的需求分配多个计算节点,图2中仅示出了部分计算节点,并不对计算节点的数量进行限制。计算节点之间一般通过内部局域网进行通信,网络时延相较每个计算节点访问外部存储系统而言更低。

其中,每个计算节点中都包括着Batch的代理程序,即图2中所示的Batch管理程序,Batch管理程序在计算节点分配并启动后开始运行,用于实现计算节点的环境初始化、存储映射和任务执行等功能。此外,各个计算节点中还运行着用户提交的批量计算任务的子任务,即图3中所示的业务应用。每个计算节点将自身的内存作为本地缓存,能够从外地存储系统中读取数据块并存储在本地,这样,在需要这些数据块时,就可以通过计算节点之间的内部局域网高速的读取数据块,降低读取数据块的时延,进而提高批量计算任务的执行效率。

请参见图3,为本发明实施例提供的数据访问请求的处理方法的流程示意图,其中,由于每个计算节点中都有可能涉及到数据的访问,且每个计算节点访问时所执行的过程是相同的,因此下面将以其中一个节点的数据访问过程为例进行描述。

步骤301:被请求节点截获业务应用发起的数据访问请求。

本发明实施例中,用户提交的批量处理任务是通过为该用户分配的多个计算节点共同来执行,多个计算节点能够并行的执行分配给自身的子任务。其中,在计算节点中的业务应用需要获取数据时,就会发起数据访问请求,数据访问请求用于请求该业务应用所需的应用数据段。

按照现有技术的处理方式,业务应用发起数据访问请求后,则会从外部存储系统中读取所需的应用数据段,因此,本发明实施例中,还会在业务应用与外部存储系统之间增加中间环节,用于截获业务应用发起的数据访问请求。

具体的,一种方式是可以通过Batch的存储映射功能,将外部存储系统挂载到各个计算节点的本地存储系统。在将外部存储系统挂载到各个计算节点的本地存储系统之后,计算节点中的业务应用在发起数据访问请求之后,就需要经过计算节点中的Batch管理程序,那么就可以截获到数据访问请求,通过协议转换后,适配外部存储系统的协议规范,以通过类似于访问本地存储系统的方式访问外部存储系统,方便于实现后续计算节点间的数据共享。对于不同的操作系统,实现挂载的方式可能不尽相同,例如在Linux系统下常见的方案是用户空间文件系统(File system in Userspace,FUSE),而在Windows下可以通过网络文件系统(Network File System,NFS)服务(Service)来实现。

当然,也可以通过其他的方式增设中间环节,以截获业务应用发起的数据访问请求。例如,还可以为业务应用提供应用程序接口,那么,业务应用在访问外部存储系统时,就需要调用应用程序接口,这样,也就可以在应用接口被调用时截获数据访问请求;或者,业务应用还可以通过命令行访问外部存储系统,与应用程序接口类似,同样可以在业务应用通过命令行调用应用程序接口时截获数据访问请求;或者,业务应用还可以通过外部挂载工具访问外部存储系统,那么同样也能够截获到业务应用的数据访问请求。无论是何种方式,都需要支持对数据访问请求的处理,比如请求加工、转发、协议转换等操作。

本发明实施例中,被请求节点是指截获到业务应用的数据访问请求的计算节点,一般来讲,也就是运行该业务应用的节点。

步骤302:被请求节点生成至少一个数据访问子请求。

本发明实施例中,数据存储的基本单元为数据块,那么数据访问的基本单元随之也就是数据块了,因此在获取数据访问请求之后,若是需要获取的应用数据段的大小超过单个数据块的大小,则需要将数据访问请求拆分成多个数据访问子请求,每个数据访问子请求分别用于获取应用数据段中的一个数据块。其中,数据块的大小可以根据应用场景进行设置,例如可以设置为4kB、8kB或者32kB等。

如图4所示,文件名为input.data的文件的大小为256kB,若是设定的单个数据块的大小为4KB,那么该文件可以划分为64个数据块,不同的数据块可以存储在不同的计算节点上,这样,避免单个文件过多的占用同一个计算节点的资源。示例性的,若业务应用所访问的应用数据段为应用数据段1,应用数据段1为文件input.data的5kB至8kB的部分,那么只需要访问数据块2即可,即只需要生成一个数据访问子请求;而若业务应用所访问的应用数据段为应用数据段2,应用数据段2为文件input.data的6kB至12kB的部分,所涉及的数据块包括数据块2和数据块3,那么需要将数据访问请求拆分成2个子请求,即需要生成2个数据访问子请求,分别用于获取数据块2和数据块3;若业务应用所访问的应用数据段为应用数据段3,应用数据段3为文件input.data的6kB至256kB的部分,所涉及的数据块包括数据块2~数据块64,那么需要将数据访问请求拆分成63个子请求,即需要生成63个数据访问子请求,分别用于获取数据块2~数据块63。

步骤303:被请求节点将每个数据访问子请求发送给对应的目标节点。

本发明实施例中,在生成至少一个数据访问子请求之后,则会根据每个数据访问子请求所要获取的数据块,确定出获取该数据块的目标节点,由于每个数据访问子请求的处理过程是相同的,因此下面将以一个数据访问子请求为例进行描述。

本发明实施例中,针对一个数据访问子请求,会根据预设规则从所有可用的节点中筛选出M个节点,并从M个节点中选择出一个目标节点,将数据访问子请求发送给选择出的目标节点。目标节点即为存储数据访问子请求所要获取的数据块的计算节点,因为在另一层面上来讲,该计算节点是被访问数据的节点,因此也可称为被访问节点。其中,M为正整数,为保证数据存储的可靠性,一般来讲,M不小于2,例如M可以设置为2、3或者4等。

具体的,在文件被拆分成多个数据块之后,可以在每个数据块的属性信息中增加该数据块所属的文件名、起始偏移量以及数据长度,以方便定位数据块在原始文件中的位置,并且还可以根据该数据块所属的文件名、起始偏移量以及数据长度等信息生成该数据块的标识,该标识能够唯一表征该数据块。那么,在根据预设规则从所有可用的节点中筛选出M个节点时,就可以根据数据访问子请求所要获取的数据块的属性信息,生成唯一表征该数据块的标识,结合各个可用的节点的标识,通过预设算法计算得到各个节点的权重值,然后根据权重值的大小,对权重值进行排序,并从中选择出排序靠前的M个节点。其中,通过预设算法,可以解决针对特定的数据块,各个计算节点能够对该数据块的存储位置达成一致。在实际应用中,每个节点需要提前获知系统中的全量节点信息,且全量节点信息必须是一致的,否则,计算出的存储位置则会有差异,全量节点信息可以通过Batch的后台服务器来收集,并统一下发到各个计算节点的Batch管理程序,并随着计算节点的变化动态的更新,其中,下发时可以是定时下发,也可以是在全量节点信息发生变化时再下发,这样,也就可以保证通过上述的预设算法计算权重值,所获取的特定的数据块的存储位置是相同的,从而减少各个计算节点之间的交互,减少计算节点的开销。

本发明实施例中,预设算法可以任何用于计算权重的算法,例如可以是最高随机权重(highest random weight,HRW)算法或者扩展的HRW算法,当然,还可以是其他的能够计算权重值的算法。以HRW算法为例,该算法可以通过数据块的标识和各个节点的标识,通过伪随机函数为每个计算节点生成一个随机权重,数据块就存储在随机权重较大的M个计算节点中,例如,一个数据块包括2个副本时,则数据块则会存储在随机权重最大的两个计算节点中。再具体实施中,相较现有采用一致性哈希算法的方案,HRW算法的复杂度远远低于传统的一致性哈希算法,HRW算法采用伪随机函数生成随机权重,这样,可以保证数据块在各个计算节点的分配是均匀平衡的,并且HRW算法不需要预处理,在实现了缓存数据块的均衡分布的同时,还没有额外的存储开销,提高系统运行的效率。

其中,对于原始的HRW算法来讲,数据块会存储在随机权重最高的计算节点中,本发明实施例为了提升数据存储的可靠性,对原始的HRW算法进行可改进,将数据块存储在权重较高的多个计算节点中,进而提高分布式缓存的可用性,避免单个计算节点故障导致数据块不可用。

本发明实施例中,由于各个计算节点之间虽然能够对数据块的存储位置达成共识,但是若是某个计算节点对数据块进行了修改,其他节点并不知道数据块已经进行了修改,从而造成数据污染,因此本发明实施例中的数据块的各个副本均为只读副本,避免多副本之间或者副本与源数据之间不一致带来的数据污染。

本发明实施例中,筛选出M个节点之后,则会从M个节点中选择出目标节点,并将数据访问子请求发送给该目标节点。其中,在进行选择时,可以随机从M个节点中进行选择,这样,可以在数据块的存储位置随机的基础上,进一步在数据访问时使得请求发送也是随机的,保证数据访问的几率是均衡的;或者,还可以是按照预设的规则从M个节点进行选择,比如数据块有两个只读副本时,可以首次选择其中一个副本,第二次选择另一个副本。

步骤304:目标节点确定自身缓存是否命中数据块。

本发明实施例中,目标节点接收到数据访问子请求之后,会从本节点中查找数据访问子请求所获取的数据块,从而确定自身是否存储有数据访问子请求所要获取的数据块。

步骤305:在步骤304的确定结果为是时,将数据块返回给被请求节点。

若是该数据块能够命中,也就是说目标节点的缓存中已经存储有该数据块时,则可以将该数据块直接返回给被请求节点。

步骤306:在步骤304的确定结果为否时,目标节点确定自身缓存是否还能够存储该数据块。

本发明实施例中,若是目标节点的缓存中该数据块未能够命中,也就是说目标节点中未存储该数据块时,目标节点还会进一步确定自身是否还能够存储该数据块,换句话说,目标节点需要确定自己是否还有存储该数据块的能力,例如目标节点中可用于缓存的存储空间不足以存储该数据块时,目标节点则无法继续存储该数据块,否则,若是目标节点中可用于缓存的存储空间足以存储该数据块时,目标节点则可以继续存储该数据块。

其中,由于批量计算的数据量通常较为庞大,因此高速缓存对于分布式缓存系统是至关重要的,但是当前在主流的提供批量计算服务的服务商中,存储网络化越来越普及,存储性能常常受网络环境影响,因此本发明实施例中,将内存作为高速缓存,其中,内存作为计算节点的本地资源,有别于网络存储介质,性能更加优异,且不受网络环境影响,很适合作为高速缓存来存储数据块。

但是,内存除了作为高速缓存来存储数据块,还需要为用户的业务应用提供服务,并且一般来讲,用户的业务应用的运行是首位的,因此本发明实施例中仅将内存中空闲内存的部分作为高速缓存,例如可以是空闲内存的70%或者80%,当然,比例可以根据实际情况进行设置。并且,因为业务应用运行时所利用的内存是动态变化的,无法很直接的设定用于作为高速缓存的内存空间的阈值,阈值过高容易影响业务应用的运行,相反,阈值过低造成闲置内存的浪费,缓存系统性能没有极致的发挥,因此传统的静态阈值的设置对于将内存作为高速缓存并不适用,因此,为了避免影响到业务应用的运行,计算节点中需要实时监控内存的使用量,并基于内存的使用量的变化动态的对存储的数据块进行处理。其中,监控可以是计算节点中安装Batch管理程序来完成的。

具体的,当内存的使用量增加时,可用内存相应的也就减少了,那么作为高速缓存的存储空间也就减少了,在高速缓存不足以存储所有已存储的数据块时,就需要对数据块进行淘汰。基于当前内存中未使用的存储空间可以确定出需要淘汰的数据量,然后根据需要淘汰的数量,将已存储的数据块中确定需要淘汰的部分数据块,并淘汰这些数据块。其中,在淘汰时,可以通过预设的页面置换算法、缓存替换算法或者非操作系统(OperatingSystem,OS)页面替换算法来进行数据块的淘汰,例如页面置换算法可以是最近最少使用(Least recently used,LRU)算法、先入先出队列(First Input First Output,FIFO)算法或者最不经常使用(Least Frequently Used,LFU)算法等。

此外,当数据块存储在内存中长久未被访问时,该数据块的存在会一直占据着存储空间,使得较为常用的数据块反而无法继续缓存,因此,在实际应用中,还会通过超时策略对数据块进行管理。具体的,通过监控本地缓存中存储的数据块当前时刻距离上一次被访问的时刻之间的时长,若是该时长大于或者等于预设时长阈值,则淘汰该数据块,从而使得本地缓存中缓存的数据块皆为热度较高的数据块,进一步提升数据访问的效率。

本发明实施例中,目标节点向被请求节点返回访问拒绝响应并不限于上述情况,还可以是在出现其他的情况时,例如可以是目标节点系统异常关机、缓存进程中断(Crash)或者进程无响应,请求超时等情况时,又或者是目标节点负载过高,比如当前有较多的数据访问子请求待处理导致CPU符合高等情况时,目标节点为了保护用户的业务应用的良好运行,都会向被请求节点返回拒绝响应,以拒绝后续的数据访问子请求。

步骤307:在步骤306的确定结果为是时,目标节点从外部存储系统读取数据块。

本发明实施例中,若是目标节点确定能够继续缓存数据访问子请求所要获取的数据块,则目标节点执行溯源策略,也就是向外部存储系统发送数据块读取命令,以从外部存储系统中读取数据块。在外部存储系统返回数据块之后,目标节点则会将该数据块存储在内存中,并执行步骤305,即将该数据块发送给被请求节点。

步骤308:在步骤306的确定结果为否时,目标节点向被请求节点返回访问拒绝响应。

若是目标节点中未命中数据访问子请求所要获取的数据块,并且该目标节点中还无法继续存储该数据块,那么目标节点则会向被请求节点返回访问拒绝响应。

步骤309:被请求节点将数据访问子请求转发给重新选择出的目标节点;或者,被请求节点从外部存储系统读取数据块。

本发明实施例中,被请求节点接收到目标节点的访问决绝响应之后,则可以知道无法从第一次转发的目标节点再获取到数据块,那么被请求节点可以从之前确定的M个节点中重新选择出一个目标节点,并将数据访问子请求重新转发给新选择的目标节点,对于发送给新选择出的目标节点的后续流程则与步骤303之后的相同,因此不再进行重复描述。

或者,被请求节点在确定无法从第一次转发的目标节点再获取到数据块后,还可以自行执行溯源策略,即自行从外部存储系统读取数据块。

本发明实施例中,被请求节点接收到目标节点的访问决绝响应之后,则可以知道无法从第一次转发的目标节点再获取到数据块,那么被请求节点还会该目标节点添加到黑名单中,黑名单中的节点均为不可用的节点,这样,在下次进行权重值的计算时,就会将该目标节点排除在外,以避免再次访问到该目标节点,再次出现访问失败的情况。当然,每个计算节点的内存的使用量都是动态变化的,也就是说后续黑名单中的计算节点也可能成为可用的节点,那么还需要对黑名单中计算节点的状态进行监控,例如可以以二进制指数回退的方式定期的复查该黑名单中的计算节点当前的状态,或者周期性的复查该黑名单中的计算节点当前的状态,若是计算节点满足可用条件时,就可以将该计算节点从黑名单中剔除,恢复该计算节点的使用。或者,对于计算节点而言,可能会被彻底销毁,也有可能后续会恢复为可用的节点,因此处于黑名单中的计算节点可以是具有时效性的,也就是说,一个计算节点位于黑名单中超过一定时长后,就自动将该计算节点从黑名单中移除。

其中,当计算节点被加入到黑名单中时,就会被移除计算网络,该计算节点不再参与权重值的计算,不会再分配新的数据块,并且已分配的数据块会逐步迁移到随机权重更高的节点上。

示例性的,例如被请求节点所计算的计算节点的权重值排序依次为节点1、节点2和节点3,若M为2,那么选择出的M个节点即为节点1和节点2,但是当节点1被纳入到黑名单之后,被请求节点再次计算的权重值的排序则会变更为节点2和节点3,那么选择出的M个节点则会为节点2和节点3,也就是说,本应由节点1存储的数据块则会在节点3上进行存储。

同样的,对于新增加的计算节点,可以将新增加的计算节点纳入到后续的权重值的计算,从而为新增加的计算节点分配新的数据块。计算节点的动态变化会导致数据块的迁移,虽然迁移过程可能导致缓存命中失败,但是通过HRW算法可以保证分布式数据块的最终一致性。

步骤310:被请求节点将组装后的应用数据段发送给业务应用。

被请求节点获取到数据访问请求所要获取的至少一个数据块之后,则会将至少一个数据块进行组装,然后将组装后的应用数据段发送给业务应用,也就是数据访问请求的发送方。具体的,由于每个数据块的属性信息中都包括了数据块的起始偏移量,那么可以按照其实偏移量对数据块进行组装。

本发明实施例中,数据存储系统有多种,例如数据存储系统可以是基于对象存储,或者基于文件存储的,虽然本发明实施例中引入了数据块的概念,但是可以提供统一的逻辑层表示,可以将不同类型的外部存储系统封装成同一套接口规范,方便业务应用使用,也就是说,对于用户而言,直观感知到还是原有的数据存储系统的存储方式,并不会对数据块有所感知。此外,还可以在数据块的基础上,引入数据块组的概念,通过多层表示满足更复杂的存储模型,最终实现逻辑层的统一,允许更多存储系统的接入。

示例性的,下面将以具体的实施例对本发明实施例的方案进行描述。请参见图5所示,该分布式批量计算系统中至少包括5个计算节点,图5中仅示出了5个计算节点,即节点1~节点5,假设节点1中业务应用发起了数据访问请求,也就是说节点1位被请求节点,数据访问请求用于请求访问应用数据段1,应用数据段1包括数据块2和数据块3,节点2的内存中已存储有数据块2,节点3中未存储有数据块2,且节点2和节点3为可用的节点,节点4中未存储有数据3,且节点4当前不可用(节点1尚不知晓)。其中,假设数据块的副本数量为2。

在节点1中的业务应用发起数据访问请求时,节点1中的Batch管理程序就可以截获到业务应用的数据访问请求,并拆分成两个数据访问子请求,即数据访问子请求1和数据访问子请求2,其中,数据访问子请求1用于请求获取数据块2,数据访问子请求2用于请求获取数据块3。

对于数据访问子请求1而言,节点1根据数据块2的标识以及系统中可用的节点的标识,为每个可用的节点生成一个随机权重,并且确定权重值排序靠前的2个节点为节点2和节点3,那么节点则会从中随机选择一个目标节点,则目标节点可能为节点2,也有可能为节点3。

若目标节点为节点2,则具体流程如图5所示:

步骤501:节点1中将数据访问子请求1转发给节点2。

步骤502:节点2从本地缓存中命中数据块2,则将数据块2发送给节点1。

若目标节点为节点3,则具体流程如图6所示:

步骤601:节点1将数据访问子请求1转发给节点2。

步骤602:节点2从本地缓存中未命中数据块2,且节点2确定自身还能够存储数据块2,则向外部存储系统发送数据块读取命令,以读取数据块2。

步骤603:节点2接收外部存储系统返回的数据块2,并存储数据块2,其中,虚线框表示从外部存储系统读取并存储的数据块2。

步骤604:节点2将数据块2发送给节点1。

对于数据访问子请求2而言,节点1根据数据块2的标识以及系统中可用的节点的标识,为每个可用的节点生成一个随机权重,并且确定权重值排序靠前的2个节点为节点3和节点4,那么节点则会从中随机选择一个目标节点,则目标节点可能为节点3,也有可能为节点4。

若目标节点为节点4,则具体流程如图7所示:

步骤701:节点1将数据访问子请求2转发给节点4。

步骤702:节点4从本地缓存中未命中数据块3,则节点4确定自身不能继续存储数据块3,则向节点1返回拒绝访问响应。

步骤703:节点1接收节点4的拒绝访问响应后,向外部存储系统发送数据块读取命令,以读取数据块3。

步骤704:节点1接收外部存储系统返回的数据块3。

节点1获取到数据块2和数据块3之后,将数据块2和数据块3组装成应用数据段1,并发送给节点1中的业务应用。

综上所述,本发明实施例中,通过改进后的HRW算法,达成了各个计算节点对于数据块存储位置的一致认知,这样,计算节点之间无需在存储数据块时,通知其他计算节点数据的存储位置,只需要通过预设的规则计算节点可以自行知道数据块的存储位置,从而减少计算节点之间的资源开销,提高批量计算的性能。此外,本发明实施例将一个文件化整为零,拆分为多个数据块来分别进行存储,这样,将单个文件的存储或者访问分担到多个计算节点上来完成,以避免单个计算节点负担较大的情况。进一步的,在本发明实施例中,还将内存作为高速缓存,这样,在访问数据块时可以直接从内存获取,减少与外部存储系统的交互,即缓解了外部存储系统的访问压力,还避免了从外部存储系统获取数据的网络延迟,提高了获取数据的效率。

请参见图8,基于同一发明构思,本发明实施例还提供了一种数据访问请求的处理装置,该装置包括:

截获单元801,用于截获到请求获取应用数据段的数据访问请求时,生成至少一个数据访问子请求,每个数据访问子请求分别用于获取应用数据段中的一个数据块;

数据块获取单元802,用于分别根据每个数据访问子请求所要获取的数据块,执行如下步骤:

根据预设规则从分布式批量处理系统中所有可用的节点中筛选出M个节点,其中M为正整数;

从M个节点中选择一个目标节点;并

将数据访问子请求发送给选择出的目标节点;

接收选择出的目标节点返回的数据块,其中,目标节点在收到数据块访问子请求时,如果本地缓存中储存有数据访问子请求所要获取的数据块的只读副本,则从本地缓存中获取并发送,否则,从外部存储系统获取后,保存到本地缓存中并发送;

数据块组合单元803,用于将收到的至少一个数据块组合成应用数据段并发送给数据访问请求的发送方。

可选的,数据块获取单元802,具体用于:

根据数据访问子请求所要获取的数据块的属性信息,生成唯一表征数据访问子请求所要获取的数据块的标识,其中,属性信息用于表征数据块在原始文件中的位置;

根据数据块的标识,以及各个可用的节点的标识,通过预设算法生成各个节点的权重值;

从所有可用的节点中选择随机权重值排序靠前的M个节点。

可选的,数据块获取单元802,还用于:

当收到选择出的目标节点返回的访问拒绝响应后,从随机权重值排序靠前的M个节点中重新选择一个目标节点,其中:访问拒绝响应是目标节点确定本地缓存中未存储数据块访问子请求所请求的数据块,且本地缓存不可用而回复的;并

将数据访问子请求重新发送给重新选择出的目标节点。

可选的,装置还包括挂载单元804,用于:

将存储业务应用的源数据的外部存储系统挂载到分布式批量处理系统中所有节点的本地存储系统。

可选的,数据块获取单元802,还用于:

当收到选择出的目标节点返回的访问拒绝响应后,从外部存储系统中读取数据块访问子请求所请求的数据块,其中:访问拒绝响应是目标节点确定本地缓存中未存储数据块访问子请求所请求的数据块,且本地缓存不可用而回复的。

可选的,装置还包括添加单元805,用于:

当收到选择出的目标节点返回的访问拒绝响应后,将返回访问拒绝响应的目标节点添加至黑名单,其中,黑名单中的节点为不可用的节点。

该装置可以用于执行图1~图7所示的实施例中被请求节点执行的方法,因此,对于该装置的各功能模块所能够实现的功能等可参考图1~图7所示的实施例的描述,不多赘述。其中,挂载单元804和添加单元805虽然在图8中一并示出,但需要知道的是,挂载单元804和添加单元805并不是必选的功能单元,因此在图8中以虚线示出。

请参见图9,基于同一发明构思,本发明实施例还提供了一种数据访问请求的处理装置,该装置包括:

收发单元901,用于接收被请求节点发送的数据访问子请求,数据访问子请求为被请求节点截获到请求获取应用数据段的数据访问请求后,生成的至少一个数据访问子请求中的其中一个,其中,每个数据访问子请求分别用于获取应用数据段中的一个数据块;

确定单元902,用于在确定本地缓存中储存有数据访问子请求所要获取的数据块的只读副本时,则从本地缓存中获取并发送给被请求节点;否则,确定本地缓存是否能够存储数据块;并

在确定结果为是时,从挂载到自身的本地存储系统的外部存储系统中获取数据块并存储到本地缓存后,发送给被请求节点;或者,

在确定结果为否时,向被请求节点返回访问拒绝响应。

可选的,装置还包括第一监控单元903和第一执行单元904;

第一监控单元903用于:监控本节点的内存的使用量,其中,在本节点中运行的业务应用未使用的部分存储空间用于进行数据块的存储;

第一执行单元904用于:监控到内存的使用量增加时,根据当前内存中未使用的存储空间确定需要淘汰的数据量;并根据需要淘汰的数据量,通过页面置换算法从已存储的数据块中确定需要淘汰的部分数据块,并淘汰部分数据块。

可选的,第二监控单元905和第二执行单元906;

第二监控单元905用于:监控本地缓存中存储的数据块当前时刻距离上一次被访问的时刻之间的时长;

第二执行单元906用于:当时长超过预设时长阈值时,则淘汰数据块。

该装置可以用于执行图1~图7所示的实施例中目标节点执行的方法,因此,对于该装置的各功能模块所能够实现的功能等可参考图1~图7所示的实施例的描述,不多赘述。其中,第一监控单元903~第二执行单元906虽然在图9中一并示出,但需要知道的是,第一监控单元903~第二执行单元906并不是必选的功能单元,因此在图9中以虚线示出。

请参见图10,基于同一技术构思,本发明实施例还提供了一种计算机设备,可以包括存储器1001和处理器1002。

所述存储器1001,用于存储处理器1002执行的计算机程序。存储器1001可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据计算机设备的使用所创建的数据等。处理器1002,可以是一个中央处理单元(central processing unit,CPU),或者为数字处理单元等等。本发明实施例中不限定上述存储器1001和处理器1002之间的具体连接介质。本发明实施例在图10中以存储器1001和处理器1002之间通过总线1003连接,总线1003在图10中以粗线表示,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。所述总线1003可以分为地址总线、数据总线、控制总线等。为便于表示,图10中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

存储器1001可以是易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM);存储器1001也可以是非易失性存储器(non-volatilememory),例如只读存储器,快闪存储器(flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD)、或者存储器1001是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器1001可以是上述存储器的组合。

处理器1002,用于调用所述存储器1001中存储的计算机程序时执行如图1~图7中所示的实施例中各个设备所执行的方法,例如计算机设备可以为被请求节点或者目标节点。

本发明实施例还提供了一种计算机存储介质,存储为执行上述处理器所需执行的计算机可执行指令,其包含用于执行上述处理器所需执行的程序。

在一些可能的实施方式中,本发明提供的方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在计算机设备上运行时,所述程序代码用于使所述计算机设备执行本说明书上述描述的根据本发明各种示例性实施方式的方法中的步骤,例如,所述计算机设备可以执行如图1~图7中所示的实施例中各个设备所执行的方法。

所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。

本发明的实施方式的方法的程序产品可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在计算设备上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。

可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。

应当注意,尽管在上文详细描述中提及了装置的若干单元或子单元,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。

此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号