用于异步存储服务的自组织存储系统的制作方法

文档序号:16852474发布日期:2019-02-12 22:51阅读:238来源:国知局
用于异步存储服务的自组织存储系统的制作方法

本公开一般地涉及数据存储领域,并且更特别地涉及异步存储接口。

云服务提供商向云服务消费者提供云服务。一个类型的云服务是云存储服务。虽然云存储服务是指提供云存储的服务,但是存储网络工业协会(snia)正式将云存储定义为数据存储即服务(“dsaas”)的同义词。snia将dsaas定义为通过网络对虚拟存储和相关服务的递送。根据通常表达被请求的服务级别的云消费者请求来配置虚拟存储和相关服务。云消费者设备根据驻留在通信协议之上或利用通信协议的定义接口与dsaas交互。snia已将云数据管理接口(cdmi)定义为针对控制和数据路径二者的接口。云消费者设备还可以根据基于客户端-服务器模型的接口消费云存储服务,所述接口诸如是基于表述性状态转移的接口(“restful接口”)。

附图说明

可以通过参考附图更好地理解本公开的各方面。

图1是云存储服务的自组织存储系统的概念图。

图2描绘了图1中描绘的自组织存储系统的后端的概念图,所述后端创建用于由进行选择的后端节点实现的所选请求的列表。

图3描绘了用于处理云服务消费者存储请求的流程图。

图4描绘了云存储服务的后端节点从云存储服务的前端检索存储服务请求的操作的流程图。

图5描绘了用于选择要由后端存储节点实现的写入请求的示例操作。

图6描绘了用于选择要由后端存储节点实现的删除请求的示例操作。

图7描绘了前端服务器处理由存储服务后端节点生成的节点请求列表的示例操作的流程图。

图8描绘了前端服务器处理由后端节点生成的实现消息的示例操作的流程图。

图9描绘了具有自组织存储介质设备控制器的示例云存储服务后端存储节点。

具体实施方式

以下描述包括体现本公开的各方面的示例系统、方法、技术和程序流程。然而,应理解,可以在没有这些具体细节的情况下实践本公开。在其他实例中,没有详细地示出公知的指令实例、协议、结构和技术,以便不使描述模糊。

介绍

形式上,“云服务消费者”是指使用或消费云服务的个人或组织。然而,在设备上执行的软件便于个人或组织消费或使用云存储服务。该设备可以被描述为使用云存储服务和/或与云存储服务的组件交互。因此,该描述将涉及云服务消费者设备。

云服务消费者设备根据用于云存储服务的定义接口向云存储服务传送请求。该接口定义了云服务消费者设备和云存储服务之间的请求-响应类型的交换。面向云存储服务侧的客户端(即,前端)通过维持(一个或多个)映射来定位要读取或删除的数据来对请求进行服务。前端还确定数据将被存储在哪里。通常,前端维持状态数据以确保响应被在如由接口定义的适当时间内提供到云服务消费者设备。然而,云存储服务的重要用途是将数据归档。“将数据数字地归档”涉及长保留期(例如,数十年)和对应的访问模式(即,不频繁地访问并接受高的访问等待时间)。由于访问模式要求较低,云存储提供商将使用成本较低的存储系统组件用于数字地归档的数据,并且云存储消费者接受可能花费比数秒显著更多的时间(例如,数天)的响应。

综述

可以利用有成本效益的组件创建云存储服务以用于大规模归档数据存储,并且所述云存储服务可以高效地使用这些组件。云存储服务的前端向云存储服务的消费设备呈现异步存储接口。提供异步存储服务接口避免了伴随时间受限接口(例如,具有以秒为单位的超时的基于请求-响应的接口)的状态数据开销中的至少一些。前端服务器按如下请求类型来组织从云服务消费者设备接收的请求:读取、写入和删除。云存储服务的后端节点周期性地从前端服务器检索请求,以选择后端节点可以实现的请求。每个后端节点基于后端节点的后端特性信息(可能是动态特性)来选择请求。因此,构成云存储服务的基础的存储系统可以被认为是自组织存储系统。

示例图示

图1是云存储服务的自组织存储系统的概念图。云存储服务在逻辑上被划分成存储服务前端103和存储服务后端105。存储服务前端103的组件包括向云存储服务消费者(“消费者”)101呈现存储服务接口的软件和硬件。前端组件接受来自消费者101的符合接口的请求(例如,请求的结构和请求的参数),并在请求已被实现时向消费者提供响应。存储服务前端103诸如通过临时存储来维持请求,但是不实现请求。存储服务后端105从存储服务前端103检索请求,并根据包括本地维持的存储索引的本地信息来实现请求。

构成云存储服务的基础的存储系统常常是大型的。例如,云存储服务可以包括跨许多地理位置的数千个存储服务器和存储介质设备。为了避免因试图反映比例而使图复杂化,图1仅图示了具有两个存储服务器107、123的存储服务前端103。图1图示了具有三个“后端存储节点”161、163、165的存储服务后端105。术语“后端存储节点”或“存储节点”在本文中用于共同地指代一组存储介质设备(例如,磁带驱动器、固态设备/闪存驱动器、磁盘驱动器等)和管理存储介质设备的网络连接设备。

