块级存储的制作方法

文档序号:6498098阅读:177来源:国知局
块级存储的制作方法
【专利摘要】一种存储系统包括用来接收块级存储请求的前端处理子系统以及耦合到前端子系统的多个后端存储节点。每一个后端存储节点包括存储设备和用来在存储设备上创建、读取、更新和删除数据块的块管理器。前端处理子系统维持多个块引用数据结构,其可由前端处理子系统使用以访问后端数据存储节点,以便为存储系统提供平衡性、冗余性和可扩展性。
【专利说明】块级存储

【背景技术】
[0001] 块级存储涉及原始存储卷的创建。基于服务器的操作系统连接到这些卷并且将它 们用作单独的硬盘。块级存储服务可以基于文件或卷表示。在文件表示中,文件可以由各 个用户共享。通过创建基于块的卷并且然后安装操作系统或文件系统并且附着到该卷,文 件可以使用本机操作系统来被共享。在卷表示中,每一个卷被附着到特定机器,从而提供原 始存储能力。

【专利附图】

【附图说明】
[0002] 为了详细描述各个示例,现在将参照附图,在附图中: 图1A示出根据示例的系统; 图1B示出根据示例的硬件图; 图2示出块引用数据结构的示例; 图3示出读取事务方法的示例; 图4示出读取事务方法的另一示例; 图5示出写入事务方法的示例;以及 图6示出写入事务方法的另一示例。

