用于促进集群级缓存和内存空间的系统和方法与流程

文档序号:19942995发布日期:2020-02-14 23:26阅读:218来源:国知局
用于促进集群级缓存和内存空间的系统和方法与流程

相关申请

本申请要求由李舒(shuli)于2018年8月2日提交的代理人案号为ali-a14228usp且发明名称为“与离线存储装置相协作以适应应用程序的混合部署的集群级内存-缓存空间的方法和系统(methodandsystemofcluster-levelcache-memoryspacecooperatingwithofflinestoragetoaccommodatethemixeddeploymentofapplications)”的美国临时申请第62/713,920号的权益,其全部公开内容以引用的方式并入本文中。

背景

本公开总体上涉及存储管理领域。更具体地,本公开涉及一种用于促进应用程序(app)运行的集群级内存空间的系统和方法。



背景技术:

互联网的指数级增长使其成为在物理装置和虚拟装置上运行的各种应用程序的主流传送介质。这些应用程序带来了对计算资源的日益增长的需求。因此,设备供应商们竞相构建具有多种功能的更大、更快的计算装置(例如处理器、存储器、内存装置等)。然而,计算装置的性能不能无限增长,其受到物理空间、功耗以及设计复杂性等因素的限制。此外,具有更高性能的计算装置通常更加复杂和昂贵。更重要的是,由于过于庞大和复杂的系统通常无法提供规模经济,因此,仅通过增加计算装置的大小和性能来满足更高的计算需求可能在经济上是不可行的。

在这样的计算装置上,内存通常用作临时存储数据的桥接层。为了追求高性能,在计算装置上运行的应用程序通常在内存中维护大量数据以用于高效访问和频繁操作,当完成针对这些数据的计算时,数据通常被传送到更永久的存储器中。然而,随着分布式系统的发展,数据一致性可以通过多层保护来实现。结果,一些内存故障可以使用分布式保护恢复,且因此是可以承受的。此外,在分布式计算基础结构(如云计算)中,应用程序可以在底层计算资源的内存上连续运行,而不需要将数据传送到永久存储装置。这些特性降低了某些应用程序(如数据库、搜索引擎等)的永久存储需求。因此,内存的作用已经从临时存储变成了相对一致的存储。

如果某个应用程序只需在底层基础结构上运行,而无需考虑物理硬件资源和基础结构软件,则所述应用程序可被设计成高效地操作。因此,应用程序开发人员可以专注于应用程序的优化。



技术实现要素:

本文描述的实施例提供用于促进集群中的集群级缓存和内存的系统。在操作期间,所述系统向在集群中的第一计算节点上运行的第一应用程序呈现集群缓存和集群内存。所述集群缓存可以基于所述集群中的一个或多个计算节点的永久存储装置,并且所述集群内存可以基于所述集群中的一个或多个存储节点的永久存储装置。所述系统可以维护所述集群缓存的第一虚拟地址与所述一个或多个计算节点中的所述第一计算节点的第一永久存储装置的第一物理地址之间的第一映射。当接收到来自所述第一应用程序的对缓存内存的第一内存分配请求后,所述系统基于所述第一映射分配与所述第一物理地址相对应的第一内存位置。所述第一应用程序可以被配置为基于所述第一虚拟地址访问所述第一内存位置。

在本实施例的变体中,所述系统确定所述第一永久存储装置是否可服务于来自所述第一应用程序的第二内存分配请求。如果所述第一永久存储装置无法服务于所述第二内存分配请求,则所述系统分配与所述一个或多个计算节点中的第二计算节点的第三永久存储装置的第三物理地址相对应的第二内存位置。所述第三物理地址映射到第三虚拟地址。所述第一应用程序可被配置为基于所述第三虚拟地址访问所述第二内存位置。

在本实施例的变体中,当接收到来自所述第一应用程序的基于所述第一虚拟地址的第一释放请求后,所述系统使所述第一内存位置可用于后续分配。

在本实施例的变体中,所述系统还维护所述集群内存的第二虚拟地址与所述一个或多个存储节点中的第一存储节点的第二永久存储装置的第二物理地址之间的第二映射。此外,基于所述第二映射,所述系统将所述第一应用程序的数据页存储至与所述第二物理地址相对应的第二内存位置。所述第一应用程序被配置为基于所述第二虚拟地址访问所述第二内存位置。

在另一变体中,所述系统将所述数据页的副本存储至与所述一个或多个存储节点中的第二存储节点的第四永久存储装置的所述第三物理地址相对应的第三内存位置。所述第二虚拟地址进一步映射到所述第三物理地址。

在另一变体中,所述系统接收基于所述第二虚拟地址对所述数据页的读取请求,在所述第二永久存储装置与所述第三永久存储装置之间选择用于检索所述数据页以服务于所述读取请求的永久存储装置,并且从所述选择的永久存储装置中获得所述数据页。

在另一变体中,所述系统基于所述第二虚拟地址接收来自所述第一应用程序的对数据页的写入请求,基于所述第二映射确定所述数据页已存在,并且在不执行写入操作的情况下更新所述第二映射。