在所描绘的阶段之前,存储服务前端103已经接收了各种存储服务请求。图1在服务器107、123中的每个处描绘了按请求类型的列表。每个列表的内容表示已经从消费者101接收的请求。服务器107维持指示四个接收到的读取请求的读取列表111。这些读取请求被表示为ra、rb、rg和rh。对于此图示,记法方案使用第一个字符来指示请求的类型,并且使用第二个字符来指示请求的对象。例如,ra表示针对对象“a”的读取请求。字符“w”用于指示写入请求,并且字符“d”用于指示删除请求。服务器107维持删除列表113,其指示请求dm。服务器107还维持写入列表115,其指示写入请求wk、wt和ws。写入请求wk引用被标识为对象“k”的数据对象117。写入请求wt和ws分别引用数据对象119和数据对象121。数据对象119被标识为对象“t”,并且数据对象121被标识为对象“s”。

在阶段a1-a3,节点161读取列表111、113、115中的每个以选择要实现的请求。节点161包括存储介质设备控制器137和闪速存储(flashstorage)的两个存储体(bank)171、173。存储介质设备控制器137维持本地存储索引135,其指示存储在存储体171、173中的对象的位置信息。存储介质设备控制器137使用本地存储索引135来访问闪速存储存储体171、173。在阶段a1,存储介质设备控制器137从服务器107检索读取列表111。存储介质设备控制器137基于本地存储索引135确定节点161可以实现读取列表111中的哪些读取请求。本地存储索引135指示对象c和g被存储在闪速存储存储体171、173中。作为响应,存储介质设备控制器137选择实现rg。在阶段a2,存储介质设备控制器137从服务器107检索删除列表113。存储介质设备控制器137基于本地存储索引135确定节点161可以实现删除列表113中的哪些删除请求。由于对象m未被存储在闪速存储存储体171、173中,存储介质设备控制器137不能实现删除请求。在阶段a3,存储介质设备控制器137从服务器107检索写入列表115。存储介质设备控制器137基于关于节点161和写入请求的信息来选择要实现的写入请求。存储介质设备控制器137可以基于要写入的对象的大小、要写入的对象的类型、以及针对对象的另外的相关服务请求(例如,加密、压缩等)来选择写入请求。存储介质设备控制器137还可以基于闪速存储存储体171、173中的可用空间、闪速存储存储体171、173中的每个的电源状态、存储介质设备控制器137先前选择的写入请求、用于闪速存储存储体171、173的存储i/o的可用性和/或闪速存储存储体的其他属性/状态等来选择写入请求。

在阶段b1-b3,节点163还读取列表111、113、115中的每个以选择要实现的请求。节点163包括存储介质设备控制器141和磁带库(tapelibrary)181。存储介质设备控制器137维持本地存储索引143,其指示被存储在磁带库181中的对象的位置信息。该索引143可以被使用比如线性磁带文件系统(ltfs)的格式存储在磁带库181中的磁带上,或者可以被单独存储在作为存储介质设备控制器137的一部分的另一存储设备上。存储介质设备控制器141使用本地存储索引143来访问磁带库181。存储介质设备控制器141分别在阶段b1和b2从服务器107检索读取列表111和删除请求列表113。存储介质设备控制器141基于本地存储索引143确定节点163可以实现读取列表111中的哪些读取请求和删除列表113中的哪些删除请求。本地存储索引143指示对象a和b被存储在磁带库181中。因此,存储介质设备控制器141选择实现ra和rb。由于对象m未被存储在磁带库181中,存储介质设备控制器141不能实现dm。在阶段b3,存储介质设备控制器141从服务器107检索写入列表115。存储介质设备控制器141基于关于节点163以及写入请求的信息来选择要实现的写入请求。存储介质设备控制器141可以基于要写入的对象的大小、要写入的对象的类型、以及针对对象的另外的相关服务请求(例如,加密、压缩等)来选择写入请求。存储介质设备控制器141还可以基于磁带库181中的可用空间、磁带库181的机械臂的当前状态、另外的磁带盒的可用性、磁带盒磨损、预计的磁带盒寿命和更换时间表、存储介质设备控制器141先前选择的写入请求、和/或磁带盒和库的其他属性/状态等来选择写入请求。

尽管后端节点可以从存储服务前端103的同一服务器同时检索多个请求,但是后端节点可能在不同的或重叠的时间与前端服务器中的每个交互。在该示例图示中,节点165从服务器123检索请求并且稍后将从服务器107检索请求。在阶段c1-c3之前,服务器123已经基于来自消费者101的请求填充了请求列表。服务器123维持读取列表125,其指示三个接收的读取请求。这些读取请求是rh、rc和rr。服务器123维持删除列表127,其在所图示的时间为空。服务器123还维持写入列表129,其指示写入请求wl和wp。写入请求wl引用被标识为对象“l”的数据对象131。写入请求wp引用被标识为对象“p”的数据对象133。

在阶段c1-c3,节点165读取列表125、127、129中的每个以选择要实现的请求。节点165包括存储介质设备控制器147和存储磁盘阵列183。存储介质设备控制器147维持本地存储索引149,其指示被存储在存储磁盘阵列183中的对象的位置信息。存储介质设备控制器147使用本地存储索引135来访问存储磁盘阵列183。在阶段c1,存储介质设备控制器147从服务器123检索读取列表125。存储介质设备控制器147基于本地存储索引149确定节点163可以实现读取列表125中的哪些读取请求。本地存储索引149指示对象m、h和r被存储在存储磁盘阵列183中。基于该信息,存储介质设备控制器147选择实现rh和rr。在阶段c2,存储介质设备控制器147从服务器123检索删除列表127,并确定删除列表为空。在阶段c3,存储介质设备控制器147从服务器123检索写入列表129。存储介质设备控制器147基于关于节点165以及写入请求的信息来选择要实现的写入请求。如已经提及的,存储介质设备控制器147可以基于要写入的对象的大小、要写入的对象的类型、以及针对对象的另外的相关服务请求(例如,加密、压缩等)来选择写入请求。存储介质设备控制器147还可以基于存储磁盘阵列183中的可用空间、存储磁盘阵列183的健康状况相关信息(例如,写入失败的数目、磁盘驱动器的年龄、检测到的错误的数目等)、存储介质设备控制器147先前选择的写入请求、和/或存储磁盘阵列183的其他属性/状态等来选择写入请求。