【具体实施方式】
[0003] 如以上所指出的,块存储服务可以基于文件或卷表示。卷包括固定大小的块的阵 列。尽管这样的方案已经被证实适用于集中式存储环境,但是这些方案并不特别适合作为 向虚拟化机器环境提供存储服务(特别是在云环境中)的高性能分布式块存储服务的基础。 在云环境中,大量(例如,数百个或数千个)物理或虚拟计算机器可能需要访问基于云的公 共存储服务。用来作为虚拟机器的主机的物理机器通常具有用于管理虚拟机器所需的软件 的小覆盖区(footprint),但是提供终端用户操作系统软件和服务的虚拟机器可能具有大 的存储需求。
[0004] 还期望的是以动态方式为虚拟机器分配存储。即,存储空间分配应当是按需进行 的(即,在后分配,意味着在系统初始化期间的存储空间分配之后)。如虚拟机器所被部署 的,它们通常使用标准操作系统映像来实例化,该映像的系统文件可以在虚拟机器的使用 期间保持不变。更新主要被应用于系统配置文件、自定义应用和用户空间文件。因此,期望 支持数据去重(deduplication)。
[0005] 除了使用标准操作系统映像之外,云存储服务应当允许客户端保存它们运行虚拟 机器的快照,包括例如操作系统内核、应用和用户空间文件。这样的快照作为例如备份或 者作为用于安装其他类似的虚拟机器的蓝图可以是有用的,并且这样的虚拟机器可以按需 (即,在需要时)大量生产。
[0006] 本文描述解决这些问题中的一些或全部的存储架构的各种示例。一般地,所公开 的示例包括块级存储系统,其基于数据库技术以用于其后端存储需求。通过将数据库技术 组合在块级存储系统中,所得到的存储系统是鲁棒且可扩展的。本文所述的存储系统实现 了可扩展性、冗余性和平衡性。可扩展性是指存储系统通过使用附加的存储节点来应对越 来越高的工作负载的能力,并且使得存储系统能够用在例如云环境中。冗余性是指存储系 统将块复制到一个或多个存储节点的能力。平衡性是指存储系统在各个存储节点之间分布 读取和写入请求并且还在存储节点之间迁移数据块以匹配存储节点上的工作负载模式的 变化的能力。
[0007] 图1A示出系统90,其中一个或多个物理计算机92能够访问存储系统100。每一 个物理计算机92可以是一个或多个虚拟机器94的主机,或者如果需要的话可以没有虚拟 机器。每一个物理机器92和/或虚拟机器94可以对存储系统100执行读取和写入事务。
[0008] 存储100可以实现为块级存储系统。就此而言,物理机器92和虚拟机器94可以 对存储系统1〇〇执行块级访问请求。
[0009] 图1A中所示出的说明性存储系统100包括前端处理子系统102,其耦合到一个或 多个后端存储节点104。简略地参照图1B,前端处理子系统102的示例包括耦合到非暂时 性存储设备105 (例如,硬盘、随机存取存储器等)的处理器103。非暂时性存储设备105存 储可由处理器103执行的前端处理代码107。代码107给予处理器103本文所描述的归因 于前端处理子系统102的功能性中的一些或全部。
[0010] 每一个后端存储节点104可以包括访问存储设备110 (例如,硬盘驱动器)的块管 理器108。块管理器108可以实现为执行代码的硬件处理器。在一些实现中,每一个块管理 器108包括"瘦"数据库,其独立于与其他块管理器相关的瘦数据库来执行(S卩,不是分布式 数据库)。瘦数据库的示例是仅能够创建、复制、更新和删除记录的数据库。图1B的硬件实 现还可以被用来在一些实施例中实现块管理器108 (其中代码107被数据库代码替换)。
[0011] 通常,前端处理子系统102从各个物理机器92和/或虚拟机器94接收块访问请 求,并且处理该请求以便对各个后端存储节点104完成。
[0012] 因为在一些实现中块管理器108包括瘦数据库,所以前端处理子系统102可以执 行在如果使用更复杂的数据库时原本将会由后端节点105所执行的功能性中的至少一些。 此外,存储系统1〇〇能够实现数据去重、惰性复制、以及其他数据存储功能。对于能够实现 这些功能性的存储系统100,前端处理子系统102实现以下所述的各种动作。
[0013] 为了执行以下所述功能中的一个或多个,前端处理子系统102维持并使用块引用 数据结构106。块引用数据结构106提供关于单独数据块以及这些数据块中的每一个存储 在哪一个存储节点上的信息。块引用数据结构106使存储系统能够提供负载平衡性、冗余 性和可扩展性。块引用数据结构106的示例在图2中示出。在图的示例中,块引用数据结 构106包括多个表格120和122。表格120被称作主块引用表格。表格122被称作从块引 用表格。表格124被称作块存储表格并且存储在相应的存储节点中。在表格120-124中所 提供的信息可以在其他实施例中以不同于表格的形式来提供。
[0014] 主引用表格120包括多个条目,其中每一个条目包括客户端标识符(ID)130、快照 ID 132、块索引值134、元数据136、以及包含块ID或间接ID的字段138。客户端ID 130是 虚拟机器94或物理机器96的唯一标识符,其对主引用表格120中的对应条目所引用的数 据块进行控制。快照是在特定时间点存储卷的状态。快照ID 132是所引用的数据块所属的 机器内的快照的唯一标识符。块索引134是用于虚拟机器内的特定快照的所引用块的唯一 标识符。元数据136包括与数据块相关的信息。元数据136的示例包括这样的信息项目: 处理ID、块修改处的用户证书和时间戳、以及复制状态。
[0015] 字段138包括块ID或间接ID。块ID是对实际后端存储节点104并对所引用的数 据块实际存储所在的那个存储节点内的物理位置的引用。如果所引用的数据块是存储系统 100中的数据的多个副本中的一个,那么在字段138中使用间接ID而不是块ID。间接ID 包括指向从引用表格122中的条目的指针。
[0016] 从引用表格122被用来保持追踪数据块的各个副本。间接ID 140包含与主引用 表格120中的间接ID 138中的至少一个相同的值。链接计数器142包括字段144中的相 关块ID的数量的计数值。链接计数器142因而指示相同数据块的附加副本的数量。根据 一些示例,在每一次产生卷的快照时,该卷中的每一块的相关链接计数器就递增。如果快照 图像被删除,则对应的链接计数器就递减。如果块是唯一的,则链接计数器可以设置为值1。 字段144中的块ID包括对后端存储节点104上的数据块以及在每一个节点内数据块所实 际驻留于的位置的引用。
[0017] 块存储表格124包括字段150和152。字段150包含块ID,并且字段152包含对 应于相关块ID的实际数据。
[0018] 图3针对由存储系统100执行的用于读取事务的方法150。方法150的各种动作 可以按照图示顺序或者以不同顺序来执行。此外,动作中的两个或更多个可以并行执行。方 法150的动作可以由存储系统100的前端处理子系统102来执行。
[0019] 在152处,方法包括接收针对数据块的读取请求。由前端处理子系统102从物理 机器92或虚拟机器94中的一个或多个来接收读取请求。
[0020] 在154处,方法包括访问块引用数据结构106,并且从该数据结构确定所请求的数 据块的(一个或多个)位置。例如,方法可以包括从主引用表格120检索块ID或间接ID。 如果ID是间接ID,则方法可以包括从从引用表格122获取(一个或多个)对应块ID。所请 求的数据块可能以多个副本的形式存在于各个后端存储节点104上。访问块引用数据结构 106以确定存在的目标数据块的副本数量以及它们在存储节点104上的位置。例如,主引用 块引用表格120可以包括如上所指出的块ID或间接ID。如果存在块ID,则可以从该特定 块ID所引用的后端存储节点来读取目标数据。前端处理子系统102在156处向该特定存 储节点发出读取请求。
[0021] 在另一方面,如果存在间接ID,则前端存储子系统102使用间接ID查阅从块引用 表格122并且读取链接计数器142。链接计数器指示目标数据块的副本数量。对应数据块 的块ID 144也从从块引用表格122来读取。读取请求是由前端处理子系统102向包含最 初读取请求的目标数据块的副本的各个后端存储节点104发出(156)的。给定的后端存储 节点104有多快地以所请求的数据来响应前端处理子系统102可能在存储节点间不同。
[0022] 前端处理子系统102从如上所解释那样接收了读取请求的存储节点104接收所请 求的数据。如果前端存储子系统102仅向单个后端存储节点104发出读取请求,那么只要 目标数据被提供回到前端处理子系统102,前端处理子系统102就将该数据返回到最先创 始读取请求的物理或虚拟机器。如果多个后端存储节点104被发出了如上所述的请求,那 么前端处理子系统102从首先以所请求的数据响应前端存储子系统102的那个后端存储节 点104来将数据返回到物理机器92或虚拟机器94。
[0023] 图4同样针对读取事务。在图4中,方法107针对这样的情形:其中多个物理机器 92或虚拟机器84试图在大概相同的时间读取相同的数据块。前端处理子系统102对多个物 理或虚拟机器试图读取相同的数据块进行识别(例如,通过标识针对相同的块或间接ID的 并发请求),并且前端处理子系统102向包含请求数据的副本的每一个后端存储节点104发 出单个读取请求,而不是对于每一个到来的读取请求向后端存储节点发出多个读取请求。
[0024] 方法107的各种动作可以按照图示顺序或者以不同顺序来执行。此外,动作中的 两个或更多个可以并行执行。方法170的动作可以由存储系统100的前端处理子系统102 来执行。
[0025] 在172处,方法170包括从多个请求系统(例如,物理机器92、虚拟机器94)中的每 一个接收针对数据块的读取请求。由前端处理子系统102从多个物理机器92或虚拟机器 94来接收读取请求。
[0026] 在174处,前端处理子系统102确定多个并发的读取请求的目标是相同的数据块。 在176处,前端处理子系统102向包含目标数据块的每一个后端存储节点104发出单个读 取请求。前端处理子系统102根据块引用数据结构106来确定哪些节点包含目标数据块。
[0027] 在178处,方法还包括前端处理子系统102从后端存储节点中的一个或多个接收 所请求的数据,并且在180处将首先(或仅)接收到的目标数据块转发到最先创始读取请求 的物理机器92或虚拟机器94。
[0028] 图5提供针对写入事务的方法190。方法190的各种动作可以按照图示顺序或者 以不同顺序来执行。此外,动作中的两个或更多个可以并行执行。方法190的动作可以由 存储系统100的前端处理子系统102来执行。
[0029] 在192处,方法包括前端处理子系统102从物理机器92或虚拟机器94接收写入 请求。在194处,基于块引用数据结构,前端处理子系统102确定目标数据块是否存在于多 个后端存储节点104上。如果多个后端存储节点104包含写入事务的目标数据块,则前端 处理子系统102确定目标数据块的多个副本中的哪一个是"主"数据块。在一些实现中,写 入事务仅对主数据块完成,并且不对其他副本(即,从数据块)完成。元数据136可以包括充 足的信息,从其中可以明确被确定为主数据块的块。
[0030] 在196处,前端处理子系统102然后对包含被确定为主数据块的数据块的后端存 储节点104完成写入事务。在198处,前端存储子系统102将被确定为主数据块的数据块 复制到其他存储节点104上的数据块的所有其他副本。这种块复制过程可以在后台并且以 相比于对主数据块的最初写入更慢的节奏来执行。就此而言,从主数据块到从数据块的复 制可以被称为"惰性复制"并且为存储系统100提供了冗余容量。
[0031] 图6提供针对写入事务的方法200,该写入事务是针对只读块的。数据块可以被指 定为只读的,这是因为例如数据块可以由多个物理机器92或虚拟机器94共享。数据块的 多个副本存在于存储节点104上,并且所有都被指定为只读的。如果数据块是共享的,则共 享的物理/虚拟机器中没有一个可以被允许对它们的数据块副本执行写入事务,以避免数 据一致性问题。为了对只读的共享数据块执行写入事务,数据块首先被复制并且停止共享。
[0032] 方法200的各种动作可以按照图示顺序或者以不同顺序来执行。此外,动作中的 两个或更多个可以并行执行。方法200的动作可以由存储系统100的前端处理子系统102 来执行。
[0033] 在202处,方法包括前端处理子系统102接收针对存在于第一后端存储节点104 上的只读数据块的写入请求。在204处,前端处理子系统102确定目标块是否为"写时复 制"(copy-on-write)块,其意指在对块执行写入事务时应当复制的块。在链接计数器大于 1的情形中,所有共享的块可以被指定为写时复制的。
[0034] 在206处,如果第一后端存储节点104上的目标数据块是C0W数据块,则前端处理 子系统102在第一后端存储节点104上分配新数据块。最新分配的数据块被指定为可读且 可写的("RW")。在208处,前端处理子系统102将与接收到的写入事务包括在一起数据写 入到最新分配的RW数据块。
[0035] 在212处,前端处理子系统102还分配存在于第二后端存储节点104上的数据块 的RW副本,并且然后开始将最新分配的块的内容从第一存储节点复制到第二存储节点上 的最新分配的块。复制可以在208处的数据的最初写入已经完成之后发生或继续发生。
[0036] 本文所述的存储系统100是可扩展的,这是因为具有例如瘦数据库的附加存储节 点104可以被容易地添加,并且前端处理子系统102通过其块引用数据结构106保持追踪 各个存储节点104。因而,存储系统100可以容易地用在云环境中。块引用数据结构106使 得能够在大存储容量上快速进行索引。各种后端存储节点104表示在多个物理节点上的分 布式存储,其在标准数据库环境中并不是可容易实现的。此外,存储系统1〇〇使得被删除的 存储空间能够有效地回收利用。
[0037] 上述讨论意为说明本发明的原理和各种实施例。一旦完全理解上述公开,许多变 型和修改就将对本领域技术人员变得显而易见。所附权利要求旨在被解释为包含所有这样 的变型和修改。
【权利要求】
1. 一种存储系统,包括: 前端处理子系统,其用来接收块级存储请求;以及 多个后端存储节点,其耦合到所述前端子系统,每一个所述后端存储节点包括存储设 备和用来在所述存储设备上创建、读取、更新和删除数据块的独立的块管理器; 其中所述前端处理子系统用来维持块引用数据结构,所述块引用数据结构可被所述前 端处理子系统使用以访问所述后端数据存储节点,以便为所述存储系统提供平衡性、冗余 性和可扩展性。
2. 根据权利要求2所述的存储系统,其中所述块引用数据结构包括主块引用表格,其 包括用于多个后端存储子系统上所存储的每一个数据块的引用。
3. 根据权利要求2所述的存储系统,其中每一个引用包括客户端标识符、快照标识符 和块索引。
4. 根据权利要求2所述的存储系统,其中对于多个实例中的驻留于所述存储设备上的 数据块,所述主块引用表格包括到从块引用表格的间接标识符。
5. 根据权利要求4所述的存储系统,其中所述从块引用表格包括间接标识符、链接计 数器、以及一个或多个块标识符。
6. 根据权利要求5所述的存储系统,其中所述链接计数器包括指示所述存储设备上的 数据块的副本的实例的数量的计数值。
7. 根据权利要求6所述的存储系统,其中所述一个或多个块标识符包括用于所述数据 块的实例中的每一个的块标识符。
8. 根据权利要求1所述的存储系统,其中所述前端处理子系统接收针对数据块的读取 请求,根据块引用表格确定所请求的块是否作为多个副本存储在后端存储子系统上,并且 向根据所述块引用数据结构确定存储有所请求的数据的副本的每一个后端存储节点发出 请求。
9. 根据权利要求1所述的存储系统,其中所述前端处理子系统从多个请求系统中的每 一个接收针对数据块的读取请求,确定所述读取请求的目标是相同的数据块,并且向根据 所述块引用数据结构所确定的包含目标块的每一个后端存储节点发出单个读取请求。
10. 根据权利要求1所述的存储系统,其中多个后端存储子系统中的每一个存储数据 块的副本,并且所述前端处理子系统接收针对所述数据块的写入请求,写入到所述副本中 的一个副本,并且导致所述一个副本的内容被复制到所述数据块的所有其他副本。
11. 根据权利要求1所述的存储系统,其中多个后端存储子系统中的每一个存储只读 的写时复制(R〇 COW)数据块的副本,并且所述前端处理子系统接收目标是RO COW数据块 的写入请求,并且作为接收所述写入请求的响应,所述前端存储子系统在所述多个后端存 储子系统中的每一个上分配新数据块,写入到最新分配的数据块中的一个,并且导致被写 入的数据块复制到所有其他最新分配的数据块。
12. -种存储系统,包括: 前端处理子系统,其用来接收块级存储请求;以及 多个后端存储节点,其耦合到所述前端子系统,每一个后端存储子系统包括存储设备 和用来在所述存储节点上创建、读取、更新和删除数据块的独立的块管理器; 其中所述前端处理子系统用来访问块引用数据结构以访问后端数据存储系统,以便确 定访问哪些后端存储节点来完成接收到的块级存储请求。
13. 根据权利要求12所述的存储系统,其中所述块引用数据结构包括主块引用表格和 从块引用表格,所述主块引用表格包括用于多个后端存储子系统上所存储的每一个数据块 的引用,对于多个实例中的驻留于存储子系统上的数据块,所述主块引用表格包括到所述 从块引用表格的间接标识符。
14. 一种方法,包括: 接收针对只读数据块的写入块访问请求; 确定所述数据块是否要在写入所述数据块时被复制; 在第一后端存储节点上分配第一新数据块; 将数据写入到第一新分配的数据块; 在另一个后端存储节点上分配第二新数据块;以及 将第一新分配的数据块的内容从所述第一后端存储节点复制到所述另一个后端存储 节点上的第二新分配的数据块。
15. 根据权利要求14所述的方法,其中将第一新分配的数据块的内容从所述第一后端 存储节点复制到所述另一个后端存储节点上的第二新分配的数据块能够在写入到第一新 分配的数据块已经完成之后发生或继续发生。
【文档编号】G06F12/02GK104067240SQ201280068694
【公开日】2014年9月24日 申请日期:2012年4月30日 优先权日:2012年4月30日
【发明者】C-H.苏, M.基尔希伯格, B.S.李 申请人:惠普发展公司,有限责任合伙企业
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1