在另一变体中,所述系统接收来自所述第一应用程序的对数据页的写入请求,将所述数据页存储在多个物理地址的内存位置中,并且将第三虚拟地址映射到所述多个物理地址。接着,所述系统从所述多个物理地址中选择一个物理地址作为用于呈现所述集群内存的所述数据页的代表地址。

在另一变体中,所述系统确定所述集群内存的独有数据页,生成包括所述独有数据页和对应映射信息的备份文件,并且将所述备份文件发送到区别于所述一个或多个存储节点的离线驱动器。

在另一变体中,所述系统将删除编码应用于独有数据页,并且终止针对所述独有数据页的基于复制的保护。

附图说明

图1a示出了根据本申请的实施例的促进向应用程序提供集群级缓存和内存的示例性基础结构。

图1b示出了根据本申请的实施例的示例性集群级缓存和内存。

图2示出了根据本申请的实施例的应用程序在集群级缓存和内存上的示例性执行。

图3a呈现了根据本申请的实施例的示出主节点形成集群第3层(l3)缓存的方法的流程图。

图3b呈现了根据本申请的实施例的示出应用程序在集群l3缓存中请求内存分配的方法的流程图。

图3c呈现了根据本申请的实施例的示出主节点注册分配于集群l3缓存中的内存的方法的流程图。

图3d呈现了根据本申请的实施例的示出应用程序在集群l3缓存上执行内存管理的方法的流程图。

图4a示出了根据本申请的实施例的在集群内存中的示例性内存页。

图4b示出了根据本申请的实施例的与集群内存相关联的操作的示例性分布。

图5a呈现了根据本申请的实施例的示出基础结构形成集群内存的方法的流程图。

图5b呈现了根据本申请的实施例的示出基础结构在集群内存上执行读取/写入操作的方法的流程图。

图5c呈现了根据本申请的实施例的示出基础结构执行集群内存的离线备份的方法的流程图。

图6示出了根据本申请的实施例的促进向应用程序提供集群级缓存和内存的示例性计算机系统。

图7示出了根据本申请的实施例的促进向应用程序提供集群级缓存和内存的示例性设备。

在诸图中,相同的附图标记指代相同的附图元件。

具体实施方式

呈现以下描述以使得本领域技术人员能够制造和使用实施例,并且在特定应用及其要求的背景下提供以下描述。对于本领域技术人员来说,对所公开的实施例的各种修改是显而易见的,并且在不脱离本公开的精神和范围的情况下,可以将本文定义的一般原理应用于其他实施例和应用。因此,本文描述的实施例不限于所示的实施例,而应符合本文公开的原理和特征的最宽范围。

综述

本申请描述的实施例通过向应用程序提供(i)由集群中的相应计算节点的本地永久存储装置表示的全局集群缓存,以及(ii)由集群中的相应存储节点的永久存储装置表示的全局集群内存,解决了向应用程序提供大规模缓存和内存而不考虑底层硬件和基础结构软件的问题。术语“应用程序”可以指在装置上运行的应用程序,其可以发出输入/输出(i/o)请求(例如,读取或写入请求)。

对于现有技术,在云环境中,应用程序通常在虚拟机(vm)上运行。vm可以提供物理机的有效且独立的复制。vm可以在其部署和执行期间提高灵活性和效率。vm可以模拟物理机并且在管理程序上运行。所述管理程序在物理装置的本地硬件上执行,并且促进硬件的共享和管理。因此,多个vm可以在同一物理机上执行,同时彼此保持隔离。vm也可以作为进程运行,所述进程可以是主机操作系统(os)上的应用程序。此vm在进程启动时创建,并且在进程终止时终止。

无论其为哪种类型,vm仍然使用vm的虚拟硬件配置将自身表示为在其上运行的应用程序的计算机。然而,这需要在vm上运行的应用程序与底层硬件和/或系统软件相协调,以确定如何有效地利用底层vm配置。例如,所述配置可以指示特定vm的硬件需求以及在vm上运行的应用程序可能需要相对于底层硬件和/或基础结构软件确定应用程序运行效率。尽管在云环境中部署vm简化了应用程序的执行空间,然而vm配置与硬件和基础结构软件的底层部署的强耦合可能需要大量的资源,并且延长了开发过程。这可能会阻碍在云环境中运行的应用程序的优化。

为了解决这个问题,本文描述的实施例呈现了允许应用程序在可按字节可寻址的大内存空间中运行的基础结构。结果,应用程序不需要处理来自永久存储装置驱动器(例如硬盘驱动器或hdd)的块级数据访问。所述基础结构可以在后台管理数据移动、存储和检索。因此,当应用程序在所述基础结构上启动时,应用程序就可以使用大容量的虚拟内存空间。由于运行应用程序所需的必要内存可以从虚拟内存空间分配,所以所述应用程序可以在虚拟内存空间上运行,而不需要管理永久存储装置驱动器中的数据。