图2描绘了图1中描绘的自组织存储系统的后端的概念图,所述后端创建用于由选择后端节点实现的所选请求的列表。图2提供了图1中所描绘的对请求的检索的示例详细描述。在图2中,后端节点从前端103检索列表,创建用于实现的所选请求的列表,并向前端103完成请求。利用不同的标签标识检索到的请求列表,以表达检索到的版本可能与驻留在前端103中的列表不同。例如,前端103中的写入请求列表包括指向要写入的对象的指针。后端节点最初检索了没有指针且没有对象的的写入列表。

在阶段d1-d2,存储介质设备控制器137创建并返回被选择用于由后端节点实现的请求的列表。存储介质设备控制器137已检索并在本地存储读取列表211、删除列表213和写入列表215。在阶段d1,存储介质设备控制器137从检索到的列表211、213、215选择请求以创建节点特定的请求列表217。控制器137基于本地存储索引135选择要实现的读取和删除请求,并基于节点信息219选择要实现的写入请求。节点信息219表示后端节点的如先前在描述图1时提及的可影响对写入请求的选择的各种属性信息和状态信息。在阶段d2,控制器137执行节点特定的请求列表217中的请求,将操作的结果返回到服务器107。这些请求可以被以任何次序执行,并且通常被以对于存储介质设备控制器137而言最佳的次序执行。作为执行所述请求的一部分,服务器107可以创建节点特定的列表217的具有指向相关对象的指针的版本201,并从请求列表111、113和115中移除所述请求。这防止其他存储介质设备控制器141和147也试图执行所述请求。在该情况下,相关对象是用于所选写入请求wk和wt的对象117、119。

存储介质设备控制器141利用从服务器107检索到的请求列表执行类似的过程。存储介质设备控制器141已检索并在本地存储读取列表221、删除列表223和写入列表225。读取列表221、删除列表223和写入列表225的内容与该图示中的存储介质设备控制器137处的相应请求列表211、213和215相同。然而,请求可以在被控制器137检索之后且在被控制器141检索之前到达存储服务器107。新请求的到达可以改变服务器107维持的列表的内容以及不同的后端节点检索到的请求中的差异。在阶段e1,存储介质设备控制器141创建节点特定的请求列表227。控制器141基于本地存储索引143选择要实现的读取和删除请求,并基于节点信息229选择要实现的写入请求。在图2中,控制器141选择了ra和rb。在阶段e2,控制器141执行节点特定的请求列表227中的所选请求,将操作的结果返回到服务器107。服务器107可以创建节点特定的列表227的版本205。

存储介质设备控制器147利用从服务器123检索到的请求列表执行类似的过程。存储介质设备控制器147已检索并在本地存储读取列表231和写入列表233。在阶段f1,存储介质设备控制器147创建节点特定的请求列表235。控制器147基于本地存储索引149选择要实现的读取请求,并基于节点信息237选择要实现的写入请求。在图2中,控制器147已选择实现rh、rr和wl。在阶段f2,控制器147执行节点特定的请求列表235中的所选请求,将操作的结果返回到服务器123。服务器123可以基于节点特定的列表235创建节点特定的请求列表207。节点特定的请求列表207包括指向用于写入请求wl的对象131的指针。

图1和2的注释(a1-a3、d1-d2等)各自表示一个或多个操作的阶段。尽管这些阶段是被命令用于这些示例,但是所述阶段并未捕获每个示例,并且应当用于帮助理解本公开,并且不应当用于限制权利要求。落入权利要求范围内的主题可以关于操作的次序和操作中的一些而变化。

图1-2图示了用于构成云存储服务的基础的存储系统的存储节点的不同类型的存储介质。描绘了不同类型的介质以说明云存储服务的自组织后端节点不被介质类型限制,但是该变化不是必需的。然而,云存储服务提供商可以使用自组织存储系统来允许后端节点根据介质特定的节点信息跨存储系统高效地组织数据。

图3-8描绘了针对云存储服务的自组织存储系统的流程图。图3和7-8描绘了云存储服务前端的服务器处理来自云存储服务消费者的服务请求和来自云存储服务后端的通信的流程图。图3和7-8涉及执行所描绘的操作的服务器。图4-6描绘了后端节点从云存储服务前端检索消费者存储服务请求的流程图。图4-6涉及执行示例操作的后端存储节点。

图1-2和以下图3-8涉及“列表”。为了效率而使用该术语,该术语并非旨在将本公开限制到使用特定类型的数据结构。这些列表的内容可以被以多种结构维持或指示,并且不需要相同。可以使用的结构的示例包括文件、队列、存储桶、散列表、数组和数据库。

图3描绘了用于处理云服务消费者存储请求的流程图。对于这些示例流程图,服务器按请求类型维持接收的请求列表。这些示例涉及写入、读取和删除请求类型。本公开的各方面可以为请求类型使用不同的分类法(例如,读取、创建、更新和删除)。

