意图和具有意图的锁的制作方法

文档序号:14119966阅读:323来源:国知局
意图和具有意图的锁的制作方法

背景

随着计算技术进步,分布式存储系统已成为用于部署应用的流行选择。分布式存储系统,诸如云存储系统,通过简单的应用编程接口(api)提供了可靠的存储服务,该api隐藏底层存储的分布式性质。此隐藏的分布式性质缓解了应用开发者处理分布式系统问题(诸如数据分区、故障容忍、以及负载平衡)的需要。在分布式计算环境中,应用数据可被存储在存储系统处而应用计算被位于该存储系统远程的一个或多个计算设备执行。

尽管存储系统提供者通常执行故障容忍协议,然而这些存储系统并非没有自己的问题。例如,不同的计算设备、计算设备程序、以及计算设备虚拟机经常同时请求对单一存储系统对象的访问。在访问对象时,执行应用计算的计算设备可能失败,设备上的应用进程可能崩溃,且将计算设备连接到存储系统的网络可能丢失或重排序通信。为了解决这些问题和其它问题,存储系统可在存储对象被计算设备访问期间锁住存储对象。然而,锁也并非没有自己的问题。一个此类问题是:访问被锁对象的计算设备可能无法完成执行与被锁对象相关联的功能性,从而引起存储系统无限地锁住对象。而且,存储服务往往提供有限的、低水平的api,这些api约束了对存储区域内的对象的应用操作。从而,针对分布式计算环境开发应用仍旧困难。

概述

提供本概述以便以简化的形式介绍以下在详细描述中进一步描述的一些概念。本

技术实现要素:
并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。

根据一个或多个方面,一种计算设备向存储系统传递访问对象的请求。该计算设备向存储系统提供与该对象相关联的意图。响应于提供与该对象相关联的意图,该计算设备引起该存储系统锁住被请求对象并获得对被请求对象的访问。使用所获得的对象,该计算设备随后执行该意图的一个或多个步骤。被执行的一个或多个步骤的结果被传递到该存储系统。在完成该意图的所有步骤之后,该计算设备引起该存储系统解锁被锁对象。

根据一个或多个方面,一种计算设备查明存储系统中的对象被锁住。该计算设备查明与被锁对象相关联的意图。该计算设备查明该对象是否被锁住达阈值时间量。如果该对象尚未被锁住达阈值时间量,该计算设备等待直到该阈值时间量流逝。响应于确定该对象已被锁住达阈值时间量,该计算设备查明与被锁对象相关联的意图的一个或多个未完成步骤并执行该一个或多个未完成步骤。该计算设备将被执行的步骤的结果传递给该存储系统。在执行所有未完成步骤并将与被锁对象相关联的意图的被执行的步骤的结果传递给该存储系统之后,该计算设备引起该存储系统解锁该被锁对象。

根据一个或多个方面,一种存储系统接收来自计算设备的访问对象的请求。该存储系统接收来自该计算设备的与被请求对象相关联的意图。响应于接收与被请求对象相关联的意图,该存储系统锁住被请求对象并向该计算设备提供对被请求对象的访问。该存储系统接收与该被请求对象相关联的意图已完成的指示。响应于查明与该被请求对象相关联的意图已完成,该存储系统解锁该被锁对象。

附图简述

参考附图来描述具体实施方式。在附图中,附图标记最左边的数字标识该附图标记首次出现的附图。在说明书和附图的不同实例中使用相同的附图标记可指示相似或相同的项目。附图中所表示的各实体可指示一个或多个实体并且因而在讨论中可互换地作出对各实体的单数或复数形式的引用。

图1解说根据一个或多个实施例的实现具有用于执行应用计算的意图的锁的示例系统。

图2解说根据一个或多个实施例的示例的具有意图的锁系统。

图3是解说根据一个或多个实施例的用于获得具有相关联的意图的存储系统对象上的锁的示例过程的流程图。

图4是解说根据一个或多个实施例的用于解锁被锁住的具有相关联意图的存储系统对象的示例过程的流程图。

图5是解说根据一个或多个实施例的用于锁住所请求的存储系统对象直到与该对象相关联的意图完成的示例过程的流程图。

图6示出包括示例计算设备的示例系统,该示例计算设备代表可实现本文所描述的各种技术的一个或多个系统和/或设备。

详细描述

本文讨论了用于在分布式计算环境中执行应用功能性的存储系统抽象技术。多个计算设备经由网络连接至存储系统并被配置成针对存储在存储系统处的应用执行操作。在一个或多个实施例中,多个计算设备中的个体计算设备被配置成使用多个程序实例或者在计算设备上运行的虚拟机来执行操作。当计算设备执行应用操作时,计算设备请求对存储在存储系统处的一个或多个应用对象的访问。如本文讨论的,应用对象,或简称对象,是指存储系统存储器中的位置。对象可包括数据、变量、可被用于执行应用的功能或方法的可执行代码、或其组合。在许多情形中,计算设备在执行应用操作时更改被访问的存储系统对象中的应用数据。例如,计算设备可引起存储系统创建附加对象、删除现有对象、或更新对象的值。应用计算模块被实现在每个计算设备上,其使用从存储系统访问的应用对象来执行应用功能性。

具有意图的锁(lwi)系统由连接至存储系统的每个计算设备实现。lwi系统提供存储系统的api和底层存储能力和组织的抽象表示。计算设备通过假定存储系统提供由lwi系统表示的接口来与存储系统交互。为了允许与一定范围的不同存储系统的通信,lwi系统向计算设备上的应用揭示一组api,该组api在该范围的不同存储系统中被支持。这些api使得计算设备能够请求来自存储系统的对象并且将与对象相关联的操作的结果传递回存储系统。当计算设备请求对存储系统对象的访问以便执行应用功能性时,计算设备使用lwi系统来将与被请求对象相关联的意图传递给存储系统。

如本文讨论的,意图是被配置成包含与对象相关联的存储系统操作和计算设备操作两者的任意代码片段。例如,意图可以是具有“run”方法和串行化例程的类的对象。从而,意图指示要用被请求对象执行以执行应用功能性的一个或多个动作或操作。与意图相关联的每个动作或操作也可被称为“步骤”,且单一意图可要求多个步骤的完成。使用lwi系统,计算设备请求对存储系统对象的访问并引起存储系统存储与被请求对象相关联的意图标识符。该意图标识符向存储系统和可能请求对被请求对象的访问的其它计算设备指示与被请求对象相关联的意图。使用lwi系统,计算设备可引起存储系统将锁与意图相关联,这将被请求对象锁住,直到该意图的一个或多个步骤完成为止。这确保在原始请求该对象的计算设备正执行与该意图相关联的步骤时,一不同计算设备不访问被锁对象。

传统上,锁约束了对保持锁的单一计算设备的访问,从而确保一不同计算设备不能访问被锁对象,直到单一计算设备完成执行与被锁对象相关联的应用功能性为止。