应用程序可以简单地使用内存分配和释放命令(例如,调用编程语言中的“malloc()”或“free()”),并且所述基础结构可以从虚拟内存空间分配内存或释放内存。以此方式,应用程序可以释放之前分配给应用程序的未用内存空间,并且底层基础结构可以回收内存空间(例如,重新分配给另一应用程序)。所述基础结构可以包含一组计算节点和一组存储节点。这些节点组成节点集群。计算节点负责在集群上执行应用程序。为了促进在集群上执行应用程序,基础结构形成集群一级(l1)缓存、集群二级(l2)缓存、集群三级(l3)缓存以及集群内存的层级结构。集群为集群内存提供空间,集群内存是应用程序用来保存数据的字节可寻址内存空间。以此方式,基础结构为应用程序提供处理器、多级集群缓存和集群内存。因此,应用程序可以在内存上运行,而不需要基于块、文件、对象等对存储装置进行读取或写入。

集群l1缓存可以包含相应计算节点的中央处理器(cpu)的l1/l2/l3缓存。此集群l1缓存可以专用于本地计算节点,并且不能与集群中的其他计算节点共享。集群l2缓存是计算节点的内存(例如动态随机访问内存(dram),如双内联内存模块(dimm))。集群l2缓存也可以专用于本地计算节点,并且不能与集群中的其他计算节点共享。然而,集群l2缓存可以由同一计算节点中的多个cpu核心共享。集群l3缓存可以由计算节点中的非易失性内存(nvm)express(nvme)、固态驱动器(ssd)、存储级内存(scm)等永久存储装置形成。然而,基础结构可以将集群l3缓存的组合存储装置表示为可由相应计算节点访问的字节可寻址集群级内存装置。

集群可以包含一个或多个主节点,它们负责管理集群级内存。由于集群l3缓存是集群级逻辑内存空间,因此集群l3缓存的逻辑地址可以是连续的,并且映射到计算节点的内存装置的物理内存地址。在确定集群l3缓存中需要内存分配之后,应用程序可以首先尝试从本地永久存储装置分配内存。如果成功,则应用程序可以向主节点注册,继而将集群l3缓存的虚拟地址映射到存储装置的对应物理地址。主节点还就内存分配和虚拟内存地址通知应用程序。应用程序可以使用虚拟地址在所分配的内存空间上存储数据。

如果本地永久存储装置中的分配不成功,则应用程序可以查询主节点以进行内存分配。主节点可以从另一计算节点的永久存储装置分配内存空间。主节点可以根据一个或多个计算节点的可用内存空间、计算节点上的负载、利用率以及其他计算节点与具有内存分配请求的计算节点之间的网络带宽来选择其他计算节点的永久存储装置。主节点将集群l3缓存的虚拟地址映射到另一计算节点的存储装置的对应物理地址。主节点还就内存分配和虚拟内存地址通知应用程序。

在一些实施例中,应用程序可以向主节点提供请求,而主节点又从集群l3缓存分配所请求的内存。在一些实施例中,主节点可以优先分配集群l3缓存中的内存。例如,主节点可以将映射到本地计算节点的内存的逻辑空间分配给在计算节点上运行的高优先级应用程序。主节点也可以按先到先得的方式操作。主节点可以首先将每个个别计算节点中的本地内存空间映射为由在所述计算节点上运行的应用程序使用的集群l3空间。如果本地内存空间耗尽,则主节点可以从其他计算节点的物理内存装置分配集群l3内存空间。以此方式,主节点维护虚拟内存到集群l3缓存的物理内存空间的映射,并且可以根据实时内存分配和释放操作更新所述映射。

此外,所述基础结构为在其上运行的相应应用程序提供集群内存(可以是虚拟内存空间)。所述基础结构使用相应存储节点中的存储装置的存储空间来呈现集群内存。集群内存中的每个页都可以看作是虚拟页。所述基础结构可以在不同的存储节点中存储虚拟页的多个副本,从而为每个虚拟页提供高可用性。所述基础结构可以维护虚拟页的虚拟内存地址与对应于每个副本的物理地址之间的映射。因此,即使应用程序可能将虚拟页视为集群内存中的单个页,但虚拟页中的数据存储在多个物理页中。以此方式,所述基础结构可在维护多个副本的同时向应用程序呈现虚拟化集群内存。

在某些实施例中,所述基础结构可以记录集群内存内容的快照,并且将快照存储在离线基础结构驱动器中。离线驱动器可以包含另一组可能不参与集群内存的永久存储装置驱动器。所述离线驱动器可以与集群共置,或者位于可通过网络访问的远程位置。集群缓存中的内容可以不备份到离线驱动器中。由于离线驱动器仅用于存储备份数据(即,快照),而不是使用高处理量低延迟驱动器,因此离线装置可以包含低成本的硬盘驱动器作为高容量的离线存储装置。

示例性基础结构

图1a示出了根据本申请的实施例的促进向应用程序提供集群级缓存和内存的示例性基础结构。在本实例中,基础结构100可以包含一组计算节点102和一组存储节点106。这些节点可以通过网络150互相连接,并且形成节点集群,其可以称为集群110。集群110可以用于云环境(例如数据中心)或企业环境(例如大型实体)。计算节点102负责在集群110上执行应用程序。另一方面,存储节点106呈现由相应存储节点106的永久存储装置表示的全局集群内存140。