在框301处,服务器接收针对对象的请求。云存储服务消费者设备可以根据cdmi或其他存储协议传送服务请求。例如,云存储服务消费者设备可以向服务器传送get、put或delete消息。get或delete消息可以分别包括要检索或删除的对象的标识符。put消息可以包括要写入的数据对象和该对象的标识符。

在框303处,服务器确定所接收的请求的类型。请求类型的确定用于更新适当的请求列表。服务器可以基于服务请求的指定操作或元数据来确定请求类型。在一些情况下,服务器可以使用服务请求的多个方面(例如,指定操作和元数据)来确定请求类型。尽管服务器可以维持从服务请求中的指定操作到请求类型的映射,但是这不是必需的。例如,服务器可以维持从“get”到读取的映射,或者如果消息在服务请求的特定字段中包括“get”,则服务器可以被编程成选择读取列表以用于更新。如果请求是读取类型的请求,则控制流到框305。如果请求是删除类型的请求,则控制流到框307。如果请求是写入类型的请求,则控制流到框309。

在框305处,服务器更新读取列表以指示读取对象的请求。服务器可以向读取列表添加包括该请求和接收时间戳的条目。该请求本身标识要读取的对象和请求者。服务器还可以从该请求提取选择信息,并用提取的信息更新读取列表中的条目。例如,服务器可以从该请求提取(即,读取)请求者标识符、对象标识符和被请求操作标识符,并插入或添加具有提取的信息的读取列表条目。

在框307处,服务器更新删除列表以指示删除对象的请求。服务器可以向删除列表添加包括该请求和接收时间戳的条目。定时信息最终可以由后端节点用于顺序地命令请求的实现。该请求标识要删除的对象和请求者。与读取列表的更新类似,服务器可以从该请求提取选择信息,并用提取的信息更新删除列表中的条目。例如,服务器可以从该请求提取请求者标识符、对象标识符和被请求操作标识符,并插入或添加具有提取的信息的删除列表条目。

对于写入请求,服务器在本地存储要写入的对象并更新写入列表。在框309处,服务器将要写入的对象存储到服务器的非易失性存储器/贮存器中。在框311处,服务器更新写入列表以指示写入该对象的请求并指示对该对象的引用。如果写入请求包括该对象,则服务器可以将该对象与写入列表分开存储。服务器可以如已经针对读取列表和删除列表的更新所描述的那样用条目更新写入列表。该对象可以被存储,被本地存储在易失性或非易失性存储器中。服务器如何存储请求列表和/或要写入的对象可取决于云存储服务的服务保证。

接收到的请求是按时间排序的,并且最终是一致的。时间排序可以基于在请求内指示的创建时间或在进行接收的服务器处的接收时间。如果使用了接收时间,则服务器可以将时间戳写入到针对对应请求的条目中。服务器可以根据时间信息对请求列表进行排序和/或后端节点可以根据时间信息对请求进行服务。

一旦请求被添加到对应列表,服务器就对云存储服务消费者设备进行响应以指示对该请求的服务正在进行中。在框313处,服务器向请求者传送该请求在进行中的响应。例如,服务器根据cdmi或另一存储协议发送协议响应。服务器可以用cdmi“创建的延迟完成”响应或具有“202已接受”的状态的http消息对云存储服务消费者设备进行响应。另外,可以提供标识符或url以允许客户端检查请求进度的状态。

图4描绘了由云存储服务的后端节点执行以从云存储服务的前端检索存储服务请求的操作的流程图。如先前提及的,云存储服务前端的服务器不会试图实现或分配所接收的服务请求。云存储服务的后端节点从前端拉取请求列表,并选择特定后端节点可以实现的那些。

在框401处,节点标识云存储服务前端的服务器。用于云存储服务的拓扑服务被配置构成存储服务前端的服务器的标识符(例如,网络地址)。然后,拓扑服务会周期性地发现服务器选区中的改变。服务器可以被从用于维持的服务中移除,失效,被添加等。拓扑可以将服务器选区信息推送到后端节点,或者后端节点可以拉取该信息。拓扑服务节点可以在拓扑服务开始时和/或以比后端节点从拓扑服务请求或拉取组成(constituent)服务器的初始列表的间隔长的间隔推送该信息。

在框403处,节点开始遍历形成云存储服务前端的服务器的列表。由于云存储服务消费者设备可以向前端服务器中的多个不同的前端服务器提交服务请求,后端节点从组成服务器检索所述请求以得到服务请求的全局视图。后端节点可以被配置成和某些前端服务器有亲和力,以解决期望的或观察到的请求模式。后端节点可以按特定属性对检索进行优先级排序。例如,后端节点可以按前端服务器到后端节点的地理接近度和/或按接收最高数目的请求的前端服务器对自前端服务器的检索进行优先级排序。

在框405处,节点初始化节点请求列表。节点使用节点请求列表来指示节点选择实现的请求。节点为它从中检索请求的每个服务器初始化节点请求列表。这假设节点将在从下一个前端服务器检索请求之前实现它选择的请求。然而,本公开的各方面可以允许后端节点在实现已经检索到的请求时从前端服务器检索请求,和/或允许后端节点在开始实现请求之前从多个前端服务器检索请求。对于这些情况,节点可以为每个前端服务器维持不同的请求列表,或者维持其中每个条目也指示对应的前端服务器的请求列表。