为了解决与传统锁相关联的问题,计算设备使用lwi系统来创建和更新存储系统处的意图表,其监听与对象相关联的意图。具体而言,当计算设备请求对一对象的访问并指示与被请求对象相关联的意图时,意图被添加至存储系统中的意图表。意图表中的每个意图与意图标识符相关联,该意图标识符对应于与被请求对象相关联的意图标识符,如同上面所讨论的。意图表从而列出与存储系统中的对象相关联的所有意图。以此方式,lwi系统使得计算设备能够查明与对象相关联的意图,即使在该对象被锁住时。

lwi系统还通过使用分布式原子化亲和力记录(daal)将每个计算设备的意图步骤的执行记录在存储系统上的执行日志中。对于意图中的每个步骤,lwi系统在存储系统中的执行表中输入唯一日志条目。执行表中的每个日志条目表示相关联的意图步骤的完成,从而使得存储系统能够记录已被执行的一个或多个执行步骤。该执行表从而使得多个计算设备能够查明与一意图相关联的什么步骤已完成且与一意图相关联的什么步骤尚未完成。例如,在其中多个不同计算设备正并行执行对单一对象的相同意图的场景中,该多个不同计算设备中的每个计算设备可查询执行日志来查明是否存在一执行步骤的daal条目。如果特定步骤的daal条目存在,则该多个不同计算设备中的每个计算设备跳过执行该特定步骤的执行并使用如由该daal条目所指定的该特定步骤的结果。在不存在给定步骤的daal条目的情况下,计算设备通过执行该给定步骤前进。当计算设备开始给定步骤的执行时,该计算设备引起存储系统生成指示该步骤的执行已开始的daal条目。在完成该给定步骤的执行之后,该计算设备将与该给定步骤的执行相关联的任何结果传递给存储系统并引起存储系统更新该daal条目,表示此步骤的完成。运行相同意图的任何其它计算设备从而能够查明该给定步骤已经被执行并查明与该给定步骤的执行相关联的任何结果。这确保每个意图步骤恰好执行一次,即使在其中多个计算设备正在对一对象并行执行公共意图的情形下。

lwi系统还可包括意图收集器,该意图收集器被配置成与存储系统对接并拉取意图表和执行日志以标识与存储系统上的对象相关联的未完成意图。意图收集器将执行日志中的条目与意图表中的意图进行比较并标识在阈值时间段内尚未完成的意图步骤。在一个或多个实施例中,此阈值时间段能够被存储系统的管理员配置。在一个或多个实现中,意图收集器基于执行日志中的daal条目的缺失来标识未完成意图。替换地或附加地,意图收集器基于执行日志中指示一意图步骤已经开始但尚未完成的daal条目标识未完成意图。当意图收集器查明一意图步骤在阈值时间段内尚未完成时,意图收集器执行未完成的意图步骤并在执行日志中输入表示该未完成的意图步骤的完成的daal条目。以此方式,计算设备可使用意图收集器来解锁先前被一不同计算设备锁住的被请求存储系统对象。

图1是解说根据一个或多个实施例的实现用于执行应用计算的存储系统抽象技术的示例系统100的框图。系统100包括多(m)个计算设备102,每个计算设备能经由网络106与存储系统104通信。网络106可以是各种不同的网络,包括因特网、局域网(lan)、公共电话网、内联网、其他公共和/或专有网络、它们的组合等等。