提供不同的基于云和/或基于网络的服务的许多应用程序持续运行。因此,这些应用程序可以不需要特意考虑关闭、将应用程序数据传送到永久存储装置并且使用所存储的数据进行重启。因此,如果基础结构100能够提供满足这些应用程序在无需考虑底层硬件或数据传送的情况下运行的足够大的内存,则这些应用程序可以优化为在内存空间上执行。基础结构100使用集群内存140提供这样的内存空间。应用程序190可以使用集群内存140的虚拟内存空间在计算节点104的cpu核心112和114上执行。

集群内存140可以是字节可寻址的大内存空间。因此,应用程序190不需要处理来自永久存储装置驱动器的块级数据访问。基础结构100可以在后台中管理数据移动、存储和检索。因此,当应用程序190在基础结构100上启动时,集群内存140呈现为应用程序190的大容量虚拟内存空间。由于运行应用程序190所需的必要内存可以从集群内存140分配,所以应用程序190可以在虚拟内存空间上运行,而不需要管理存储节点106中的永久存储装置驱动器中的数据。应用程序190可以简单地使用内存分配命令,并且基础结构100可以从集群内存140分配内存。

例如,如果应用程序190请求从集群内存140分配内存,则基础结构100可以从集群110的存储节点108分配内存。应用程序190可能不知道所分配内存的物理位置。对于应用程序190,所分配的内存将来自与集群内存140对应的虚拟内存空间。以此方式,集群110为应用程序190提供可用于保存数据的字节可寻址内存空间。类似地,应用程序190可以释放之前分配给应用程序190的未用内存空间,并且基础结构100可以回收所述内存空间。

为了促进在集群110中执行应用程序190,基础结构100形成集群l1缓存152、集群l2缓存154和集群l3缓存156的层级结构。集群l1缓存152可以包含相应计算节点的中央处理器(cpu)的l1/l2/l3缓存。例如,在计算节点104上,集群l1缓存152可以包含l1指令缓存122和数据缓存124、与cpu核心112相关联的l2缓存132、l1指令缓存126和数据缓存128、与cpu核心114相关联的l2缓存134。缓存152还可以包含与cpu核心112和cpu核心114相关联的l3缓存130。集群l2缓存154可以是计算节点104的内存136。缓存154可以专用于计算节点104,并且不能与集群110中的其他计算节点共享。然而,缓存154可以由cpu核心112和cpu核心114共享。集群l3缓存156可以由计算节点104中的永久存储装置138(如ssd或scm)组成。基础结构100可以将集群l3缓存156的组合存储装置表示为集群110中的相应计算节点可以访问的字节可寻址集群级内存。

在一些实施例中,基础结构100可以记录集群内存140内容的快照170,并且将快照170存储在离线基础结构驱动器120中。离线驱动器120可以包含一组可能不参与集群内存140的永久存储装置驱动器。离线驱动器120可以与集群110共置,或可以位于可通过网络150访问的远程位置。集群l1/l2/l3缓存中的内容可以不备份到离线驱动器120。由于离线驱动器120只用于存储备份数据(如快照170),所以离线装置120可以包含一个或更多个低成本硬盘驱动器用作高容量离线存储装置,而不使用高处理量低延迟驱动器。

尽管集群l3缓存156和集群内存140作为连续的虚拟内存空间提供给应用程序190,但对应物理内存装置分布在多个装置上。例如,计算节点104的永久存储装置138只提供缓存156的一部分。因此,基础结构100包含用于提供集群级l3缓存156和内存140的一个或更多个主节点。图1b示出了根据本申请的实施例的示例性集群级缓存和内存。此处,集群110可以包含负责管理集群级缓存156和内存140的一个或多个主节点172和174。

基础结构100可以将计算节点102中的永久存储区138、161、162、163、164和165呈现为连续的集群l3缓存156。由于缓存156是集群级逻辑内存空间,因此缓存156的相应逻辑地址(例如,字节地址)可以是连续的(例如,可以是字节增量的),并且映射到计算节点的永久存储装置的物理内存位置。例如,可以将缓存156的逻辑地址(如虚拟页地址182)映射到可驻留在计算节点104的永久存储装置138中的对应物理页地址192。在一些实施例中,页地址192可以包含计算节点104的标识符(例如,介质访问控制(mac)地址、互联网协议(ip)地址、标识集群110中的计算节点104的集群标识符等)。以此方式,集群110中的相应页地址就可以唯一地标识任何计算节点102上的相应物理页。

类似地,缓存156的另一虚拟页地址184可以映射到可驻留在计算节点105的永久存储装置162中的对应物理页地址194。在缓存156中,即使虚拟页地址182和184的对应物理位置可以位于不同的永久存储装置上,它们仍可以作为连续字节地址出现。为了促进从缓存156分配内存空间,主节点172可以维护l3缓存映射表180,所述表将虚拟页地址182和184分别映射到物理页地址192和194。应注意,计算节点的标识符可以作为表180中的单列呈现,或作为页地址的嵌入部分呈现。表180的每个条目还可以包含指示符196(例如,标志),其指示是否分配了某个特定的虚拟页,或其是否可用。