在框407处,节点从服务器检索读取请求列表。例如,节点可以使用基于http的请求来请求该请求列表。前端服务器可以为请求列表使用一致的命名方案,并且可以使用可以找到请求列表的一致路径。替代地,可以通过拓扑服务发现这一点。前端服务器还可以维持在请求列表的身份与后端标识所述列表使用的值之间的映射。例如,后端节点可以向前端服务器请求“listl”。可以将前端服务器编程成在其接收到针对“listl”的请求时读取文件“readlist”。作为另一示例,后端节点可以向前端服务器请求“w1”。可以将前端服务器编程成通过索引w1创建数据库请求,以从前端服务器维持的请求的数据库检索写入请求,并将结果返回到进行请求的后端节点。节点向本地存储器或本地贮存器中检索读取列表。

在框409处,节点开始遍历读取请求列表。这可能发生在仍然获得读取请求列表的剩余部分时。节点针对每个指示的请求读取要读取的对象的对象标识符。

在框411处,节点确定被请求的对象是否在存储节点中。节点访问本地存储索引,所述本地存储索引指示被存储在节点的存储介质设备中的对象。如果在本地存储索引中指示所述对象,则控制流到框413。否则,控制流到框415。

在框413处,节点更新节点请求列表以指示读取请求。节点可以更新节点请求列表以指示与由前端服务器维持的请求标识符一致的请求标识符。节点可以用进行请求的设备的标识符、对象标识符和所述请求的时间戳来更新节点请求列表。

在框415处,节点确定在检索到的读取列表中是否存在另外的读取请求。如果在检索到的读取列表中存在另外的读取请求,则控制返回到框409。如果在检索到的读取列表中不存在另外的读取请求,则控制流到框417。

在框417处,节点确定其是否可以执行写入。节点本质上确定是否存在可用于容纳写入的存储空间。在某些情况下,节点可能不再具有用于写入的容量。本公开的各方面可以跳过该操作并继续评估各个写入请求。如果节点可以执行写入,则控制流到图5的框501。如果节点不能执行写入,则控制流到图6的框601。在一些实施例中,可以同时处理读取、写入和删除列表。

图5描绘了图4的流程图的继续。图5描绘了用于选择要由节点实现的写入请求的示例操作。图5的示例操作类似于用于从检索到的读取请求列表选择读取请求的那些操作。

在框501处,节点从服务器检索写入请求列表。与读取请求列表示例一样,节点可以使用基于http的请求来请求该请求列表。类似于读取请求列表,云存储服务提供商将会将组成软件/硬件配置/编程成以跨前端并暴露给后端的一致方式来组织和/或标识所述列表。节点向本地存储器或本地贮存器中检索写入列表。

在框503处,节点开始遍历写入请求列表。节点读取每个写入请求或对写入请求的指示,以得到在确定是否要实现写入请求时使用的信息。如早期陈述的,节点可以使用要写入的对象的大小、对象类型、用于写入对象的相关服务、用于写入对象的服务相关条件等。

在框505处,节点确定是否要选择用于实现的写入请求。节点可以评估节点的当前状态、要实现的当前未决的写入请求、存储介质的健康状况信息等。还可以将节点编程/配置成基于驻留在节点上的对象来选择写入请求。例如,节点可以基于要写入的对象来选择写入请求,所述对象与阈值数目的驻留对象共享相同的命名空间。写入请求的元数据可以指示允许节点确定该命名空间的路径。可以将节点编程/配置成基于多种标准来选择写入请求。如果节点选择用于由节点实现的写入请求,则控制流到框507。如果节点没有选择写入请求,则控制流到框509。

在框507处,节点更新节点请求列表以指示所选写入请求。节点可以更新节点请求列表以指示与由前端服务器维持的请求标识符一致的请求标识符。节点可以用进行请求的设备的标识符、对象标识符和所述请求的时间戳来更新节点请求列表。

在框509处,节点确定在检索到的写入列表中是否存在另外的写入请求。如果在检索到的写入列表中存在另外的写入请求,则控制返回到框503。如果在检索到的写入列表中不存在另外的写入请求,则控制流到图6的框601。

图6描绘了图4和5的流程图的继续。图6描绘了用于选择要由节点实现的删除请求的示例操作。图6的示例操作类似于用于从检索到的读取请求列表选择读取请求的那些操作。

在框601处,节点从服务器检索删除请求列表。与读取请求列表示例一样,节点可以使用基于http的请求来请求该请求列表。类似于读取请求列表,云存储服务提供商将会将组成软件/硬件配置/编程成以跨前端并暴露给后端的一致方式来组织和/或标识所述列表。节点向本地存储器或本地贮存器中检索写入列表。

在框603处,节点开始遍历删除请求列表。节点读取每个删除请求或对删除请求的指示,以确定它是否标识驻留在节点上的对象。

在框605处,节点确定要删除的对象是否在存储节点中。节点访问本地存储索引,所述本地存储索引指示被存储在节点的存储介质设备中的对象。如果在本地存储索引中指示所述对象,则控制流到框607。如果本地存储索引不指示要删除的对象,则控制流到框609。

在框607处,节点更新节点请求列表以指示删除请求。节点可以更新节点请求列表以指示与由前端服务器维持的请求标识符一致的请求标识符。节点可以用进行请求的设备的标识符、对象标识符和所述请求的时间戳来更新节点请求列表。

在框609处,节点确定在检索到的删除列表中是否存在另外的删除请求。如果在检索到的删除列表中存在另外的删除请求,则控制返回到框603。如果在检索到的删除列表中不存在另外的删除请求,则控制流到图4的框419。