每个计算设备102可以是各种不同类型的计算设备中的任一种:诸如台式计算机、服务器计算机、虚拟机、膝上型或上网本计算机、移动设备(例如,平板或手机平板设备、蜂窝或其它无线电话(例如智能电话)、笔记本计算机、移动站)、可穿戴设备(例如,眼镜或头戴式显示器(例如增强现实(ar)或虚拟现实(vr)眼镜或头戴式显示器、手表、手链)、娱乐设备(例如,娱乐电器、通信地耦合于显示设备的机顶盒、游戏控制台)、在单一计算设备上运行的多个虚拟机之一、物联网(iot)设备(例如,具有允许与其它设备通信的软件、固件和/或硬件的物体或事物)、电视机或其它显示设备、汽车计算机等。因此,计算设备102的范围可以是从具有充足存储器和处理器资源的全资源设备(如个人计算机、游戏控制台)到具有有限存储器和/或处理资源的低资源设备(如传统机顶盒、手持式游戏控制台)。计算设备102中的不同计算设备可以是相同或不同类型的计算设备。本文讨论的被计算设备102执行的功能性可附加或替换地由在硬件设备上运行的一个或多个程序执行。

每个计算设备102包括一个或多个应用计算模块108,这些模块被配置成执行存储在存储系统104处的一个或多个应用的功能性。一般而言,一个或多个应用的功能性能够通过执行应用的特定任务的计算机系统可执行指令来执行,包括例程、程序、对象、组件、逻辑、数据结构等。应用计算模块108是独立于应用的并且从而被配置成执行各种不同类型的应用的功能性。通过此配置,计算设备102可实现各种应用而无需在本地维护应用资源。

每个计算设备102还包括具有意图的锁(lwi)系统110。lwi系统110向计算设备102提供公共存储模型,该模型是存储系统104的抽象表示。通过抽象与计算设备102通信的存储系统104,lwi系统110使得计算设备能够与不同存储系统的各种api对接。lwi系统110的各种组件和功能性在下面参考图2更详细地讨论。

存储系统104由可各自是各种不同类型的计算设备的一个或多个设备实现。类似于对计算设备102的讨论,存储系统104可以由范围从具有充足存储器和处理器资源的全资源设备到具有有限存储器和/或处理资源的低资源设备的设备来实现。在一个或多个实施例中,存储系统104是云存储系统,诸如azure存储系统、dynamodb系统、cloud存储系统等。替换地,存储系统104可以是大规模分布式存储系统,诸如cassandratm数据库、等。

存储系统104包括一个或多个对象112、一个或多个执行日志114、以及一个或多个意图表116。每个对象指代存储系统存储器中的一个位置,并且从而可指代远程存储系统中的一个或多个无模式表的多个行之一。此外,如本文讨论的,术语“对象”可以可互换地指代远程存储系统中的文档、分区或表。

因为对象112被存储在位于访问存储系统的计算设备远程的存储系统中,所以对本文讨论的对象112的引用对应于如存储在远程存储系统中的对象。

每个对象112可以与锁118和意图标识符(id)120相关联。

lwi系统110使得计算设备能够通过将对象112与锁118和意图id120相关联在该计算设备访问该对象时锁住对象112。锁118和意图id120表示与存储系统中的对象相关联的元数据。此元数据可与对象相关联并且可由lwi系统110的锁管理模块更新,参考图2进一步讨论该模块。例如,锁管理模块204可以通过不可见条目的使用将锁118和意图id120与对象112相关联。如本文讨论的,不可见条目是存储系统(诸如存储系统104)中的条目,其被从返回到存储在存储系统上的应用的任何结果中剥离(排除)。以此方式,所述条目能被与存储系统104对接的计算设备102查明,但仍对存储在存储系统上的应用不可见。

锁118在与对象112相关联的元数据中被表示为该对象的一不可见布尔属性。例如,具有值1的锁118可指示对象112被锁住,而值0可指示该对象被解锁,反之亦然。为了确定对象112是否被锁住,实现lwi系统110的计算设备使用readapi(读api)来与存储系统存储对象112对接并返回与该对象相关联的句柄。锁118的值在此句柄中被返回给计算设备,从而告知计算设备该对象112是否被锁住。

如果计算设备查明对象112被解锁,计算设备可通过向存储系统发出条件更新来获得对象112上的锁118。计算设备使用由lwi系统110提供并关于图2更详细地讨论的api发出包括来自对象112上的readapi操作的返回句柄的此条件更新。当且仅当条件更新成功时计算设备获得锁118。为了释放锁,计算设备发出另一条件更新来重置锁118的布尔值。根据一个或多个实施例,此条件更新取决于与对象相关联的意图的执行是否完成。将意图与对象相关联在下面更详细地讨论。

在对象112被锁住的同时,所述锁防止特定计算设备访问对象。例如,当对象112在传统意义上被锁住时,传统锁阻止没有设置该锁的任何计算设备读取、更新、或删除被锁对象112。如此,如果保持对象112上的锁118的计算设备无法释放锁,则对象可仍旧被无限锁住。为了解决此问题,lwi系统110使得计算设备能够将对象和任何对应的锁与意图id120相关联。

如本文讨论的,意图是被配置成包含与对象相关联的存储系统操作和计算设备操作两者的任意代码片段。从而,意图指定将用对象执行的一个或多个动作或操作。如本文讨论的,与意图相关联的个体动作或操作被称为“意图步骤”或简称“步骤”。对于包括一系列待执行步骤的意图而言,这些步骤被序列化并被定义为意图的部分。

lwi系统110将每个意图与唯一意图id120相关联。lwi系统110使得计算设备能够通过使用不可见条目将意图id120与存储系统中的对象112相关联。如上面所讨论的,这使得计算设备将意图id120输入到与存储系统中的对象112相关联的元数据中。当实现lwi系统110的计算设备将意图id120与对象112相关联时,lwi系统110附加地将意图id120和与意图id相关联的一个或多个步骤上传到存储在存储系统中的意图表格116中。根据一个或多个实施例,将意图id120与对象112相关联并将意图id120输入到意图表116中由lwi系统110的锁管理模块执行,如关于图2更详细地讨论的。意图表116基于其意图id120列出一个或多个意图并包括序列化意图步骤的列表。根据一个或多个实施例,lwi系统110在存储系统中针对该存储系统主存的每个不同应用创建一不同的意图表116。

存储系统的意图表116可被访问存储系统的一个或多个计算设备读取。如上面讨论的,一个或多个计算设备可读取对象112来标识与对象相关联的意图id120。相应地,使用从对象112读取的意图id,与存储系统对接的计算设备能够查询意图表116来查明与意图id相关联的一个或多个步骤。然而,尽管意图表116列出与意图相关联的一个或多个步骤,然而意图表116自己不提供该一个或多个步骤的执行是否已完成的指示。

为了确保意图步骤的执行恰好被执行一次,实现lwi系统110的计算设备被配置成在存储系统104中创建执行日志114。执行日志114包括与意图id120相关联的一个或多个条目的列表,其表示一个或多个意图步骤的执行已开始或完成。实现lwi系统110的计算设备通过使用分布式原子化亲和力记录(“daal”)在执行意图步骤时更新执行日志114。daal将执行意图步骤的结果与该意图步骤改变的对象112一起放置。从而,存储系统的执行日志114中的条目与意图id120相关联并被序列化以提供意图的执行进程(如果存在的话)的指示。具体而言,在计算设备执行意图步骤时,lwi系统110向执行日志114添加新行,其列出意图id120和该意图内的步骤号。对于在计算设备上执行的非确定性操作,诸如随机数生成器的结果,lwi系统110将任何非确定性选择存储在存储系统的执行日志114中。类似地,对于返回结果的存储系统操作,诸如读操作,lwi系统110引起这些结果被存储在存储系统执行日志114中。

执行逻辑114中的条目阻止意图步骤的冗余执行以确保恰好一次语义。实现lwi系统110的计算设备在执行意图步骤之前查询存储系统的执行日志114并仅在与该步骤对象对应的执行日志条目不存在的情况下执行该意图步骤。例如,如果一意图包括五个序列步骤且执行日志114指示步骤一、二和三完成,则计算设备使用存储在执行日志114中的已完成步骤的任何值并继续执行步骤四和五。

执行日志114中的意图步骤条目被与被意图步骤修改的对象112一起放置。具体而言,实现lwi系统110的计算设备在与被修改的对象112相同的范围内创建执行日志114。这使得实现lwi系统110的计算设备能够使用lwi系统110所提供的atomicbatchupdate(原子化批量更新)api来原子化地执行预期的更新操作以及条目到存储系统的执行日志114中的插入,如参考图2更详细地讨论的。对于与未完成意图相关联的被锁对象,当执行日志114包括针对意图的每个步骤的条目时,实现lwi系统110的计算设备向存储系统104发送具有相应意图id120的条件更新并引起存储系统104释放与意图id相关联的对象上的锁118。替换地,在一个或多个实现中,意图中的最终步骤是解锁被锁对象。释放对象上的锁可通过调整对象的元数据中的锁属性来执行,如同上面讨论的。因为多个不同计算设备可并行地执行相同或不同的意图,所以这使得计算设备能够确保在被宣告的意图正被用一对象执行时该对象不被一不同计算设备更新或删除。

通过将被锁对象112与内容id120相关联并用描述与意图表116中的意图相关联的一个或多个步骤的信息填充存储系统,lwi系统110引起存储系统包括用于完成与被锁对象相关联的意图的必要信息。此外,通过用执行日志114中指示所述一个或多个步骤中的哪些步骤已完成的信息来填充存储系统,lwi系统110引起存储系统存储描述与待决或未完成意图相关联的执行进度的信息。这使得计算设备能够完成未完成意图的执行来在锁住对象的原始计算设备无法完成该意图的情况下解锁该对象。

然而,使用lwi系统110与存储系统104对接的计算设备102在保持锁时可能故障。例如,在计算设备上运行的应用进程可能崩溃,将计算设备连接到存储系统的网络可能丢失或重排序消息,或整个计算设备可能停止运转。为了考虑这些可能的故障,lwi系统110使得任何计算设备能够访问被锁对象,即使该计算设备不同于原始锁住该对象的计算设备,只要该计算设备使用与被锁对象相关联的意图id120来请求对该对象的访问。以此方式,不同应用实例可在故障情况下完成执行未完成的意图,同时确保意图中的每个步骤恰好仅一次操作。然而,如果没有计算设备使用与被锁对象相关联的意图id120请求对被锁对象的访问,对象112可仍旧被无限锁住。这种情形通过实现lwi系统110的意图收集器模块来解决。

图2解说根据一个或多个实施例的示例lwi系统110。如同上面讨论的,lwi系统110提供了具有用于与远程存储系统(诸如图1中解说的存储系统104)对接的抽象模型的计算设备。以此方式,使用lwi系统110与远程存储系统对接的计算设备可访问存储在远程存储系统处的对象而无需对存储系统的api或数据存储能力的先验知识。例如,如图1中所解说的,lwi系统110使得计算设备102能够访问用于存储在存储系统104处的一个或多个应用的对象112而无需对存储系统104的先验知识。为了考虑不同数据类型,lwi系统110将存储系统建模为包括一个或多个无模式表,每个无模式表包括多个分区,每个分区进而包括多个行。lwi系统110从而将远程存储系统建模为一个或多个对象112、执行日志114、以及意图表116,如图1中所解说。

lwi系统110包括用于在远程存储系统上执行各种操作的api202。在一个或多个实施例中,api202包括用于创建、读、更新以及删除(crud)存储系统中的对象的操作。创建api在存储系统的表中创建具有指定值的对象。读api返回存储系统的表中的指定对象的值。更新api更新存储系统中的指定对象的值。类似地,删除api从存储系统中删除指定对象。当与存储系统对接的计算设备使用创建、读、和更新api中的任一者时,表示相应操作的句柄被返回给该计算设备,指示该api所指定的操作的完成。

api202还允许用于扫描(scan)、如果未改变则更新(updateifunchanged)、以及原子化批量更新(atomicbatchupdate)存储系统对象的操作,诸如如图1中所解说的对象112。扫描api取存储系统表和谓语作为参数并返回包括该表中满足该谓语的所有对象的流。例如,在一个或多个实施例中,扫描谓语为“具有带有大于5的值的计数属性”。具有此预测值的扫描api随后返回包括所标识的表中具有大于5的属性值的每个对象的流。然而,仅在扫描的一部分期间满足谓语的对象将未必被包括在返回流中。例如,如果对象在扫描期间被创建、更新或删除,则对象可仅在扫描的部分期间满足该谓语。

如果未改变则更新(updateifunchanged)api考虑自对该对象的指定的先前操作起对象是否已经被更新或删除。如果自一先前操作(其可由传递给updateifunchangedapi的句柄标识)起该对象已被更新或删除,则updateifchanged操作不做任何事情。使用lwi系统110与远程存储系统对接的计算设备可获得关于对象改变的句柄,因为创建、读、和更新api操作中的每个操作均返回表示该操作的句柄。

atomicbatchupdateapi使得lwi系统110能够原子化地执行多个更新和插入操作。如本文讨论的,原子化操作对于主机存储系统看上去并行且瞬时地发生。例如,原子化操作保证要么所有操作都发生要么没有操作发生,尽管有可能的系统故障。为了确保原子化,atomicbatchupdateapi的操作限于同一范围(scope)内的对象。如本文讨论的范围是指因系统而异的参数。例如,范围可以是文档、表、表分区、表行、或存储系统支持的任何其它逻辑数据集合。

api202使得实现lwi系统110的计算设备能够与各种不同的分布式存储系统对接,即使所述不同的分布式存储系统提供不同的api。lwi系统110通过使用shim确保api202与远程存储系统的兼容性。shim是使用存储系统自然支持的api来实现api202的调用的层。

使用api202,实现lwi系统110的计算设备能够与一个或多个存储系统对象交互,诸如存储系统104中的对象112,如图1中所解说的,以便执行用于存储在存储系统处的应用的功能性。

lwi系统110还包括锁管理模块204。锁管理模块204实现存储在存储系统(诸如图1中解说的存储系统104)中的应用对象的加锁和解锁。如上面讨论且下面参考图3-5更详细地讨论的,锁管理模块204通过将存储系统对象与锁和意图标识符相关联以确保与存储系统对象相关联的所有意图的恰好一次语义来实现应用对象的加锁和解锁。

为确保被锁对象不无限地保持被锁定,lwi系统110还包括意图收集器模块206。意图收集器模块206被配置成通过完成与存储系统中的被锁对象相关联的未完成意图步骤来确保存储系统104中的实况性。

实现lwi系统110的计算设备利用意图收集器模块206来周期性地查询存储系统中的未完成意图并完成任何未完成意图步骤。具体而言,计算设备使用意图收集器模块206来周期性地轮询存储系统的意图表并将所列出的意图步骤与执行日志中的条目进行比较以查明未完成意图步骤。意图收集器模块206被配置成按任何适当间隔轮询存储系统,诸如每秒一次、每分钟一次等。如果意图收集器模块206确定存储系统对象(诸如图1中的对象112之一)被锁住达大于阈值时间量,则意图收集器模块被配置成查明与该被锁对象相关联的意图id以及与该意图id相关联的未完成步骤。根据一个或多个实施例,意图收集器模块206通过使用被查明的意图id来标识主存被锁对象的存储系统上的意图表中的相应意图来查明该对象已被锁住达阈值时间量。意图收集器模块206标识与意图表中的意图相关联的开始时间并将该开始时间与当前时间进行比较来确定该对象已被锁住的时间量。阈值时间量可以是计算设备的用户可配置的并且可以是任何时间量。根据一个或多个实施例,阈值时间量是一秒或更少。

相应地,实现lwi系统110的意图收集器模块206的计算设备可与存储系统对接来释放对象锁,即使该计算设备不负责设置该锁,以获得对被锁对象的访问,同时确保任何相关联意图的恰好一次语义。尽管有连接到存储系统的计算设备的故障,意图收集器模块206从而通过完成未完成的意图确保了存储系统中的实况性。

在一个或多个实施例中,意图收集器模块206还被配置成执行存储系统的执行日志和意图表的垃圾收集,诸如存储系统104的执行日志104和意图表106,如图1所解说的。垃圾收集执行日志114和意图表116是指删除执行日志114中的条目以及从意图表116中删除意图步骤。为了阻止过早的垃圾收集,意图收集器模块206按照纪元间隔来执行垃圾收集。如本文所讨论的,纪元(epoch)是指可配置的持续时间。根据一个或多个实施例,纪元可以是因意图而异的并且由与意图相关联的应用的开发者定义。例如,意图a可与1天纪元相关联而意图b可与1小时纪元相关联。为了执行垃圾收集,意图收集器模块使用意图的相关联的开始时间来标识与意图id120相关联的纪元n并且不执行对与该意图id相关联的执行日志114或意图表116中的条目的垃圾收集,直到该意图id过期。根据一个或多个实施例,意图收集器模块206在纪元n+2期间及以外将意图id120标识为已过期。

除了确保用于执行在分布式存储系统中的应用的应用功能性的恰好一次语义之外,本文讨论的技术提供了附加的存储系统功能性,该功能性不是由底层存储系统原生提供的。

例如,本文讨论的技术允许对存储系统的可靠快照。通过将存储系统对象与锁和意图相关联,本文的技术消除了快照操作期间可能被在第一计算设备进行快照期间访问该对象的第二计算设备留下的交错操作。类似地,本文讨论的技术允许存储系统表的实况重分区,其允许并行操作。重分区是指将存储系统对象从存储系统中的一个位置迁移到另一位置的过程。通过实现对象上的具有意图的锁,本文讨论的技术阻止不同计算设备在重分区期间更新或读取对象。使用本文讨论的具有意图的锁的技术的实况重分区使得存储系统能够考虑超出系统施加的分区大小限制的分区而不对系统实况性有负面影响。本文讨论的技术还允许使用辅助索引。存储系统表t的辅助索引是独立的表t’,其被配置成允许对t的快速查找。因为存储系统不原生支持多表原子化业务,所以对辅助索引的传统使用导致其中t和t’的内容彼此不一致的情形。然而,本文讨论的技术通过将各操作定义为单一意图中的步骤而允许并行更新、插入和删除t和t’中的行。因为本文讨论的技术要求意图步骤的“全部或均不”执行,所以中间故障所引起的辅助索引问题被消除。而且,本文讨论的技术通过将意图用作业务协调者而允许不同存储系统表和分区间的业务。

图3是解说根据一个或多个实施例的用于获得具有相关联的意图的存储系统对象上的锁的示例过程300的流程图。过程300由实现具有意图的锁的系统并与存储系统对接的计算设备执行,诸如实现lwi系统110并与存储系统104对接的计算设备102,如同图1中所解说的。过程300可以用软件、固件、硬件、或其组合来实现。过程300被示为一组动作,并且不仅限于所示出的用于执行各种动作的操作的顺序。过程300是根据一个或多个实施例的用于获得具有相关联的意图的存储系统对象上的锁的示例过程;对获得具有相关联意图的存储系统对象上的锁的附加讨论参考不同附图被包括在此。

在过程300中,计算设备向存储系统传递请求以求访问对象(动作302)。被请求的对象可包括存储系统中的表、存储系统中的表的分区、或存储系统中的表的行。被请求对象包括存储在存储系统处的应用的应用数据并且能被计算设备使用来执行存储在存储系统处的应用的应用功能性。

该计算设备还向存储系统提供与该对象相关联的意图(动作304)。被传递的意图是伴随该请求并且指示要用被请求对象执行的一个或多个计算设备操作的任意代码片段。附加地或替换地,被传递的意图指示要用被请求对象执行的一个或多个存储系统操作。被传递的意图包括至少一个步骤,该步骤详细说明要用被请求对象执行的计算设备和/或存储系统操作,如同上面所讨论的。与意图相关联的步骤在存储在存储系统上的意图表中列出并且与标识该意图的意图id相关联。意图id作为与存储系统中的对象相关联的元数据被输入,如同上面所讨论的。

响应于向存储系统提供与该对象相关联的意图,该计算设备引起该存储系统锁住被请求对象(动作306)。锁住被请求对象抑制其它计算设备在该对象被锁住时访问该对象。根据一个或多个实施例,计算设备通过将布尔值设置为与存储系统中的该对象相关联的元数据来引起该存储系统锁住该对象,该元数据指示该对象被锁住。该计算设备被配置成经由该存储系统中的不可见条目将布尔值设置为与该对象相关联的元数据。

该计算设备响应于获得该对象上的锁而获得对被请求对象的访问(动作308)。获得对被请求对象的访问包括获得存储在存储系统中的应用的应用数据,该应用数据能被计算设备用来执行该应用的应用功能性,如上面所讨论的。

在计算设备获得对被请求对象的访问之后,计算设备执行与该对象相关联的意图的一个或多个步骤(动作310)。根据一个或多个实施例,执行该意图的该一个或多个步骤包括使用该计算设备的应用计算模块来执行与该应用功能性相关联的一个或多个动作或操作。

在计算设备执行意图步骤之后,该计算设备将被执行步骤的一个或多个结果传递给存储系统(动作312)。被执行意图步骤的结果被通过分布式原子化亲和力记录来传递,分布式原子化亲和力记录是指将存储系统中步骤的执行的结果放置在该步骤的执行所改变的对象附近的过程。具体而言,计算设备将表示意图步骤的完成的日志条目传递到存储系统并引起存储系统用被传递的日志条目来更新执行表。这些被传递的日志条目对存储在存储系统上的应用而言是不可见的,但是是被代表应用执行应用功能性的计算设备能查明的。这使得多个计算设备能够查明与被锁对象相关联的意图的意图步骤的执行状态。

在计算设备执行意图的每个步骤并将被执行步骤的结果传递给存储系统之后,计算设备引起存储系统解锁被锁对象(动作314)。解锁被锁对象准许存储系统向其它计算设备提供对解锁对象的访问。根据一个或多个实施例,计算设备通过调整该计算设备先前设置的布尔值以指示该对象是否被锁住来引起存储系统解锁被锁对象。如上面所讨论的,此布尔值用与该存储系统中的对象相关联的元数据来表示。计算设备被配置成通过将与被锁对象相关联的不可见条目传递到存储系统来调整该布尔值。

图4是解说根据一个或多个实施例的用于解锁被锁住的具有相关联意图的存储系统对象的示例过程400的流程图。过程400由实现具有意图的锁的系统并与存储系统对接的计算设备执行,诸如实现lwi系统110并与存储系统104对接的计算设备102,如同图1中所解说的。过程400可以用软件、固件、硬件、或其组合来实现。过程400被示为一组动作,并且不仅限于所示出的用于执行各种动作的操作的顺序。过程400是根据一个或多个实施例的用于解锁具有相关联的意图的被锁存储系统对象的示例过程;对解锁具有相关联意图的被锁存储系统对象的附加讨论参考不同附图被包括在此。

在过程400中,计算设备查明存储系统中的一对象被锁住(动作402)。根据一个或多个实施例,计算设备通过检查存储系统中的与该对象相关联的元数据并标识指示该元数据中的锁的布尔值来查明该对象被锁住。根据一个或多个实施例,计算设备响应于请求对被锁对象的访问来查明该对象被锁住。

响应于查明该对象被锁住,计算设备查明与被锁对象相关联的意图(动作404)。根据一个或多个实施例,该计算设备通过检查存储系统中与该对象相关联的元数据并且标识该元数据中的意图的意图id来查明与被锁对象相关联的意图。根据一个或多个实施例,计算设备响应于请求对被锁对象的访问来查明与被锁对象相关联的意图。

计算设备随后查明该对象是否被锁住达阈值时间量(动作406)。根据一个或多个实施例,计算设备通过使用被查明的意图id来标识存储系统上的意图表中列出的相应意图来查明该对象是否已被锁住达阈值时间量。计算设备标识与意图id相对应的意图相关联的开始时间并将该开始时间与当前时间进行比较来确定该对象已被锁住的时间量。根据一个或多个实施例,该阈值时间量是因与该对象相关联的意图而异的,并且由意图表中的元数据指示。该阈值时间量可由计算设备的用户指定或者可由应用开发者预先指定。

如果计算设备查明该对象尚未被锁住达阈值时间量,则计算设备等待直到该阈值时间量已流逝(动作408)。等待直到该阈值时间量已流逝允许可能正在执行与意图相关联的一个或多个步骤的另一计算设备完成执行这些步骤。

如果计算设备查明该对象已被锁住达阈值时间量或更久,则该计算设备查明与被锁住的对象相关联的意图的未完成步骤(动作410)。该计算设备通过使用被查明的意图id来标识相应意图和相应意图的一个或多个步骤来查明意图的未完成步骤,所述步骤在存储系统上的意图表中被列出。在标识相应意图的一个或多个步骤之后,计算设备查明该一个或多个步骤中的哪些步骤在存储在存储系统中的执行日志中缺少相应条目。如上面讨论的,执行日志中的条目指示一意图步骤的执行完成,从而与意图步骤相对应的条目的缺少表示未完成的意图步骤。

响应于查明与被锁住对象相关联的意图的未完成步骤,计算设备执行未完成步骤(动作412)。根据一个或多个实施例,未完成步骤的执行由该计算设备的意图收集器模块来执行。

在执行未完成意图步骤之后,计算设备将被执行步骤的结果传递至存储系统(动作414)。被执行意图步骤的结果被通过分布式原子化亲和力记录来传递,分布式原子化亲和力记录是指将存储系统中步骤的执行的结果放置在该步骤的执行所改变的对象附近。具体而言,计算设备将表示意图步骤的完成的日志条目传递到存储系统并引起存储系统用被传递的日志条目来更新执行表。这些被传递的日志条目对存储在存储系统上的应用而言是不可见的,但是是被代表应用执行应用功能性的计算设备能查明的。这使得多个计算设备能够查明与被锁对象相关联的意图的意图步骤的执行状态。

在计算设备执行每个未完成步骤并将被执行步骤的结果传递给存储系统之后,计算设备引起存储系统解锁被锁对象(动作416)。解锁被锁对象准许存储系统向其它计算设备提供对解锁对象的访问。根据一个或多个实施例,计算设备通过调整该计算设备先前设置的布尔值以指示该对象是否被锁住来引起存储系统解锁被锁对象。如上面所讨论的,此布尔值用与该存储系统中的对象相关联的元数据来表示。计算设备被配置成通过将与被锁对象相关联的不可见条目传递到存储系统来调整该布尔值。

图5是解说根据一个或多个实施例的用于锁住所请求的存储系统对象直到与该对象相关联的意图完成为止的示例过程500的流程图。过程500由实现存储系统(诸如图1的存储系统104)的计算设备执行,并且可用软件、固件、硬件或其组合来实现。过程500被示为一组动作,并且不仅限于所示出的用于执行各种动作的操作的顺序。过程500是根据一个或多个实施例的用于锁住被请求的存储系统对象直到与该对象相关联的意图完成的示例过程;锁住所述被请求的存储系统对象直到与该对象相关联的意图完成的附加讨论参考不同附图被包括在此。

在过程500中,从计算设备接收访问对象的请求(动作502)。被请求对象可包括存储系统中的分区、存储系统中的表、或存储系统中的表的行。根据一个或多个实施例,被请求对象包括存储在存储系统处的应用的应用数据并且能被计算设备使用来执行存储在存储系统处的应用的应用功能性。

从计算设备接收与被请求对象相关联的意图(动作504)。被接收的意图是可伴随该请求并且指示要用被请求对象执行的一个或多个计算设备操作的任意代码片段。附加地或替换地,被传递的意图指示要用被请求对象执行的一个或多个存储系统操作。被传递的意图包括至少一个步骤,该步骤详细说明要用被请求对象执行的计算设备和/或存储系统操作,如同上面所讨论的。与意图相关联的该至少一个步骤被输入在存储在存储系统中的意图表中并且与该意图和标识该意图的意图id相关联。意图id作为与存储系统中的对象相关联的元数据被输入,如同上面讨论的。

响应于接收到与被请求对象相关联的意图,实现存储系统的计算设备锁住被请求对象(动作506)。锁住被请求对象在该对象被锁住时禁止计算设备访问该对象,除非该计算设备执行与该锁定相关联的意图步骤。根据一个或多个实施例,计算设备通过将布尔值设置为与存储系统中的该对象相关联的元数据来引起该存储系统锁住该对象,该元数据指示该对象被锁住。

响应于锁住被请求对象,实现存储系统的计算设备将被请求对象提供给请求该对象的计算设备(动作508)。根据一个或多个实施例,提供对被请求对象的访问包括提供由存储系统存储的应用的应用数据。此应用数据能被请求方计算设备用来执行该应用的应用功能性,如上面所讨论的。

实现存储系统的计算设备随后接收与被请求对象相关联的意图完成的指示(动作510)。根据一个或多个实施例,接收相关联意图完成的指示包括通过分布式原子化亲和力记录接收与执行一个或多个意图步骤相关联的结果。在接收与执行一个或多个意图步骤相关联的结果之后,实现存储系统的计算设备使用执行表在存储系统中放置结果。用日志条目填充此执行表,日志条目表示意图步骤的完成,如同上面所讨论的。这些被传递的日志条目对存储在存储系统上的应用而言是不可见的,但是是被代表应用执行应用功能性的计算设备能查明的。这使得多个计算设备能够查明与被锁对象相关联的意图的意图步骤的执行状态。

在接收到与被请求对象相关联的意图的所有步骤完成的指示之后,实现存储系统的计算设备解锁被请求对象(动作512)。解锁被锁对象准许存储系统向其它计算设备提供对被锁对象的访问。根据一个或多个实施例,存储系统通过调整与被请求对象相关联的布尔值来解锁被请求对象。如上面所讨论的,此布尔值用与该存储系统中的对象相关联的元数据来表示。

尽管本文讨论的技术已经参考了其中计算设备从存储系统远程实现的分布式计算环境,然而附加地或替换地,本文讨论的技术可在单一计算设备上实现。例如,返回图1,计算设备102中的单个计算设备可包括应用计算模块108的多个实例,每个实例与其自己的lwi系统110相关联。在单个计算设备环境中,应用计算模块108的多个实例可经由提供与网络104的功能性类似的功能性的系统总线或其它数据和命令传输系统彼此连接。在单个计算设备102实现中,应用计算模块108的多个实例访问来自由计算设备102的一个或多个计算机可读介质提供的存储器/存储能力的对象。在此实现中,计算设备的存储器/存储表示存储系统104的功能性,如本文所述。从而,本文的技术可被用在分布式计算环境以及单一计算设备环境两者中。

虽然本文中参考特定模块讨论了特定功能,但应注意,本文中讨论的个体模块的功能可被分成多个模块,和/或多个模块的至少一些功能可被组合在单个模块中。附加地,本文讨论的执行某一动作的特定模块包括该特定模块本身执行该动作或另选地该特定模块调用或与其他方式访问执行该动作的另一组件或模块(或与该特定模块联合执行该动作)。因而,执行某一动作的特定模块包括该特定模块本身执行该动作或由该特定模块调用或以其他方式访问的另一模块执行该动作。

图6在600概括地示出了包括示例计算设备602的示例系统,该示例系统表示可以实现本文中所描述的各种技术的一个或多个系统和/或设备。计算设备602可以是,例如,服务提供方的服务器、在全资源计算设备上实现的多个虚拟机之一、与客户端相关联的设备(例如,客户端设备)、片上系统、和/或任何其他合适的计算设备或计算系统。

所示的示例计算设备602包括处理系统604、一个或多个计算机可读介质606,以及相互通信地耦合的一个或多个i/o接口608。尽管没有示出,计算设备602可进一步包括系统总线或将各种组件相互耦合的其它数据和命令传输系统。系统总线可以包括不同总线结构中的任一个或其组合,诸如存储器总线或存储器控制器、外围总线、通用串行总线和/或利用各种总线体系结构中的任一种的处理器或局部总线。也构想了各种其它示例,诸如控制和数据线。

处理系统604表示使用硬件执行一个或多个操作的功能。因此,处理系统604被示为包括可被配置为处理器、功能块等的硬件元件610。这可包括在作为专用集成电路或使用一个或多个半导体构成的其它逻辑设备的硬件中的实现。硬件元件610不受形成它们的材料或者其中利用的处理机制的限制。例如,处理器可以由半导体和/或晶体管(例如,电子集成电路(ic))构成。在这一上下文中,处理器可执行指令可以是可电子地执行的指令。

计算机可读介质606被示为包括存储器/存储612。存储器/存储612表示与一个或多个计算机可读介质相关联的存储器/存储容量。存储器/存储612可包括易失性介质(如随机存取存储器(ram))和/或非易失性介质(如只读存储器(rom)、电阻式ram(reram)、闪存、光盘、磁盘等等)。存储器/存储612可包括固定介质(例如,ram、rom、固定硬盘驱动器等)以及可移动介质(例如闪存、可移动硬盘驱动器、光盘等等)。计算机可读介质606可以下面进一步描述的各种方式来配置。

一个或多个输入/输出接口608表示允许用户向计算设备602输入命令和信息的功能,并且还允许使用各种输入/输出设备向用户和/或其它组件或设备呈现信息。输入设备的示例包括键盘、光标控制设备(例如,鼠标)、麦克风(例如,用于语音输入)、扫描仪、触摸功能(例如,电容性的或被配置来检测物理触摸的其它传感器)、相机(例如,可采用可见或诸如红外频率的不可见波长来将不涉及触摸的移动检测为姿势),等等。输出设备的示例包括显示设备(例如,监视器或投影仪)、扬声器、打印机、网卡、触觉响应设备,等等。因此,计算设备602可以下面进一步描述的各种方式来配置以支持用户交互。

计算设备602还包括具有意图的锁(lwi)系统614。lwi系统614提供用于锁住具有相关联意图的对象以及通过完成相关联意图的步骤来解锁对象的功能性,如同上面讨论的。lwi系统614可实现例如图1或图2的lwi系统110。

此处可以在软件、硬件元件或程序模块的一般上下文中描述各种技术。一般而言,此类模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、元件、组件、数据结构等等。本文使用的术语“模块”、“功能”和“组件”一般表示软件、固件、硬件或其组合。本文描述的技术的各特征是平台无关的,从而意味着该技术可在具有各种处理器的各种计算平台上实现。

所描述的模块和技术的实现可以被存储在某种形式的计算机可读介质上或跨某种形式的计算机可读介质传输。计算机可读介质可包括可由计算设备602访问的各种介质。作为示例而非限制,计算机可读介质可包括“计算机可读存储介质”和“计算机可读信号介质”。

“计算机可读存储介质”指相对于仅信号传输、载波或信号本身而言,启用对信息的持久存储和/或有形存储的介质和/或设备。因此,计算机可读存储介质是指非信号承载介质。计算机可读存储介质包括以适合于存储如计算机可读指令、数据结构、程序模块、逻辑元件/电路、或其它数据等的方法或技术来实现的诸如易失性和非易失性、可移动和不可移动介质和/或存储设备的硬件。该计算机可读存储介质的示例包括但不限于,ram、rom、eeprom、闪存或其它存储器技术、cd-rom、数字多功能盘(dvd)或其它光存储、硬盘、磁带盒、磁带、磁盘存储或其它磁存储设备、或者可适用于存储所需信息并可由计算机访问的其它存储设备、有形介质或制品。

“计算机可读信号介质”可以指被配置为诸如经由网络向计算设备602的硬件传输指令的信号承载介质。信号介质通常用诸如载波、数据信号、或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其他数据。信号介质还包括任何信息传送介质。术语“已调制数据信号”是指使得以在信号中编码信息的方式来设定或改变其一个或多个特征的信号。作为示例而非限制,通信介质包括有线介质,诸如有线网络或直接线路连接,以及无线介质,诸如声学、rf、红外线和其它无线介质。

如先前所描述的,硬件元件610和计算机可读介质606代表以硬件形式实现的指令、模块、可编程器件逻辑和/或固定器件逻辑,其可在某些实施例中被采用来实现此处描述的技术的至少某些方面。硬件元件可包括集成电路或片上系统、应用专用集成电路(asic)、现场可编程门阵列(fpga)、复杂可编程逻辑器件(cpld),和用硅或其它硬件设备实现的组件。在此上下文中,硬件元件可以充当处理设备,该处理设备执行由该硬件元件以及用于存储供执行的指令的硬件设备(例如前面描述的计算机可读存储介质)所体现的指令、模块和/或逻辑所定义的程序任务。

前面的组合也可被采用来实现本文所述的各种技术。因此,软件、硬件,或模块和其他程序模块可被实现为一个或多个指令和/或在某种形式的计算机可读存储介质上和/或由一个或多个硬件元件610实现的逻辑。计算设备602可被配置成实现对应于软件和/或硬件模块的特定指令和/或功能。因此,将模块实现为可由计算设备602执行为软件的模块可至少部分以硬件完成,例如,通过使用计算机可读存储介质和/或处理系统的硬件元件610。指令和/或功能可以是一个或多个制品(例如,一个或多个计算设备602和/或处理系统604)可执行/可操作的,以实现本文描述的技术、模块、以及示例。

如在图6中进一步例示的,示例系统600使得用于当在个人计算机(pc)、电视设备和/或移动设备上运行应用时的无缝用户体验的普遍存在的环境成为可能。服务和应用在所有三个环境中基本相似地运行,以便当使用应用、玩视频游戏、看视频等时在从一个设备转换到下一设备时得到共同的用户体验。

在示例系统600中,多个设备通过中央计算设备互连。中央计算设备对于多个设备可以是本地的,或者可以位于多个设备的远程。在一个或多个实施例中,中央计算设备可以是通过网络、因特网或其他数据通信链路连接到多个设备的一个或多个服务器计算机的云。

在一个或多个实施例中,该互连架构使得功能能够跨多个设备递送以向多个设备的用户提供共同且无缝的体验。多个设备的每一个可具有不同的物理要求和能力,且中央计算设备使用一平台来使得为设备定制且又对所有设备共同的体验能被递送到设备。在一个或多个实施例中,创建目标设备的类,且针对设备的通用类来特制体验。设备类可由设备的物理特征、用途类型或其他共同特性来定义。

在各种实现中,计算设备602可采取各种各样不同的配置,诸如用于计算机616、移动设备618和电视机620用途。这些配置中的每一个包括可具有一般不同的构造和能力的设备,并且因而计算设备602可根据不同的设备类中的一个或多个来配置。例如,计算设备602可被实现为计算机616类的设备,该类包括个人计算机、台式计算机、多屏幕计算机、膝上型计算机、上网本、服务器等。

计算设备602还可被实现为移动设备618类的设备,该类包括诸如移动电话、便携式音乐播放器、便携式游戏设备、平板计算机、多屏幕计算机等移动设备。计算设备602还可被实现为电视机620类的设备,该类包括在休闲观看环境中具有或连接到通常更大的屏幕的设备。这些设备包括电视机、机顶盒、游戏控制台等。

本文所描述的技术可由计算设备602的这些各种配置来支持,且不限于在本文描述的各具体示例。

在本文的讨论中,描述了各种不同的实施例。要领会和裂解,本文描述的每一实施例能够单独使用或者结合本文描述的一个或多个其他实施例来使用。本文讨论的技术的其他方面涉及以下实施例中的一者或多者。

一种在计算设备中实现的方法,所述方法包括:向存储系统传递访问对象的请求;向所述存储系统提供与所述对象相关联的意图;响应于提供与所述对象相关联的意图,获得对所述对象的访问;执行与所述对象相关联的意图的一个或多个步骤;以及向所述存储系统传递与所述对象相关联的意图的所述一个或多个步骤的结果,使得所述存储系统能够记录所述一个或多个步骤已被执行并且确保所述意图中的每个步骤执行恰好一次。

作为上述方法中的任一者的替换或补充,以下任一者或其组合:其中与所述对象相关联的意图的所述一个或多个步骤描述要用至少所述对象执行的一个或多个计算设备操作或存储系统操作;其中所述对象包括所述存储系统的存储器中的位置,所述位置包括所述存储系统中的表、所述存储系统中的表的分区、或所述存储系统中的表的行之一中的至少一部分;其中提供与所述对象相关联的意图包括:向所述存储系统提供与所述对象相关联的意图的意图标识符;引起所述存储系统更新与所述对象相关联的元数据以包括与所述对象相关联的意图的意图标识符;以及引起所述存储系统将与所述对象相关联的意图的所述一个或多个步骤的序列化列表包括在意图表中;其中传递与所述对象相关联的意图的所述一个或多个步骤的结果包括引起所述存储系统生成包括一个或多个条目的执行日志,其中所述一个或多个条目中的个体条目指示所述计算设备已完成执行与所述对象相关联的意图的所述一个或多个步骤的相应个体步骤;该方法进一步包括引起所述存储系统锁住所述对象,作为所述意图的第一步骤的执行的一部分;其中引起所述存储系统锁住所述对象阻止不请求对所述对象的访问以执行与所述对象相关联的意图的所述一个或多个步骤的计算设备访问所述对象,直到与所述对象相关联的意图的执行完成为止;其中引起所述存储系统锁住所述对象允许请求对所述对象的访问以执行与所述对象相关联的意图的所述一个或多个步骤的一个或多个不同计算设备访问所述对象。

一种在计算设备中实现的方法,所述方法包括:查明存储在存储系统中的对象被锁住;查明与被锁对象相关联的意图;查明与所述被锁对象相关联的意图的一个或多个未完成步骤;执行所述意图的所述一个或多个未完成步骤;将所述意图的被执行的一个或多个步骤的结果传递至所述存储系统;以及响应于将所述意图的被执行的一个或多个步骤的结果传递至所述存储系统而引起所述存储系统解锁所述对象。

作为上述方法中的任一者的替换或补充,以下任一者或其组合:其中查明存储在所述存储系统中的对象被锁住是响应于请求对所述对象的访问而执行的;其中查明与被锁对象相关联的意图包括查明所述意图的意图标识符,所述意图标识符被包括在存储在所述存储系统中的所述对象的元数据;其中查明与所述对象相关联的意图的一个或多个未完成步骤包括:查明所述意图的意图标识符;使用所述意图标识符查明与所述意图相关联的一个或多个步骤的列表,所述一个或多个步骤的列表包括所述一个或多个未完成步骤;轮询所述存储系统的执行日志来查明是否所述一个或多个步骤的列表中的任何步骤被完成;以及基于所述执行日志中的一个或多个日志条目的不存在而查明所述意图的所述一个或多个未完成步骤;其中与所述对象相关联的意图的所述一个或多个未完成步骤描述要用所述对象执行的一个或多个计算设备操作或存储系统操作;其中所述计算设备不同于引起所述存储系统锁住所述对象的计算设备;其中所述存储系统是在分布式计算环境中的所述计算设备的远程实现的;该方法进一步包括查明所述被锁对象是否已被锁达阈值时间量,并且响应于确定所述被锁对象尚未被锁达所述阈值时间量由所述计算设备等待所述阈值时间量流逝;其中所述阈值时间量取决于与所述对象相关联的意图;其中查明所述被锁对象是否已被锁达阈值时间量包括:查明与所述意图相关联的开始时间;将所述开始时间与当前时间进行比较来确定所述意图的流逝时间;以及将所述流逝时间与所述阈值时间量进行比较,其中如果所述流逝时间是比所述阈值时间量更长的持续时间则所述对象被锁住达所述阈值时间量。

一种存储系统,包括:处理器;以及上面存储有多个指令的计算机可读存储介质,所述多个指令实现所述计算设备的平台并且响应于由所述处理器执行,引起所述处理器:接收来自计算设备的访问对象的请求;接收来自所述计算设备的与所述对象相关联的意图;响应于接收到与所述对象相关联的意图,向所述计算设备提供对所述对象的访问;接收与所述对象相关联的意图的一个或多个步骤的执行完成的指示;以及将一个或多个条目输入到执行日志中,所述一个或多个条目中的个体条目指示所述意图的所述一个或多个步骤之一的完成并且确保所述意图的所述一个或多个步骤每个恰好执行一次。

作为上述系统中的任一者的替换或补充,以下任一者或其组合:所述多个指令进一步包括引起所述处理器锁住所述对象并且阻止不请求所述对象以响应于接收与所述对象相关联的所述意图而执行与所述对象相关联的意图的所述一个或多个步骤的计算设备。

尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。更确切而言,上述具体特征和动作是作为实现权利要求的示例形式公开的。

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