当从应用程序190接收到缓存156的内存分配请求时,计算节点104可以从永久存储装置138分配内存,并且将所分配的内存向主节点172注册。主节点172可以将永久存储装置138上分配的内存空间的物理地址映射到表180中的缓存156的对应虚拟地址。如果来自永久存储装置138的内存分配不成功,则计算节点104可以查询主节点172来分配内存。接着,主节点172可以从另一永久存储装置(如永久存储装置161)分配所请求的内存。接着,主节点172可以将永久存储装置161上分配的内存空间的物理地址映射到表180中的缓存156的对应虚拟地址。

或者,计算节点104可以向主节点172提供请求。当应用程序190在计算节点104上运行时,主节点172可以在表180中查找已映射到永久存储装置138的缓存156中的可用虚拟内存空间。如果主节点172找到可用的虚拟内存空间,则主节点172可以将所述可用空间分配给应用程序190,并且将对应条目中的指示符标记为“已分配”。以此方式,主节点172就可以在基础结构100中方便地分配内存。在一些实施例中,主节点172和174中的一个节点作为现用节点操作,而另一作为备用节点操作。假设主节点172作为现用主节点操作,并且主节点174作为备用节点操作。主节点172和174维护的映射和状态的任何更新都可以同步。例如,主节点172和174可以维护表180的副本。如果主节点172更新表180,则主节点172可以向主节点174发送包括更新的控制消息。这允许主节点174维护表180的同步副本。以此方式,如果现用主节点172变得不可用,则备用主节点174可以随时提供高可用性。

图2示出了根据本申请的实施例的应用程序在集群级缓存和内存上的示例性执行。为了保证从缓存156的内存分配效率,主节点172可以优先分配缓存156中的内存。例如,如果应用程序190是高优先级应用程序,则对于来自应用程序190的请求,主节点172可以分配映射到计算节点104的永久存储装置138的内存的逻辑内存空间。另一方面,对于在相同计算节点104上运行的低优先级应用程序204,主节点172可以从另一永久存储装置161分配内存。类似地,如果应用程序206是在计算节点105上运行的高优先级应用程序,则对于来自应用程序206的请求,主节点172可以分配映射到计算节点105的永久存储装置162的内存的逻辑内存空间。

主节点172也可以基于先到先得的方式操作。主节点172可以首先映射每个计算节点中的本地内存空间。例如,如果应用程序190首先从缓存156请求内存空间,则主节点172可以分配与永久存储装置138对应的虚拟内存空间。然而,如果永久存储装置138上的可用空间耗尽,则可以通过另一永久存储装置161响应来自同一应用程序190或另一应用程序204的后续内存分配请求。在从缓存156分配内存之后,主节点172可以对应地更新l3缓存映射表。以此方式,主节点172为缓存156维护虚拟内存到物理内存空间的映射,并且可以基于实时内存分配和释放操作更新所述映射。

此外,基础结构100为应用程序190、204和206提供集群内存140。基础结构100使用存储节点106中的存储装置的存储空间来呈现集群内存140。例如,集群内存140可以包含存储节点108和220的存储装置的存储空间。集群内存140中的每个页都可以看作是虚拟页。基础结构100可以在不同的存储节点中存储虚拟页的多个副本,从而为每个虚拟页提供高可用性。基础结构100可以维护集群内存映射表200,所述表将虚拟页的相应虚拟内存地址映射到每个副本的对应物理地址。主节点172可以存储表200,表200可通过每个存储节点106进行访问。

假设与虚拟地址210对应的虚拟页被复制到存储节点108的物理地址222和存储节点220的物理地址224中。表200可以将虚拟地址210映射到物理地址222和224。在一些实施例中,表200还可以包含表示存储节点的列。接着,表200可以将虚拟地址210映射到包括存储节点108标识符和存储节点108上的物理地址222的元组。表200还可以将虚拟地址210映射到另一由存储节点220的标识符和存储节点108上的物理地址224组成的元组,可使存储节点唯一地标识集群110中的相应物理地址。因此,即使应用程序190、204或206可以将对应于地址210的虚拟页视为集群内存140中的单个页,然而虚拟页中的数据分别存储在对应于存储节点108和220中的地址222和224的物理页中。以此方式,基础结构100向在不同计算节点上运行的应用程序190、204和206提供相同的虚拟化集群内存140,同时在不同的存储节点上维护每个虚拟页的多个副本。

集群l3缓存的操作

图3a呈现根据本申请的实施例的示出主节点形成集群第3层(l3)缓存的方法的流程图300。在操作期间,主节点获得相应计算节点的永久存储装置的存储信息(操作302)。接着,主节点将存储装置的内存空间组织到集群l3缓存上,使得存储装置的物理地址以全局一致和连续的方式映射到l3缓存的对应虚拟地址(操作304)。接着,主节点将所述组织后的内存空间注册为集群l3缓存(操作306),并且检查是否所有计算节点均已被注册(操作308)。如果不是所有计算节点均被注册,则主节点将继续获得下一计算节点的永久存储装置的存储信息(操作302)。在注册所有计算节点后,主节点可基于注册的内存空间形成全局可访问的集群l3缓存(操作310)。