返回到图4,节点已经从服务器已经接收的那些请求选择了要实现的请求。在框419处,节点将节点请求列表传送到服务器。服务器基于节点请求列表更新它自己的请求列表。服务器可以标记服务器请求列表中的条目以指示后端节点已经选择了所述请求,或者移除对应的请求条目。服务器使用被传送的节点请求列表来跟踪后端节点选择的请求。服务器可以使用节点特定的请求列表来处理来自后端节点的实现消息。服务器还可以使用节点特定的请求列表来在重新开始或恢复之后恢复未决请求的状态。

在框421处,节点处理节点请求列表。节点可以确定用于实现所选请求的顺序次序,或者可以同时处理多个请求。例如,后端节点可以同时向第一存储设备写入和从第二存储设备读取。这可以基于各种标准。例如,节点可以基于所选请求的时间戳、访问模式(例如,读取顺序对象)和存储介质可用性(例如,闪速存储存储体被通电的时间窗)等对所选请求进行排序。当节点开始处理写入请求时,节点从从中检索到写入请求的服务器获得要写入的对象。然而,后端节点可以被编程/配置成在返回节点请求列表之后检索要写入的对象。当请求已被实现时,节点将实现消息传送到对应的服务器。对于读取请求,实现消息将包括或后跟被请求的对象数据。对于写入请求,将向对应的服务器请求对象数据。对于删除和写入请求,实现消息将指示该请求已被实现并且可以指示其他信息。例如,实现消息还可以指示节点何时实现了该请求的时间戳。

在框423处,节点确定是否应当刷新前端服务器列表。可以使用多种触发器中的任何触发器来使节点刷新前端服务器列表。触发器的示例包括时间段的期满、完成对前端服务器列表的遍历、故障恢复事件等。如果应当刷新前端服务器列表,则控制返回到框401。否则,控制流到框425。

在框425处,节点确定前端服务器列表中是否存在另外的服务器。如果存在另外的服务器,则控制返回到框403。如果节点已完成对前端服务器列表的遍历,则控制流到框427。

在框427处,节点重新开始对前端服务器列表的遍历,并且控制返回到框403。节点重复对前端服务器列表的遍历,因为请求可以连续地到达前端。取决于前端服务器列表的实现,节点可以根据多种技术中的任何技术重新开始遍历。例如,节点可以重置与前端服务器列表中的条目对应的指针或计数器以重新开始遍历。此外,节点可以以不同的次序遍历前端服务器列表。

图7描绘了前端服务器处理来自存储服务后端节点的节点请求列表的示例操作的流程图。如早期描绘的,后端节点将节点特定的请求列表或节点请求列表传送到服务器。节点请求列表指示后端节点选择由后端节点实现的请求。按类型的请求列表和按后端节点的请求列表允许服务器区分已被选择用于由后端实现的服务请求和尚未被选择的那些服务请求。

在框701处,服务器从后端节点接收节点请求列表并在本地存储节点请求列表。服务器存储节点请求列表中的每个以跟踪已被选择用于由存储后端节点实现的请求。云存储服务的前端和后端之间的消息传送可以符合基于http的消息传送协议,诸如cdmi。

在框702处,服务器开始遍历节点请求列表。服务器遍历节点请求列表以更新服务器请求列表。

在框703处,服务器确定节点请求列表中的请求的类型。尽管更新操作将是类似的,但是服务器将基于请求类型来选择适当的对应服务器请求列表。

如果所述请求是已被选择用于实现的读取请求,则在框705处服务器更新服务器读取请求列表以指示后端节点对所述请求的选择。如果所述请求是已被选择用于实现的删除请求,则在框处在框707处服务器更新服务器删除请求列表以指示由后端节点对所述请求的选择。为了更新服务器请求列表,服务器可以从适当的服务器请求列表移除所选请求或将条目标记为被后端节点选择。

如果所述请求是已被选择用于实现的写入请求,则在框709处服务器更新所接收的节点请求列表的本地版本以引用要写入的对象。由于服务器将使用节点请求列表而不是服务器写入请求列表来跟踪所选写入请求,服务器将要写入的对象与节点请求列表相关联。在框711处,服务器更新服务器写入请求列表以指示后端节点对所述请求的选择。

图8描绘了前端服务器处理来自后端节点的实现消息的示例操作的流程图。尽管存储服务接口是异步的并且云存储服务提供商可能不一定在相对短的时间段内提供响应,但是云存储服务提供商仍然在某个时间点提供响应。前端服务器处理实现消息并相应地向云存储服务消费者返回响应。

在框801处,服务器从后端节点接收后端节点已实现请求的消息。如先前陈述的,云存储服务的前端和后端之间的消息传送可以符合基于http的消息传送协议,诸如cdmi。

在框803处,服务器访问对应于进行发送的后端节点的节点请求列表。服务器可以通过后端节点标识符来索引节点请求列表。服务器访问节点请求列表以读取与被实现的请求对应的条目。

在框805处,服务器利用与被实现的请求对应的节点请求列表条目来确定该请求的请求者。该请求或从该请求提取的信息将包括云存储服务消费者设备的网络地址。

在框806处,服务器确定后端节点已实现的请求的类型。如果请求类型是读取,则后端节点也已提供被请求的对象。在框809处,服务器将读取所请求的对象提供到请求者。如果请求类型是删除,则服务器在框807处通知请求者已经实现删除请求。如果请求类型是写入,则在框811处服务器通知请求者已经实现写入请求。

在框813处,服务器更新进行发送的后端节点的节点请求列表以移除请求条目。服务器可以从节点请求列表移除条目,因为请求已被实现,并且已相应地通知请求者。