图3b呈现根据本申请的实施例的示出应用程序请求在集群l3缓存中分配内存的方法的流程图330。在操作期间,应用程序从对应于本地永久存储装置的集群l3缓存段请求内存分配(操作332),并且检查内存分配是否成功(操作334)。如果成功,则应用程序将使用主节点注册本地永久存储装置所分配的内存空间的物理地址(操作336)。成功分配内存后,应用程序可以获知所分配内存空间的物理地址。

在一些实施例中,应用程序可以向主节点发送控制消息以进行注册。控制消息可以指示其为注册请求,并且包含所分配的内存空间的物理地址。另一方面,如果不成功,则应用程序查询主节点,以从对应于另一计算节点的本地永久存储装置的集群l3缓存段分配内存空间(操作338)。以上查询还可以基于控制消息,所述消息指示其为内存分配请求,并且包含内存分配请求。这将导致主节点分配所请求的内存。当分配了内存(操作336或338)后,应用程序可以将数据存储在所分配的内存空间中(操作340)。

图3c呈现根据本申请的实施例的示出主节点注册分配于集群l3缓存上的内存的方法的流程图350。在操作期间,主节点接收来自应用程序的控制消息(操作352),并且确定消息类型(操作354)。如果消息类型是内存分配请求,则主节点将从集群l3缓存段分配所请求的内存空间,所述缓存段对应于非本地(例如,不同的)计算节点的永久存储装置(操作356)。如果消息类型是注册请求,则主节点确定与所分配的内存空间对应的虚拟地址(操作358)。主节点通过将虚拟地址映射到所分配的内存空间的物理地址来注册所分配的内存空间(操作360)。

图3d呈现了根据本申请的实施例的示出应用程序在集群l3缓存上执行内存管理的方法的流程图380。在操作期间,主节点发起内存管理操作(操作382)(例如,“碎片收集”调用),并且检查是否需要释放集群l3缓存空间(操作384)。内存管理操作可以基于内存调用(例如来自应用程序的碎片收集调用)启动。如果需要释放操作,则应用程序将释放集群l3缓存空间,并且通知主节点回收已释放的l3缓存空间(操作386)。此通知可以是发送到主节点的控制消息。如果不需要释放操作,则应用程序将确定无需进行内存清理(操作388)。

集群内存

图4a示出了根据本申请的实施例的集群内存中的示例性内存页。基础结构100基于存储节点106的存储装置提供集群内存140。集群内存140可以看作字节可寻址的连续虚拟内存空间。集群内存140的每个页都可以使用虚拟地址来寻址。基于虚拟地址对存储在集群内存140中的相应页进行存储和访问。集群内存140作为集群范围内在不同计算节点上运行的应用程序190、204和206均可使用的公共内存空间而操作。假设集群内存140基于对应的虚拟地址472、474、476、478和480分别存储数个页402、404、406、408和410。应用程序190可以使用虚拟地址472存储和检索页402的内容。

然而,页402的内容物理存储在存储节点106的多个存储装置中。即使主节点172可以在存储节点108、414和416的存储装置422、424和426中分别存储页402的三个副本402-1、402-2和402-3,应用程序190在集群内存140中也只能获知页402的一个副本。主节点172可以维护页402的虚拟地址472与页副本402-1、402-2和402-3的相应物理地址之间的映射。页副本402-1、402-2和402-3中的一个被选作代表性的页副本,其可为页402的主要副本。例如,如果页副本402-1是代表性的页副本,则在集群内存140中,页副本402-1可呈现为页402。为检索页402中的数据,应用程序190可以基于虚拟地址472发出读取操作。主节点172可以检索页副本401-1、402-2和402-3中的一个页副本的内容,并且将所述内容提供给应用程序190。

在一些实施例中,主节点172可以使用副本选择策略来确定从哪个副本检索内容。所述选择策略可以基于哪个存储节点能够提供最快的检索速率。通过维护页副本402-1、402-2和402-3,主节点172可以为页402提供高可用性。假设存储节点416不可用(例如,由于节点或网络故障),则无法通过主节点172对存储装置416中的页副本402-3、404-1、408-3和410-1进行访问。然而,由于页402、404、408和410的其他副本分别存储在存储节点108和414的存储装置422和424中,所以主节点172仍然可以促进在集群内存140中对页402、404、408和410的读取和写入操作。

存储节点106中的相应存储节点也可以配置计算资源,如存储节点108、414和416中的相应计算资源442、444和446。计算资源442、444和446可以促进集群内存140的操作并且促进与离线驱动器120的协作。当应用程序190将页402放入集群内存140中时,对应存储节点的计算资源将启动流线型进程。当为应用程序190分配页402时,主节点172决定哪个副本页代表集群内存140中的页。例如,集群内存140中的页402可以用存储装置422上的页副本402-1表示。类似地,集群内存140中的页404可以用存储装置426上的页副本404-1表示。

当应用程序190对页402执行任何读取/写入操作时,计算资源442发起流线型进程,这样即使在存储节点106中有页402的多个副本,应用程序190也只能被呈现与页402对应的一个物理页。所述操作完成后,计算资源442可以获得其他副本的位置(例如,存储节点414和416),接着计算资源442可以使页副本402-1上的数据与其他页副本402-2和402-3同步,从而确保数据的一致性。由于这个流线型进程是内联完成的(即,在执行操作期间),因此这种流线型可确保以减少访问开销的方式节省容量。

计算资源442还可以对存储装置422进行周期性快照。在一些实施例中,基于流线型进程,计算资源442可以确定更新了哪些数据块,接着计算资源442获得更新后的数据块的快照,并且将所述快照传送至离线驱动器120。例如,从上一个快照开始,如果包括页副本402-1和406-1的数据块已完成更新,而包括页副本404-2和408-2的数据块未完成更新,则计算资源442可生成包括页副本402-1和406-1的数据块的快照,并且将所述快照传送至离线驱动器120。应注意,可以使用之前快照中的其中一个快照对包括页副本404-2和408-2的数据块进行备份。此外,用于指示数据块是如何进行组织的信息(例如,物理页地址与虚拟页地址之间的映射)也会周期性地备份到离线驱动器120。

在某些实施例中,一旦数据备份到离线驱动器120,基础结构100就可以在存储节点中维护每个页的单个副本。换句话说,备份的页不再以多种复制格式存储,以此节省存储节点上的存储空间。另一,一般使用要求较少存储容量的清除编码来保护相应页。例如,在备份了页402之后,基础结构100可不维护页副本402-2和402-3,相反,页402可以划分为多个编码片段并且存储在不同的存储节点中,由于集群内存140中的页402可以用存储装置422上的页副本402-1表示,因此基础结构100仍然可以维护页副本402-1,从而有效地在页副本402-1上执行与页402对应的读取/写入操作。如果更新了页402,则更新后的页副本402-1可以划分为多个编码片段,并且存储在其他不同的存储节点(例如,存储节点414和416)中。

图4b示出了根据本申请的实施例的与集群内存相关联的示例性操作分布。在本实例中,存储节点108的计算资源442可以通过将页副本402-1存储在与虚拟地址472对应的物理位置来对集群内存140的页402执行页流线型进程452。此外,计算资源442还可以执行对页402的读取/写入操作454。结果,应用程序190可以基于虚拟地址472执行读写入操作454,计算资源442可以对页副本402-1执行对应操作。

此外,计算资源442可以通过获得存储装置422的周期性快照并且将其存储在离线驱动器120上,从而促进快照管理456。为此,计算资源442可以通过获得存储装置422的数据块快照来执行增量备份操作458,这些数据块自上次更新以来已经被更新,如结合图4a所描述。此外,一旦将计算资源442上的数据块备份到离线驱动器120,计算资源442就可以对所述数据块执行清除码操作460,并且将数据块的编码片段存储在其他存储节点上,从而节省存储节点106上的存储空间。

集群内存的操作

图5a呈现根据本申请的实施例的示出基础结构形成集群内存的方法的流程图500。可通过存储节点和主节点的计算资源中的一个或多个来执行基础结构的此方法。在操作期间,基础结构确定与相应存储节点的永久存储装置相关联的存储信息(操作502)。所述存储信息可以包含以下中的一个或多个:可用内存空间(例如,存储装置的大小)、磁盘类型、输入/输出(i/o)速度、总线宽度和存储装置的数据传送速率。接着,基础结构基于所确定的存储信息确定集群内存,以使集群内存中的每个页都可以有多个页副本(操作504)。基础结构将集群内存呈现给在其上运行的相应应用程序(操作506)。应用程序可以将集群内存视为用于有代表性的页副本的内存空间。页副本的其他副本可不呈现在集群内存中,因此其对应用程序来说可保持“不可见”状态。

图5b呈现根据本申请的实施例的示出在集群内存上执行读取/写入操作的方法的流程图530。可通过存储节点和主节点的计算资源中的一个或多个来执行基础结构的此方法。在操作期间,基础结构接收来自应用程序的与虚拟地址相关联的操作请求(操作532),并且确定所述请求是读取请求还是写入请求(操作534)。如果所述请求是写入请求,则基础结构可以计算与写入请求相关联的传入数据的哈希值(操作536),并且基于所计算的哈希值检查数据是否已经存在于集群内存中(操作538)。

如果数据已经存在,则基础结构将在不执行写入操作的情况下更新虚拟地址到物理地址的映射(操作540)。相反,如果数据不存在,则基础结构为页副本选择存储节点,并且指示所选择的相应存储节点的计算资源将传入数据写入本地页副本的本地物理地址中(操作542)。在更新映射(操作540)或发出写入指令(操作542)之后,基础结构确定具有代表性的页副本,并且通知应用程序写入操作已经完成(操作546)。具有代表性的页副本是集群内存中呈现的页的主副本。如果所述请求是读取请求,则基础结构根据选择准则选择与虚拟地址对应的物理页位置,并且将页内容呈现给应用程序(操作548)。所述选择准则可以指示哪个页副本能够以最快速度被检索到。