后端节点可以根据不同的范例来实现所选请求。后端节点可以等待直到已经从节点的所选请求列表实现阈值数目的请求才传送请求的实现。后端节点可以在实现每个请求时传送实现。后端节点可以用指示成功删除或删除实现的值连同请求标识符和/或被删除的对象标识符来传送删除请求的实现。后端节点可以用指示写入成功或写入实现的值连同请求标识符和/或写入对象的标识符来传送写入请求的实现。对于读取请求,后端节点至少传送已被读取的对象。当后端节点已实现读取请求时,接收读取对象的服务器可以更新服务器处的节点特定的列表,以引用从后端节点接收的读取对象。

用于自组织存储系统的异步接口可以支持客户端进度请求。云消费者设备可以周期性地传送指示先前提交到服务器的特定请求的消息,以及将该消息指示为进度请求的值(例如,保留字段中的标志或消息头中的状态类型)。如果还没有选择请求,则服务器可以再次回复在进行中或接受的响应类型。如果已经选择了请求以用于实现,则服务器可以访问节点特定的列表以确定所指示的请求是否已经被实现。如果这样,则服务器可以回复确认或对象,如果该请求是读取请求的话。如果已经选择了请求以用于实现但仍在进行中,则服务器可以再次回复指示“在进行中”或“请求已接受”的响应。

变化

在以上示例图示中,云存储服务后端节点在写入请求之前处理读取请求,并且最后处理删除请求。这是基于如下假设的一个示例优先次序:读取可比写入请求更加时间敏感,并且写入请求比删除请求更加时间敏感。本公开的各方面可以将后端节点编程成以不同的次序检索多个列表,和/或可以将后端节点配置成从服务器同时检索多个列表。此外,本公开的各方面可以在每个前端服务器处维持请求列表,所述请求列表指示请求而不管类型。然后,后端节点可以检索单个列表而不是多个列表。维持托管所有类型的请求的请求列表可能会导致较大的请求列表,并且可能会增加后端节点在检索请求列表时相互阻碍的可能性。

尽管对读取和删除请求的选择取决于对应对象的位置,但是后端节点可以竞争写入请求。由于写入请求可能未被绑定到特定后端节点,多个后端节点可以选择写入请求。在服务器按类型维持请求列表的情况下,服务器可以在写入列表上使用锁定机制来防止多个后端节点选择相同的写入请求。如果前端由于竞争条件(例如,多个后端节点在写入请求被移动到节点特定的列表之前选择该请求)而允许后端的多个节点实现相同的写入请求,则作为响应,前端可以忽略最新的写入实现并向(一个或多个)稍后的后端节点发出删除/回滚。

此外,后端节点可以根据不同的技术从前端服务器获得(一个或多个)请求列表。先前的示例说明了后端节点从前端服务器检索请求列表。然而,前端服务器可以将请求列表推送到后端节点。前端服务器将不会将请求分配到后端节点,前端服务器将会将请求列表传送到后端节点。例如,前端服务器中的每个可以将请求列表多播到从拓扑服务发现的后端节点。作为另一示例,每个前端服务器可以以不同的时间间隔将其请求列表传送到已知后端节点的子集,并且确定性地(例如,基于当日时间的滚动时间间隔等)或动态地(例如,取决于来自后端节点的当前响应时间,取决于资源成本等)通过剩下的后端节点前进。

用于云存储服务的自组织存储系统还提供不同的恢复机制。尽管失效的前端服务器可能会丢失在前端服务器处维持的服务器请求列表和节点请求列表,但是后端节点仍将继续实现先前选择的请求。当后端节点将实现消息传送到前端服务器时,尽管前端服务器处的信息丢失,前端服务器仍然可以向请求者通知已实现的请求。对于后端节点,后端节点可以在启动时或在恢复之后针对后端节点先前传送的任何节点请求列表轮询前端服务器。然后,后端节点可以开始处理由前端服务器返回的节点请求列表。

流程图被提供用来帮助理解图示,而不用于限制权利要求书的范围。流程图描绘了可以在权利要求书的范围内改变的示例操作。可以执行另外的操作;可以执行更少的操作;可以并行地执行操作;并且可以以不同的次序执行操作。例如,跨越图4-6的流程图可以包括另外的操作,以确定请求是否被标记为已选择,如果服务器没有从请求列表移除所选请求的话。此外,流程图不考虑将列表流式传输到后端节点。后端节点可以与一个或多个前端服务器建立连接或会话,并“流式传输”一个或多个请求列表。“流式传输”请求列表意味着后端节点可以以除了整个请求列表之外的粒度接收请求列表。例如,后端节点可以根据通信协议接收分组,并且在已经接收到足够的分组时形成请求列表条目。来自分组头或净荷的信息可以定义何时已经接收到足够的分组(例如,用于每个请求列表条目的固定大小、指示列表条目的开始或结束的标志或值等)。此外,后端节点可以获得少于整个请求列表。无论是被推送还是被拉取,后端节点都可以获得列表中的请求的子集或者被限于访问请求的子集。例如,前端服务器可以响应于来自后端节点的针对列表的请求,基于后端节点的存储介质的类型来过滤列表或标志列表条目。可能可以基于对象属性(例如,大小、数据类型等)为后端节点过滤请求列表。前端服务器或后端节点可以基于一个标准或多个标准过滤列表或选择性地从列表中进行选取。前端服务器和后端节点二者都可以基于不同的标准进行过滤。例如,前端节点可以基于后端节点的存储介质类型或地理位置来过滤要向后端节点提供的请求,并且后端节点可以向前端服务器指定用于进一步过滤或请求的对象属性。将理解,流程图图示和/或框图的每个框、以及流程图图示和/或框图中的框的组合可以由程序代码实现。可以将该程序代码提供到通用计算机、专用计算机或者其他可编程机器或装置的处理器。

将领会,本公开的各方面可以被体现为存储在一个或多个机器可读介质中的系统、方法或程序代码/指令。相应地,各方面可以采取硬件、(包括固件、驻留软件、微代码等的)软件、或软件和硬件方面的组合的形式,所述软件和硬件方面在本文中一般都可以称为“电路”、“模块”或“系统”。可以依照平台(操作系统和/或硬件)、应用生态系统、接口、程序员偏好、编程语言、管理员偏好等中的任一个来不同地组织被呈现为示例图示中的各个模块/单元的功能性。

可以利用一个或多个机器可读介质的任何组合。机器可读介质可以是机器可读信号介质或机器可读存储介质。机器可读存储介质可以是例如但不限于采用电子、磁、光学、电磁、红外或半导体技术中的任一个或组合来存储程序代码的系统、装置或设备。机器可读存储介质的更具体示例(非详尽列表)将包括以下:便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或闪速存储器)、便携式光盘只读存储器(cd-rom)、光学存储设备、磁存储设备或前述的任何合适组合。在本文档的上下文中,机器可读存储介质可以是可以包含或存储供由指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合使用的程序的任何有形介质。机器可读存储介质不是机器可读信号介质。

机器可读信号介质可以包括传播的数据信号,所述传播的数据信号有机器可读程序代码体现在其中,例如,在基带中或作为载波的一部分。这样的传播信号可以采取多种形式中的任何形式,包括但不限于电磁、光学或其任何合适的组合。机器可读信号介质可以是不是机器可读存储介质并且可以传送、传播或输送程序以供由指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合使用的任何机器可读介质。

可以使用任何适当的介质来传输机器可读介质上体现的程序代码,所述介质包括但不限于无线、有线、光纤电缆、rf等,或者前述的任何合适的组合。

用于执行用于本公开的各方面的操作的计算机程序代码可以以一个或多个编程语言的任何组合来编写,所述编程语言包括面向对象的编程语言,诸如java®编程语言、c++等;动态编程语言,诸如python;脚本语言,诸如perl编程语言或powershell脚本语言;以及常规的过程编程语言,诸如“c”编程语言或类似的编程语言。程序代码可以完全在独立机器上执行,可以跨多个机器以分布式方式执行,并且可以在一个机器上执行,同时在另一机器上提供结果和或接受输入。

程序代码/指令还可以被存储在机器可读介质中,所述机器可读介质可以指导机器以特定方式运转,使得被存储在机器可读介质中的指令产生包括实现在一个或多个流程图和/或框图框中指定的功能/动作的指令的制品。

图9描绘了具有自组织存储介质设备控制器的示例云存储服务后端节点。后端节点包括控制板900和连接到控制板900的多个存储介质设备915。所述多个存储介质设备915可以是固态存储设备、磁盘驱动器阵列、不同存储介质设备的混合等。控制板900包括存储器907。存储器907可以是系统存储器(例如,高速缓存、sram、dram、零电容器ram、双晶体管ram、edram、edoram、ddrram、eeprom、nram、rram、sonos、pram等中的一个或多个)或上面已经描述的机器可读介质的可能实现中的任何一个或多个。控制板900还包括总线903(例如,pci、isa、pci-express、hypertransport®总线、infiniband®总线、nubus等)和网络接口905(例如,光纤通道接口、以太网接口、互联网小型计算机系统接口、sonet接口、无线接口等)。该系统还包括自组织存储介质设备控制器911。自组织存储介质设备控制器911从前端服务器检索请求列表,并基于本地存储索引和关于后端节点的可能另外的信息来选择要实现的请求。控制器911可以是被编程的现场可编程门阵列。后端节点还可以包括处理器单元901(其可能包括多个处理器、多个核、多个节点和/或实现多线程等)。可以在硬件中和/或处理器901上部分地(或完全地)实现先前描述的功能性中的任一个。此外,实现可以包括未在图9中图示的较少组件或另外的组件(例如,视频卡、音频卡、另外的网络接口、外围设备等)。控制器911和网络接口905耦合到总线903。

虽然参考各种实现和利用描述了本公开的各方面,但是将理解,这些方面是说明性的,并且权利要求书的范围不限于它们。一般地,可以用与任何一个或多个硬件系统一致的设施来实现如本文中描述的用于云存储服务存储系统的技术。许多变化、修改、添加和改进是可能的。

可以为本文中描述的组件、操作或结构提供复数个实例作为单个实例。最后,各种组件、操作和数据存储之间的边界是有点任意的,并且在特定说明性配置的上下文中说明了特定操作。设想了对功能性的其他分配,并且其可以落入本公开的范围内。一般地,可以将在示例配置中呈现为单独组件的结构和功能性实现为组合结构或组件。类似地,可以将呈现为单个组件的结构和功能性实现为单独的组件。这些和其他变化、修改、添加和改进可以落入本公开的范围内。

除非另外具体地陈述,否则在列表之前的短语“中的至少一个”与连词“和”的使用不应被视为排他列表,并且不应被解释为具有来自每个类别的一个项目的类别列表。叙述“a、b和c中的至少一个”的子句可被用所列项目中的仅一个、所列项目中的多个、以及列表中的项目和未列出的另一项目中的一个或多个违反。

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