图5c呈现根据本申请的实施例的示出基础结构执行集群内存的离线备份的方法的流程图550。可通过存储节点和主节点的计算资源中的一个或多个来执行基础结构的此方法。在操作期间,基础结构为周期性快照维护计时器(操作552),并且检查计时器是否已被触发(操作554)。如果计时器未被触发,则基础结构可以继续为周期性快照维护所述计时器(操作552)。如果计时器已被触发,则基础结构将确定集群内存中的独有页,并且使相关联的映射信息同步(操作556)。

基础结构可以将具有代表性的页确定为独有页(即,每个页的独有副本)。接着,基础结构将清除编码应用于相应独有页(操作558)。在一些实施例中,基础结构可以终止对独有页的基于复制的保护。接着,基础结构复制更新后的独有页和映射(即,自上次快照以来已更新的独有页和映射),以为增量备份生成快照(操作560),并且将增量备份的快照传回至离线驱动器(操作562)。

示例性计算机系统和设备

图6示出了根据本申请的实施例的促进向应用程序提供集群级缓存和内存的示例性计算机系统。计算机系统600包含处理器602、处理器602的缓存604、内存606和存储装置608。内存606可以包含易失性内存(例如,双内联内存模块(dimm))。此外,计算机系统600可以耦合到显示装置610、键盘612和指针装置614。存储装置608可以存储操作系统616、存储管理系统618和数据636。存储管理系统618可以促进一个或多个以下装置的操作:计算节点、主节点、存储节点(例如存储节点上的计算资源)以及离线存储装置。

存储管理系统618可以包含指令,当所述指令由计算机系统600执行时,可使计算机系统600执行本公开中描述的方法和/或流程。具体来说,存储管理系统618可以包含用于将相应计算节点cpu的l1/l2/l3缓存呈现为集群l1缓存的指令、将相应计算节点的内存呈现为集群l2缓存的指令、以及将相应计算节点的永久存储装置呈现为集群l3缓存的指令(集群缓存模块620)。此外,存储管理系统618还包含用于将相应存储节点的永久存储装置呈现为集群内存的指令(集群内存模块622)。此外,存储管理系统618还包含用于在多个存储节点中维护多个页副本的同时、在集群内存中呈现独有页的指令(内存管理模块624)。

存储管理系统618还包含用于为集群l3缓存和/或集群内存维护虚拟地址与物理地址之间的映射的指令(内存管理模块624)。存储管理系统618还可以包含允许应用程序访问(例如,读取/写入)集群l1/l2/l3缓存和/或集群内存的指令(读取/写入模块626)。此外,存储管理系统618还包含周期性地将独有页快照备份至离线驱动器的指令(备份模块628)。存储管理系统618还可以包含基于清除编码保护已备份页的指令(备份模块628)。存储管理系统618还可以包含用于发送和接收消息的指令(通信模块630)。数据636可以包含任何可以促进基础结构操作的数据。

图7示出了根据本申请的实施例的促进向应用程序提供集群级缓存和内存的示例性设备。存储管理设备700可以包括多个单元或装置,这些单元或装置可以通过有线、无线、量子光或电子通信通道彼此通信。设备700可以使用一个或多个集成电路来实现,并且可以包含比图7所示更少或更多的单元或装置。此外,设备700可以集成在一个计算机系统中,或作为能够与其他计算机系统和/或装置通信的单独装置实现。具体地说,设备700可以包含处理器752、缓存754、内存756和存储装置758。设备700还可以包单元702-712,这些单元执行类似于图6中计算机系统600的模块620-630的功能或操作,包含:集群缓存单元702;集群内存单元704;内存管理单元706;读取/写入单元708;备份单元710以及通信单元712。

本详细描述中描述的数据结构和代码通常存储在计算机可读存储介质上,所述存储介质可以是可以存储代码和/或数据以供计算机系统使用的任何装置或介质。计算机可读存储介质包含但不限于:易失性内存、非易失性内存、磁性和光学存储装置、如磁盘、磁带、光盘(cd)、数码多功能光盘或数码视像光盘(dvd)、以及现在已知或后续研发出的能够存储计算机可读介质的其它介质。

具体实施方式部分所描述的方法和流程可以体现为代码和/或数据,这些代码和/或数据可以存储在如上文所描述的计算机可读存储介质中。当计算机系统读取和执行存储在计算机可读存储介质上的代码和/或数据时,计算机系统执行体现为数据结构和代码并且存储在计算机可读存储介质中的方法和过程。

此外,上述方法和流程可以包含在硬件模块中。例如,硬件模块可以包含但不限于专用集成电路(asic)芯片、现场可编程门阵列(fpga)和其他已知的或后续研发出的可编程逻辑装置。当硬件模块被激活时,硬件模块执行硬件模块中包含的方法和流程。

仅出于说明和描述的目的呈现本文描述的以上实施例。其并不旨在为详尽的或将本文所描述的实施例限于所公开的形式。因此,许多修改和变动对于本领域技术人员而言是显而易见的。此外,以上公开不旨在限制本文描述的实施例。本文所描述的实施例的范围由所附权利要求限定。

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